-- 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.5 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 :: * -> *; } -- | Create a new reference newRef :: MonadRef m => a -> m (Ref m a) -- | Read the value of a reference readRef :: MonadRef m => Ref m a -> m a -- | Write a new value to a reference writeRef :: MonadRef m => Ref m a -> a -> m () -- | Mutate the contents of a reference modifyRef :: MonadRef m => Ref m a -> (a -> a) -> m () -- | Strict version of modifyRef modifyRef' :: MonadRef m => Ref m a -> (a -> a) -> m () class (MonadRef m) => MonadAtomicRef m -- | Atomically mutate the contents of a reference atomicModifyRef :: MonadAtomicRef m => Ref m a -> (a -> (a, b)) -> m b -- | Strict version of atomicModifyRef. This forces both the value stored -- in the reference as well as the value returned. atomicModifyRef' :: MonadAtomicRef m => Ref m a -> (a -> (a, b)) -> m b instance Control.Monad.Ref.MonadAtomicRef GHC.Types.IO instance Control.Monad.Ref.MonadAtomicRef (GHC.ST.ST s) instance Control.Monad.Ref.MonadAtomicRef GHC.Conc.Sync.STM instance Control.Monad.Ref.MonadAtomicRef m => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.Cont.ContT r m) instance (Control.Monad.Trans.Error.Error e, Control.Monad.Ref.MonadAtomicRef m) => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.Error.ErrorT e m) instance Control.Monad.Ref.MonadAtomicRef m => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.Identity.IdentityT m) instance Control.Monad.Ref.MonadAtomicRef m => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.List.ListT m) instance Control.Monad.Ref.MonadAtomicRef m => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.Maybe.MaybeT m) instance Control.Monad.Ref.MonadAtomicRef m => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.Reader.ReaderT r m) instance Control.Monad.Ref.MonadAtomicRef m => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.State.Lazy.StateT s m) instance Control.Monad.Ref.MonadAtomicRef m => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.State.Strict.StateT s m) instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadAtomicRef m) => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadAtomicRef m) => Control.Monad.Ref.MonadAtomicRef (Control.Monad.Trans.Writer.Strict.WriterT w m) instance Control.Monad.Ref.MonadRef (GHC.ST.ST s) instance Control.Monad.Ref.MonadRef GHC.Types.IO instance Control.Monad.Ref.MonadRef GHC.Conc.Sync.STM instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Cont.ContT r m) instance (Control.Monad.Trans.Error.Error e, Control.Monad.Ref.MonadRef m) => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Error.ErrorT e m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Except.ExceptT e m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Identity.IdentityT m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.List.ListT m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Maybe.MaybeT m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Reader.ReaderT r m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.State.Lazy.StateT s m) instance Control.Monad.Ref.MonadRef m => Control.Monad.Ref.MonadRef (Control.Monad.Trans.State.Strict.StateT s m) instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadRef m) => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Writer.Lazy.WriterT w m) instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadRef m) => Control.Monad.Ref.MonadRef (Control.Monad.Trans.Writer.Strict.WriterT w m)