diff options
author | sof <unknown> | 1999-09-20 10:22:40 +0000 |
---|---|---|
committer | sof <unknown> | 1999-09-20 10:22:40 +0000 |
commit | 0fafbcb0fa66573de86c23855db77437d0ffebe8 (patch) | |
tree | b47235e3cfb999e02ae578a81fa4f1b0434d73d1 | |
parent | d82f41425562849cb77653bb690d2279e7a85586 (diff) | |
download | haskell-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.lhs | 14 |
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 #) |