-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A type class for monads with references using functional dependencies. -- @package ref-fd @version 0.4 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 where modifyRef r f = readRef r >>= writeRef r . f modifyRef' r f = readRef r >>= \ x -> let x' = f x in x' `seq` writeRef r x' 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 () modifyRef' :: MonadRef r m => r a -> (a -> a) -> m () class MonadRef r m => MonadAtomicRef r m | m -> r where atomicModifyRef' r f = do { b <- atomicModifyRef r (\ x -> let (a, b) = f x in (a, a `seq` b)); b `seq` return b } atomicModifyRef :: MonadAtomicRef r m => r a -> (a -> (a, b)) -> m b 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)