-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A type class for monads with references compatible with the mtl2
library.
--
-- Contains a MonadRef type class that abstracts over the details
-- of manipulating references, allowing one to write code that can
-- operate in either the ST monad or the IO monad.
@package ref-mtl
@version 0.3
module Control.Monad.Ref
-- | The MonadRef type class abstracts over the details of
-- manipulating references, allowing one to write code that uses
-- references and can operate in any monad that supports reference
-- operations.
class Monad m => MonadRef r m | m -> r
newRef :: MonadRef r m => a -> m (r a)
readRef :: MonadRef r m => r a -> m a
writeRef :: MonadRef r m => r a -> a -> m ()
modifyRef :: MonadRef r m => r a -> (a -> a) -> m ()
class MonadRef r m => MonadAtomicRef r m | m -> r
atomicModifyRef :: MonadAtomicRef r m => r a -> (a -> (a, b)) -> m b
instance (Monoid w, MonadAtomicRef r m) => MonadAtomicRef r (WriterT w m)
instance (Monoid w, MonadAtomicRef r m) => MonadAtomicRef r (WriterT w m)
instance MonadAtomicRef r m => MonadAtomicRef r (StateT s m)
instance MonadAtomicRef r m => MonadAtomicRef r (StateT s m)
instance MonadAtomicRef r m => MonadAtomicRef r (ReaderT r' m)
instance MonadAtomicRef r m => MonadAtomicRef r (MaybeT m)
instance MonadAtomicRef r m => MonadAtomicRef r (ListT m)
instance MonadAtomicRef r m => MonadAtomicRef r (IdentityT m)
instance (Error e, MonadAtomicRef r m) => MonadAtomicRef r (ErrorT e m)
instance MonadAtomicRef r m => MonadAtomicRef r (ContT r' m)
instance MonadAtomicRef TVar STM
instance MonadAtomicRef IORef IO
instance (Monoid w, MonadRef r m) => MonadRef r (WriterT w m)
instance (Monoid w, MonadRef r m) => MonadRef r (WriterT w m)
instance MonadRef r m => MonadRef r (StateT s m)
instance MonadRef r m => MonadRef r (StateT s m)
instance MonadRef r m => MonadRef r (ReaderT r' m)
instance MonadRef r m => MonadRef r (MaybeT m)
instance MonadRef r m => MonadRef r (ListT m)
instance MonadRef r m => MonadRef r (IdentityT m)
instance (Error e, MonadRef r m) => MonadRef r (ErrorT e m)
instance MonadRef r m => MonadRef r (ContT r' m)
instance MonadRef TVar STM
instance MonadRef IORef IO
instance MonadRef (STRef s) (ST s)