src/Pure/Concurrent/lazy.ML
changeset 44387 0f0ba362ce50
parent 44386 4048ca2658b7
child 44427 c4a86d72a5cc
equal deleted inserted replaced
44386:4048ca2658b7 44387:0f0ba362ce50
     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) =