#![cfg_attr(test, feature(test))]
#![feature(fnbox)]
#![feature(untagged_unions)]
extern crate unreachable;
#[cfg(test)]
extern crate test;
use std::ops::{Deref, DerefMut};
pub mod strict;
pub mod sync;
pub mod unsync;
pub use strict::Strict;
pub use sync::{AtomicThunk, ArcThunk};
pub use unsync::{Thunk, RcThunk};
pub trait LazyRef
: Deref + Sized
where Self::Target: Into<Self> + Sized
{
#[inline]
fn computed(t: Self::Target) -> Self {
t.into()
}
fn defer<'a, F: FnOnce() -> Self::Target + 'a>(F) -> Self where Self::Target: 'a;
fn force(&self);
}
pub trait LazyMut: From<<Self as Deref>::Target> + LazyRef + DerefMut
where Self::Target: Sized
{
}
pub trait Lazy: LazyMut
where Self::Target: Sized
{
fn unwrap(self) -> Self::Target;
}