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