///| priv enum Repr[A] { Value(A) Thunk(() -> A) } ///| struct Lazy[A] { mut repr : Repr[A] } ///| struct LazyBuilder[A]((Lazy[A]) -> Lazy[A]) ///| struct LazyRec[A] { mut repr : LazyBuilder[A] mut memo : Lazy[A]? }