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