summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsof <unknown>1999-09-20 10:22:40 +0000
committersof <unknown>1999-09-20 10:22:40 +0000
commit0fafbcb0fa66573de86c23855db77437d0ffebe8 (patch)
treeb47235e3cfb999e02ae578a81fa4f1b0434d73d1
parentd82f41425562849cb77653bb690d2279e7a85586 (diff)
downloadhaskell-0fafbcb0fa66573de86c23855db77437d0ffebe8.tar.gz
[project @ 1999-09-20 10:22:40 by sof]
Added 'updateIORef :: IORef a -> (a->a) -> IO ()'
-rw-r--r--ghc/lib/exts/IOExts.lhs14
1 files changed, 11 insertions, 3 deletions
diff --git a/ghc/lib/exts/IOExts.lhs b/ghc/lib/exts/IOExts.lhs
index a0de1cc212..0ee5a505b7 100644
--- a/ghc/lib/exts/IOExts.lhs
+++ b/ghc/lib/exts/IOExts.lhs
@@ -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 #)