| License | BSD-style (see the file LICENSE) |
|---|---|
| Maintainer | ocean0yohsuke@gmail.com |
| Stability | experimental |
| Portability | --- |
| Safe Haskell | Safe |
| Language | Haskell2010 |
DeepControl.Monad.Writer
Description
This module is just a concise mimic for Reader Monad in mtl(monad-transformer-library).
The qualifier "concise" means that this module doesn't make no attempt to transform functions of any kind of Monad automatically.
So when making some new data type of WriterT, you have to manually define involved Monad instances,
for example MonadError,
by making use of the transformation functions such as trans, trans2, etc.
Admittedly it is tedious though, you can deeply understand monad-transformation mechanism instead.
- class (Monoid w, Monad m) => MonadWriter w m | m -> w where
- listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b)
- censor :: MonadWriter w m => (w -> w) -> m a -> m a
- newtype Writer w a = Writer {
- runWriter :: (a, w)
- execWriter :: Writer w a -> w
- mapWriter :: ((a, w) -> (b, w')) -> Writer w a -> Writer w' b
- newtype WriterT w m a = WriterT {
- runWriterT :: m (a, w)
- execWriterT :: Monad m => WriterT w m a -> m w
- mapWriterT :: (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b
- liftCatch :: Catch e m (a, w) -> Catch e (WriterT w m) a
- newtype WriterT2 w m1 m2 a = WriterT2 {
- runWriterT2 :: m1 (m2 (a, w))
- execWriterT2 :: (Monad m1, Monad2 m2) => WriterT2 w m1 m2 a -> m1 (m2 w)
- mapWriterT2 :: (m1 (m2 (a, w)) -> n1 (n2 (b, w'))) -> WriterT2 w m1 m2 a -> WriterT2 w' n1 n2 b
- newtype WriterT3 w m1 m2 m3 a = WriterT3 {
- runWriterT3 :: m1 (m2 (m3 (a, w)))
- execWriterT3 :: (Monad m1, Monad2 m2, Monad3 m3) => WriterT3 w m1 m2 m3 a -> m1 (m2 (m3 w))
- mapWriterT3 :: (m1 (m2 (m3 (a, w))) -> n1 (n2 (n3 (b, w')))) -> WriterT3 w m1 m2 m3 a -> WriterT3 w' n1 n2 n3 b
Documentation
class (Monoid w, Monad m) => MonadWriter w m | m -> w where
Methods
writer :: (a, w) -> m a
embeds a simple writer action.writer (a,w)
tell :: w -> m ()
is an action that produces the output tell ww.
listen :: m a -> m (a, w)
is an action that executes the action listen mm and adds
its output to the value of the computation.
pass :: m (a, w -> w) -> m a
is an action that executes the action pass mm, which
returns a value and a function, and returns the value, applying
the function to the output.
Instances
listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b) Source
censor :: MonadWriter w m => (w -> w) -> m a -> m a Source
Level-0
Instances
execWriter :: Writer w a -> w Source
Level-1
Constructors
| WriterT | |
Fields
| |
Instances
| (Monoid w, Monad m) => MonadWriter w (WriterT w m) Source | |
| Monoid w => MonadTrans (WriterT w) Source | |
| (Monoid w, Monad m) => Monad (WriterT w m) Source | |
| Monad m => Functor (WriterT w m) Source | |
| (Monoid w, Monad m) => Applicative (WriterT w m) Source | |
| (Monoid w, MonadIO m, Monad m) => MonadIO (WriterT w m) Source |
execWriterT :: Monad m => WriterT w m a -> m w Source
mapWriterT :: (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b Source
Level-2
newtype WriterT2 w m1 m2 a Source
Constructors
| WriterT2 | |
Fields
| |
Instances
| (Monoid w, Monad m1, Monad2 m2) => MonadWriter w (WriterT2 w m1 m2) Source | |
| Monoid w => MonadTrans2 (WriterT2 w) Source | |
| (Monoid w, Monad m1, Monad2 m2) => Monad (WriterT2 w m1 m2) Source | |
| (Monad m1, Monad2 m2) => Functor (WriterT2 w m1 m2) Source | |
| (Monoid w, Monad m1, Monad2 m2) => Applicative (WriterT2 w m1 m2) Source | |
| (Monoid w, MonadIO m1, Monad m1, Monad2 m2) => MonadIO (WriterT2 w m1 m2) Source |
execWriterT2 :: (Monad m1, Monad2 m2) => WriterT2 w m1 m2 a -> m1 (m2 w) Source
mapWriterT2 :: (m1 (m2 (a, w)) -> n1 (n2 (b, w'))) -> WriterT2 w m1 m2 a -> WriterT2 w' n1 n2 b Source
Level-3
newtype WriterT3 w m1 m2 m3 a Source
Constructors
| WriterT3 | |
Fields
| |
Instances
| (Monoid w, Monad m1, Monad2 m2, Monad3 m3) => MonadWriter w (WriterT3 w m1 m2 m3) Source | |
| Monoid w => MonadTrans3 (WriterT3 w) Source | |
| (Monoid w, Monad m1, Monad2 m2, Monad3 m3) => Monad (WriterT3 w m1 m2 m3) Source | |
| (Monad m1, Monad2 m2, Monad3 m3) => Functor (WriterT3 w m1 m2 m3) Source | |
| (Monoid w, Monad m1, Monad2 m2, Monad3 m3) => Applicative (WriterT3 w m1 m2 m3) Source | |
| (Monoid w, MonadIO m1, Monad m1, Monad2 m2, Monad3 m3) => MonadIO (WriterT3 w m1 m2 m3) Source |
mapWriterT3 :: (m1 (m2 (m3 (a, w))) -> n1 (n2 (n3 (b, w')))) -> WriterT3 w m1 m2 m3 a -> WriterT3 w' n1 n2 n3 b Source