diff options
Diffstat (limited to 'compiler/GHC/Data/IOEnv.hs')
-rw-r--r-- | compiler/GHC/Data/IOEnv.hs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/compiler/GHC/Data/IOEnv.hs b/compiler/GHC/Data/IOEnv.hs index 439f101ecc..850d111818 100644 --- a/compiler/GHC/Data/IOEnv.hs +++ b/compiler/GHC/Data/IOEnv.hs @@ -29,7 +29,7 @@ module GHC.Data.IOEnv ( tryM, tryAllM, tryMostM, fixM, -- I/O operations - IORef, newMutVar, readMutVar, writeMutVar, updMutVar, + IORef, newMutVar, readMutVar, writeMutVar, updMutVar, updMutVarM, atomicUpdMutVar, atomicUpdMutVar' ) where @@ -193,6 +193,12 @@ readMutVar var = liftIO (readIORef var) updMutVar :: IORef a -> (a -> a) -> IOEnv env () updMutVar var upd = liftIO (modifyIORef var upd) +updMutVarM :: IORef a -> (a -> IOEnv env a) -> IOEnv env () +updMutVarM ref upd + = do { contents <- liftIO $ readIORef ref + ; new_contents <- upd contents + ; liftIO $ writeIORef ref new_contents } + -- | Atomically update the reference. Does not force the evaluation of the -- new variable contents. For strict update, use 'atomicUpdMutVar''. atomicUpdMutVar :: IORef a -> (a -> (a, b)) -> IOEnv env b |