Copyright | (c) Harvard University 2006-2011 (c) Geoffrey Mainland 2011-2014 |
---|---|
License | BSD-style |
Maintainer | Geoffrey Mainland <mainland@cs.drexel.edu> |
Stability | experimental |
Portability | non-portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Synopsis
- class Monad m => MonadRef r m | m -> r where
- newRef :: a -> m (r a)
- readRef :: r a -> m a
- writeRef :: r a -> a -> m ()
- modifyRef :: r a -> (a -> a) -> m ()
- modifyRef' :: r a -> (a -> a) -> m ()
- class MonadRef r m => MonadAtomicRef r m | m -> r where
- atomicModifyRef :: r a -> (a -> (a, b)) -> m b
- atomicModifyRef' :: r a -> (a -> (a, b)) -> m b
Documentation
class Monad m => MonadRef r m | m -> r where Source #
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.
newRef :: a -> m (r a) Source #
Create a new reference
readRef :: r a -> m a Source #
Read the value of a reference
writeRef :: r a -> a -> m () Source #
Write a new value to a reference
modifyRef :: r a -> (a -> a) -> m () Source #
Mutate the contents of a reference
modifyRef' :: r a -> (a -> a) -> m () Source #
Strict version of modifyRef
Instances
MonadRef TVar STM Source # | |
MonadRef IORef IO Source # | |
MonadRef r m => MonadRef r (MaybeT m) Source # | |
MonadRef r m => MonadRef r (ListT m) Source # | |
(Monoid w, MonadRef r m) => MonadRef r (WriterT w m) Source # | |
(Monoid w, MonadRef r m) => MonadRef r (WriterT w m) Source # | |
MonadRef r m => MonadRef r (StateT s m) Source # | |
MonadRef r m => MonadRef r (StateT s m) Source # | |
MonadRef r m => MonadRef r (ReaderT r' m) Source # | |
MonadRef r m => MonadRef r (IdentityT m) Source # | |
MonadRef r m => MonadRef r (ExceptT e m) Source # | |
(Error e, MonadRef r m) => MonadRef r (ErrorT e m) Source # | |
MonadRef r m => MonadRef r (ContT r' m) Source # | |
MonadRef (STRef s) (ST s) Source # | |
class MonadRef r m => MonadAtomicRef r m | m -> r where Source #
atomicModifyRef :: r a -> (a -> (a, b)) -> m b Source #
Atomically mutate the contents of a reference
atomicModifyRef' :: r a -> (a -> (a, b)) -> m b Source #
Strict version of atomicModifyRef. This forces both the value stored in the reference as well as the value returned.