-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A type class for monads with references using type families.
--
-- 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-tf
@version 0.2
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 m where { type family Ref m :: * -> *; { modifyRef r f = readRef r >>= writeRef r . f } }
newRef :: MonadRef m => a -> m (Ref m a)
readRef :: MonadRef m => Ref m a -> m a
writeRef :: MonadRef m => Ref m a -> a -> m ()
modifyRef :: MonadRef m => Ref m a -> (a -> a) -> m ()
class MonadRef m => MonadAtomicRef m
atomicModifyRef :: MonadAtomicRef m => Ref m a -> (a -> (a, b)) -> m b
instance (Monoid w, MonadAtomicRef m) => MonadAtomicRef (WriterT w m)
instance (Monoid w, MonadAtomicRef m) => MonadAtomicRef (WriterT w m)
instance MonadAtomicRef m => MonadAtomicRef (StateT s m)
instance MonadAtomicRef m => MonadAtomicRef (StateT s m)
instance MonadAtomicRef m => MonadAtomicRef (ReaderT r m)
instance MonadAtomicRef m => MonadAtomicRef (MaybeT m)
instance MonadAtomicRef m => MonadAtomicRef (ListT m)
instance MonadAtomicRef m => MonadAtomicRef (IdentityT m)
instance (Error e, MonadAtomicRef m) => MonadAtomicRef (ErrorT e m)
instance MonadAtomicRef m => MonadAtomicRef (ContT r m)
instance MonadAtomicRef STM
instance MonadAtomicRef IO
instance (Monoid w, MonadRef m) => MonadRef (WriterT w m)
instance (Monoid w, MonadRef m) => MonadRef (WriterT w m)
instance MonadRef m => MonadRef (StateT s m)
instance MonadRef m => MonadRef (StateT s m)
instance MonadRef m => MonadRef (ReaderT r m)
instance MonadRef m => MonadRef (MaybeT m)
instance MonadRef m => MonadRef (ListT m)
instance MonadRef m => MonadRef (IdentityT m)
instance (Error e, MonadRef m) => MonadRef (ErrorT e m)
instance MonadRef m => MonadRef (ContT r m)
instance MonadRef STM
instance MonadRef IO
instance MonadRef (ST s)