1 datatype ('a
, 'b
) either
= LEFT
of 'a | RIGHT
of 'b
4 LEFT (thunk ()) handle e
=> RIGHT e
6 datatype 'a status
= LAZY
of unit
-> 'a promise
7 | EAGER
of ('a
, exn
) either
8 withtype 'a promise
= 'a status ref ref
14 lazy (fn () => ref (ref (EAGER (eval exp
))))
18 of EAGER (LEFT x
) => x
19 |
EAGER (RIGHT x
) => raise x
25 of LAZY _
=> (!promise
:= !(!promise
') ;
33 fun check (b
, e
) = if b
then () else raise e
34 fun verify b
= check (b
, Assertion
)
38 val r
= delay (fn () => (print
"hi\n" ; 1))
39 val s
= lazy (fn () => r
)
40 val t
= lazy (fn () => s
)
43 ; verify (1 = force r
)