------------------------------------------------------------------------------ -- 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 . 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