[project @ 1999-09-20 10:22:40 by sof]
authorsof <unknown>
Mon, 20 Sep 1999 10:22:40 +0000 (10:22 +0000)
committersof <unknown>
Mon, 20 Sep 1999 10:22:40 +0000 (10:22 +0000)
Added 'updateIORef :: IORef a -> (a->a) -> IO ()'

ghc/lib/exts/IOExts.lhs

index a0de1cc..0ee5a50 100644 (file)
@@ -22,6 +22,7 @@ module IOExts
         , newIORef
         , readIORef
         , writeIORef
+       , updateIORef
 
        , mkWeakIORef
 
@@ -106,9 +107,9 @@ unsafePtrEq a b =
 \end{code}
 
 \begin{code}
-newIORef   :: a -> IO (IORef a)
-readIORef  :: IORef a -> IO a
-writeIORef :: IORef a -> a -> IO ()
+newIORef    :: a -> IO (IORef a)
+readIORef   :: IORef a -> IO a
+writeIORef  :: IORef a -> a -> IO ()
 
 #ifdef __HUGS__
 type IORef a = STRef RealWorld a
@@ -124,6 +125,13 @@ readIORef  (IORef var) = stToIO (readVar var)
 writeIORef (IORef var) v = stToIO (writeVar var v)
 #endif
 
+updateIORef :: IORef a -> (a -> a) -> IO ()
+updateIORef ref f = do
+  x <- readIORef ref
+  let x' = f x
+  writeIORef ref x'
+  -- or should we return new value ? (or old?)
+
 mkWeakIORef :: IORef a -> IO () -> IO (Weak (IORef a))
 mkWeakIORef r@(IORef (MutableVar r#)) f = IO $ \s ->
   case mkWeak# r# r f s of (# s1, w #) -> (# s1, Weak w #)