src/Pure/Concurrent/lazy.ML
changeset 67669 ad8ca85f13e2
parent 67668 5f4448e60662
child 68130 6fb85346cb79
equal deleted inserted replaced
67668:5f4448e60662 67669:ad8ca85f13e2
    16   val is_pending: 'a lazy -> bool
    16   val is_pending: 'a lazy -> bool
    17   val is_running: 'a lazy -> bool
    17   val is_running: 'a lazy -> bool
    18   val is_finished: 'a lazy -> bool
    18   val is_finished: 'a lazy -> bool
    19   val force_result: 'a lazy -> 'a Exn.result
    19   val force_result: 'a lazy -> 'a Exn.result
    20   val force: 'a lazy -> 'a
    20   val force: 'a lazy -> 'a
    21   val force_list: 'a lazy list -> 'a list
       
    22   val force_value: 'a lazy -> 'a lazy
    21   val force_value: 'a lazy -> 'a lazy
    23   val trim_value: 'a lazy -> 'a lazy
    22   val trim_value: 'a lazy -> 'a lazy
    24   val map: ('a -> 'b) -> 'a lazy -> 'b lazy
    23   val map: ('a -> 'b) -> 'a lazy -> 'b lazy
    25   val map_finished: ('a -> 'b) -> 'a lazy -> 'b lazy
    24   val map_finished: ('a -> 'b) -> 'a lazy -> 'b lazy
    26   val consolidate: 'a lazy list -> 'a lazy list
    25   val consolidate: 'a lazy list -> 'a lazy list
   110 
   109 
   111 end;
   110 end;
   112 
   111 
   113 fun force x = Exn.release (force_result x);
   112 fun force x = Exn.release (force_result x);
   114 
   113 
   115 fun force_list xs =
       
   116   (List.app (fn x => if is_pending x then ignore (force_result x) else ()) xs;
       
   117    map force xs);
       
   118 
       
   119 fun force_value x = if is_value x then x else value (force x);
   114 fun force_value x = if is_value x then x else value (force x);
   120 fun trim_value x = if is_pending x then x else force_value x;
   115 fun trim_value x = if is_pending x then x else force_value x;
   121 
   116 
   122 
   117 
   123 (* map *)
   118 (* map *)