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