equal
deleted
inserted
replaced
26 |
26 |
27 fun value v = ref (Value v); |
27 fun value v = ref (Value v); |
28 |
28 |
29 fun delay f = ref (Delay f); |
29 fun delay f = ref (Delay f); |
30 |
30 |
31 fun force (ref (Value v)) = v |
31 fun force susp = CRITICAL (fn () => |
32 | force (r as ref (Delay f)) = |
32 (case ! susp of |
|
33 Value v => v |
|
34 | Delay f => |
33 let |
35 let |
34 val v = f () |
36 val v = f (); |
35 in |
37 val _ = susp := Value v; |
36 r := Value v; |
38 in v end)); |
37 v |
|
38 end; |
|
39 |
39 |
40 fun peek (ref (Value v)) = SOME v |
40 fun peek susp = |
41 | peek (ref (Delay _)) = NONE; |
41 (case ! susp of |
|
42 Value v => SOME v |
|
43 | Delay _ => NONE); |
42 |
44 |
43 fun same (r1 : 'a T, r2) = (r1 = r2); (*equality on references*) |
45 fun same (r1 : 'a T, r2) = (r1 = r2); (*equality on references*) |
44 |
46 |
45 end |
47 end |