equal
deleted
inserted
replaced
13 val lazy_name: string -> (unit -> 'a) -> 'a lazy |
13 val lazy_name: string -> (unit -> 'a) -> 'a lazy |
14 val lazy: (unit -> 'a) -> 'a lazy |
14 val lazy: (unit -> 'a) -> 'a lazy |
15 val peek: 'a lazy -> 'a Exn.result option |
15 val peek: 'a lazy -> 'a Exn.result option |
16 val is_running: 'a lazy -> bool |
16 val is_running: 'a lazy -> bool |
17 val is_finished: 'a lazy -> bool |
17 val is_finished: 'a lazy -> bool |
|
18 val finished_result: 'a lazy -> 'a Exn.result |
18 val force_result: 'a lazy -> 'a Exn.result |
19 val force_result: 'a lazy -> 'a Exn.result |
19 val force: 'a lazy -> 'a |
20 val force: 'a lazy -> 'a |
20 val force_value: 'a lazy -> 'a lazy |
21 val force_value: 'a lazy -> 'a lazy |
21 val map: ('a -> 'b) -> 'a lazy -> 'b lazy |
22 val map: ('a -> 'b) -> 'a lazy -> 'b lazy |
22 val map_finished: ('a -> 'b) -> 'a lazy -> 'b lazy |
23 val map_finished: ('a -> 'b) -> 'a lazy -> 'b lazy |
57 | is_running (Lazy var) = |
58 | is_running (Lazy var) = |
58 (case Synchronized.value var of |
59 (case Synchronized.value var of |
59 Expr _ => false |
60 Expr _ => false |
60 | Result res => not (Future.is_finished res)); |
61 | Result res => not (Future.is_finished res)); |
61 |
62 |
|
63 fun is_finished_future res = |
|
64 Future.is_finished res andalso not (Exn.is_interrupt_exn (Future.join_result res)); |
|
65 |
62 fun is_finished (Value _) = true |
66 fun is_finished (Value _) = true |
63 | is_finished (Lazy var) = |
67 | is_finished (Lazy var) = |
64 (case Synchronized.value var of |
68 (case Synchronized.value var of |
65 Expr _ => false |
69 Expr _ => false |
66 | Result res => |
70 | Result res => is_finished_future res); |
67 Future.is_finished res andalso not (Exn.is_interrupt_exn (Future.join_result res))); |
71 |
|
72 fun finished_result (Value a) = Exn.Res a |
|
73 | finished_result (Lazy var) = |
|
74 let fun fail () = Exn.Exn (Fail "Unfinished lazy") in |
|
75 (case Synchronized.value var of |
|
76 Expr _ => fail () |
|
77 | Result res => if is_finished_future res then Future.join_result res else fail ()) |
|
78 end; |
68 |
79 |
69 |
80 |
70 (* force result *) |
81 (* force result *) |
71 |
82 |
72 fun force_result (Value a) = Exn.Res a |
83 fun force_result (Value a) = Exn.Res a |