author | wenzelm |
Thu, 07 Apr 2005 09:26:40 +0200 | |
changeset 15665 | 7e7412fffc0c |
parent 14278 | ae499452700a |
child 16179 | fa7e70be26b0 |
permissions | -rw-r--r-- |
signature SUSP = sig type 'a susp val force : 'a susp -> 'a val delay : (unit -> 'a) -> 'a susp val value : 'a -> 'a susp end structure Susp :> SUSP = struct datatype 'a suspVal = Value of 'a | Delay of unit -> 'a type 'a susp = 'a suspVal ref fun force (ref (Value v)) = v | force (r as ref (Delay f)) = let val v = f () in r := Value v; v end fun delay f = ref (Delay f) fun value v = ref (Value v) end