-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A type class for monads with references using functional
-- dependencies.
--
-- 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.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 r m | m -> r
-- | Create a new reference
newRef :: MonadRef r m => a -> m (r a)
-- | Read the value of a reference
readRef :: MonadRef r m => r a -> m a
-- | Write a new value to a reference
writeRef :: MonadRef r m => r a -> a -> m ()
-- | Mutate the contents of a reference
modifyRef :: MonadRef r m => r a -> (a -> a) -> m ()
-- | Strict version of modifyRef
modifyRef' :: MonadRef r m => r a -> (a -> a) -> m ()
class (MonadRef r m) => MonadAtomicRef r m | m -> r
-- | Atomically mutate the contents of a reference
atomicModifyRef :: MonadAtomicRef r m => r 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 r m => r a -> (a -> (a, b)) -> m b
instance Control.Monad.Ref.MonadAtomicRef GHC.IORef.IORef GHC.Types.IO
instance Control.Monad.Ref.MonadAtomicRef (GHC.STRef.STRef s) (GHC.ST.ST s)
instance Control.Monad.Ref.MonadAtomicRef GHC.Conc.Sync.TVar GHC.Conc.Sync.STM
instance Control.Monad.Ref.MonadAtomicRef r m => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.Cont.ContT r' m)
instance (Control.Monad.Trans.Error.Error e, Control.Monad.Ref.MonadAtomicRef r m) => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.Error.ErrorT e m)
instance Control.Monad.Ref.MonadAtomicRef r m => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.Identity.IdentityT m)
instance Control.Monad.Ref.MonadAtomicRef r m => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.List.ListT m)
instance Control.Monad.Ref.MonadAtomicRef r m => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.Maybe.MaybeT m)
instance Control.Monad.Ref.MonadAtomicRef r m => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.Reader.ReaderT r' m)
instance Control.Monad.Ref.MonadAtomicRef r m => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.State.Lazy.StateT s m)
instance Control.Monad.Ref.MonadAtomicRef r m => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.State.Strict.StateT s m)
instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadAtomicRef r m) => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadAtomicRef r m) => Control.Monad.Ref.MonadAtomicRef r (Control.Monad.Trans.Writer.Strict.WriterT w m)
instance Control.Monad.Ref.MonadRef (GHC.STRef.STRef s) (GHC.ST.ST s)
instance Control.Monad.Ref.MonadRef GHC.IORef.IORef GHC.Types.IO
instance Control.Monad.Ref.MonadRef GHC.Conc.Sync.TVar GHC.Conc.Sync.STM
instance Control.Monad.Ref.MonadRef r m => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.Cont.ContT r' m)
instance (Control.Monad.Trans.Error.Error e, Control.Monad.Ref.MonadRef r m) => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.Error.ErrorT e m)
instance Control.Monad.Ref.MonadRef r m => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.Except.ExceptT e m)
instance Control.Monad.Ref.MonadRef r m => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.Identity.IdentityT m)
instance Control.Monad.Ref.MonadRef r m => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.List.ListT m)
instance Control.Monad.Ref.MonadRef r m => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.Maybe.MaybeT m)
instance Control.Monad.Ref.MonadRef r m => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.Reader.ReaderT r' m)
instance Control.Monad.Ref.MonadRef r m => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.State.Lazy.StateT s m)
instance Control.Monad.Ref.MonadRef r m => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.State.Strict.StateT s m)
instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadRef r m) => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.Writer.Lazy.WriterT w m)
instance (GHC.Base.Monoid w, Control.Monad.Ref.MonadRef r m) => Control.Monad.Ref.MonadRef r (Control.Monad.Trans.Writer.Strict.WriterT w m)