equal
deleted
inserted
replaced
9 signature LAZY = |
9 signature LAZY = |
10 sig |
10 sig |
11 type 'a lazy |
11 type 'a lazy |
12 val peek: 'a lazy -> 'a Exn.result option |
12 val peek: 'a lazy -> 'a Exn.result option |
13 val is_finished: 'a lazy -> bool |
13 val is_finished: 'a lazy -> bool |
14 val get_finished: 'a lazy -> 'a |
|
15 val lazy: (unit -> 'a) -> 'a lazy |
14 val lazy: (unit -> 'a) -> 'a lazy |
16 val value: 'a -> 'a lazy |
15 val value: 'a -> 'a lazy |
17 val force_result: 'a lazy -> 'a Exn.result |
16 val force_result: 'a lazy -> 'a Exn.result |
18 val force: 'a lazy -> 'a |
17 val force: 'a lazy -> 'a |
19 val map: ('a -> 'b) -> 'a lazy -> 'b lazy |
18 val map: ('a -> 'b) -> 'a lazy -> 'b lazy |
39 |
38 |
40 fun lazy e = Lazy (Synchronized.var "lazy" (Expr e)); |
39 fun lazy e = Lazy (Synchronized.var "lazy" (Expr e)); |
41 fun value a = Lazy (Synchronized.var "lazy" (Result (Future.value a))); |
40 fun value a = Lazy (Synchronized.var "lazy" (Result (Future.value a))); |
42 |
41 |
43 fun is_finished x = is_some (peek x); |
42 fun is_finished x = is_some (peek x); |
44 |
|
45 fun get_finished x = |
|
46 (case peek x of |
|
47 SOME res => Exn.release res |
|
48 | NONE => raise Fail "Unfinished lazy evaluation"); |
|
49 |
43 |
50 |
44 |
51 (* force result *) |
45 (* force result *) |
52 |
46 |
53 fun force_result (Lazy var) = |
47 fun force_result (Lazy var) = |