monadIO- Overloading of concurrency variables

MaintainerJohn Launchbury,
Safe HaskellSafe-Infered



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



class Monad m => MonadIO m where

Monads in which IO computations may be embedded. Any monad built by applying a sequence of monad transformers to the IO monad will be an instance of this class.

Instances should satisfy the following laws, which state that liftIO is a transformer of monads:


liftIO :: IO a -> m a

Lift a computation from the IO monad.


data IORef a

A mutable variable in the IO monad


newIORef :: MonadIO io => a -> io (IORef a)Source

readIORef :: MonadIO io => IORef a -> io aSource

writeIORef :: MonadIO io => IORef a -> a -> io ()Source

modifyIORef :: MonadIO io => IORef a -> (a -> a) -> io ()Source

atomicModifyIORef :: MonadIO io => IORef a -> (a -> (a, b)) -> io bSource