conductive-base-0.1: Sound/Conductive/MVarUtils.hs
------------------------------------------------------------------------------
-- MVarUtils.hs
-- created: Mon May 10 15:11:12 JST 2010
------------------------------------------------------------------------------
-- | These functions were found to be useful for dealing with MVars. For more on MVars, see <http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Control-Concurrent-MVar.html>.
module Sound.Conductive.MVarUtils where
import Control.Concurrent.MVar
-- | Applies a pure function to the value stored in an MVar.
wm :: MVar a -> (a -> a1) -> IO a1
wm mvar func = do
val <- readMVar mvar
return $ func val
-- | Applies an IO function to the value stored in an MVar.
wIOm :: MVar a -> (a -> IO b) -> IO b
wIOm mvar func = do
val <- readMVar mvar
func val
-- | Changes the value stored in an MVar based on a pure function.
wcm :: MVar a -> (a -> a) -> IO a
wcm mvar func = do
val <- readMVar mvar
swapMVar mvar $ func val
-- | An alias for the wcm function.
withChangeToMVar :: MVar a -> (a -> a) -> IO a
withChangeToMVar mvar func = wcm mvar func