map_force
authorhaftmann
Thu, 25 Sep 2008 09:28:07 +0200
changeset 28349 46a0dc9b51bb
parent 28348 4f2406ddd9ea
child 28350 715163ec93c0
map_force
src/Pure/General/susp.ML
--- a/src/Pure/General/susp.ML	Thu Sep 25 09:28:06 2008 +0200
+++ b/src/Pure/General/susp.ML	Thu Sep 25 09:28:07 2008 +0200
@@ -11,6 +11,7 @@
   val value: 'a -> 'a T
   val delay: (unit -> 'a) -> 'a T
   val force: 'a T -> 'a
+  val map_force: ('a -> 'a) -> 'a T -> 'a T
   val peek: 'a T -> 'a option
   val same: 'a T * 'a T -> bool
 end
@@ -38,10 +39,10 @@
             val _ = susp := Value v;
           in v end));
 
-fun peek susp =
-  (case ! susp of
-    Value v => SOME v
-  | Delay _ => NONE);
+fun map_force f = value o f o force;
+
+fun peek (ref (Value v)) = SOME v
+  | peek (ref (Delay _)) = NONE;
 
 fun same (r1 : 'a T, r2) = (r1 = r2); (*equality on references*)