monadIO-0.9.1.0: src/Data/IORef/MonadIO.hs
--------------------------------------------------------------------------
{- |
Module : Data.IORef.MonadIO
Copyright : (c) 2010 Galois, Inc.
License : BSD-style (see the file libraries/base/LICENSE)
Maintainer : John Launchbury, john@galois.com
Stability : experimental
Portability : IO
Overloads the standard operations on IORefs,
as defined in Data.IORef. This module is name-for-name
swappable with Data.IORef unless ghc-specific
operations like weak pointers are used.
The standard operations on 'IORef' (such as
'newIORef', or 'modifyIORef') are overloaded over the
'MonadIO' class. A monad @m@ is declared an instance of
'MonadIO' by defining a function
> liftIO :: IO a -> m a
-}
--------------------------------------------------------------------------
module Data.IORef.MonadIO (
MonadIO(..)
, R.IORef
, newIORef
, readIORef
, writeIORef
, modifyIORef
, atomicModifyIORef
)
where
import Control.Monad.Trans(MonadIO(..))
import qualified Data.IORef as R
newIORef :: MonadIO io => a -> io (R.IORef a)
newIORef x = liftIO $ R.newIORef x
readIORef :: MonadIO io => R.IORef a -> io a
readIORef r = liftIO $ R.readIORef r
writeIORef :: MonadIO io => R.IORef a -> a -> io ()
writeIORef r x = liftIO $ R.writeIORef r x
modifyIORef :: MonadIO io => R.IORef a -> (a -> a) -> io ()
modifyIORef r f = liftIO $ R.modifyIORef r f
atomicModifyIORef :: MonadIO io => R.IORef a -> (a -> (a, b)) -> io b
atomicModifyIORef r f = liftIO $ R.atomicModifyIORef r f