equal
deleted
inserted
replaced
9 sig |
9 sig |
10 type 'a T |
10 type 'a T |
11 val value: 'a -> 'a T |
11 val value: 'a -> 'a T |
12 val delay: (unit -> 'a) -> 'a T |
12 val delay: (unit -> 'a) -> 'a T |
13 val force: 'a T -> 'a |
13 val force: 'a T -> 'a |
|
14 val map_force: ('a -> 'a) -> 'a T -> 'a T |
14 val peek: 'a T -> 'a option |
15 val peek: 'a T -> 'a option |
15 val same: 'a T * 'a T -> bool |
16 val same: 'a T * 'a T -> bool |
16 end |
17 end |
17 |
18 |
18 structure Susp :> SUSP = |
19 structure Susp :> SUSP = |
36 let |
37 let |
37 val v = f (); |
38 val v = f (); |
38 val _ = susp := Value v; |
39 val _ = susp := Value v; |
39 in v end)); |
40 in v end)); |
40 |
41 |
41 fun peek susp = |
42 fun map_force f = value o f o force; |
42 (case ! susp of |
43 |
43 Value v => SOME v |
44 fun peek (ref (Value v)) = SOME v |
44 | Delay _ => NONE); |
45 | peek (ref (Delay _)) = NONE; |
45 |
46 |
46 fun same (r1 : 'a T, r2) = (r1 = r2); (*equality on references*) |
47 fun same (r1 : 'a T, r2) = (r1 = r2); (*equality on references*) |
47 |
48 |
48 end; |
49 end; |