| Copyright | (c) Ivan Perez and Manuel Baerenz 2016 | 
|---|---|
| License | BSD3 | 
| Maintainer | ivan.perez@keera.co.uk | 
| Safe Haskell | Safe-Inferred | 
| Language | Haskell2010 | 
Control.Monad.Trans.MSF.Writer
Contents
Description
MSFs with a Writer monadic layer.
This module contains functions to work with MSFs that include a Writer
 monadic layer. This includes functions to create new MSFs that include an
 additional layer, and functions to flatten that layer out of the MSF's
 transformer stack.
It is based on the _strict_ writer monad Strict,
 so when combining it with other modules such as mtl's,
 the strict version has to be included, i.e. Strict
 instead of Writer or Lazy.
Synopsis
- newtype WriterT w (m :: Type -> Type) a = WriterT {- runWriterT :: m (a, w)
 
- type Writer w = WriterT w Identity
- runWriter :: Writer w a -> (a, w)
- execWriter :: Writer w a -> w
- mapWriter :: ((a, w) -> (b, w')) -> Writer w a -> Writer w' b
- execWriterT :: Monad m => WriterT w m a -> m w
- mapWriterT :: (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b
- censor :: forall (m :: Type -> Type) w a. Monad m => (w -> w) -> WriterT w m a -> WriterT w m a
- listens :: forall (m :: Type -> Type) w b a. Monad m => (w -> b) -> WriterT w m a -> WriterT w m (a, b)
- listen :: forall (m :: Type -> Type) w a. Monad m => WriterT w m a -> WriterT w m (a, w)
- tell :: forall (m :: Type -> Type) w. Monad m => w -> WriterT w m ()
- writer :: forall (m :: Type -> Type) a w. Monad m => (a, w) -> WriterT w m a
- writerS :: (Functor m, Monad m, Monoid w) => MSF m a (w, b) -> MSF (WriterT w m) a b
- runWriterS :: (Functor m, Monad m) => MSF (WriterT s m) a b -> MSF m a (s, b)
Documentation
newtype WriterT w (m :: Type -> Type) a #
A writer monad parameterized by:
- w- the output to accumulate.
- m- The inner monad.
The return function produces the output mempty, while >>=
 combines the outputs of the subcomputations using mappend.
Constructors
| WriterT | |
| Fields 
 | |
Instances
runWriter :: Writer w a -> (a, w) #
Unwrap a writer computation as a (result, output) pair.
 (The inverse of writer.)
execWriter :: Writer w a -> w #
Extract the output from a writer computation.
- execWriterm =- snd(- runWriterm)
execWriterT :: Monad m => WriterT w m a -> m w #
Extract the output from a writer computation.
- execWriterTm =- liftM- snd(- runWriterTm)
mapWriterT :: (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b #
Map both the return value and output of a computation using the given function.
- runWriterT(- mapWriterTf m) = f (- runWriterTm)
censor :: forall (m :: Type -> Type) w a. Monad m => (w -> w) -> WriterT w m a -> WriterT w m a #
censor f mm and
 applies the function f to its output, leaving the return value
 unchanged.
- censorf m =- pass(- liftM(\ x -> (x,f)) m)
- runWriterT(- censorf m) =- liftM(\ (a, w) -> (a, f w)) (- runWriterTm)
listens :: forall (m :: Type -> Type) w b a. Monad m => (w -> b) -> WriterT w m a -> WriterT w m (a, b) #
listens f mm and adds
 the result of applying f to the output to the value of the computation.
- listensf m =- liftM(id *** f) (- listenm)
- runWriterT(- listensf m) =- liftM(\ (a, w) -> ((a, f w), w)) (- runWriterTm)
listen :: forall (m :: Type -> Type) w a. Monad m => WriterT w m a -> WriterT w m (a, w) #
listen mm and adds its
 output to the value of the computation.
- runWriterT(- listenm) =- liftM(\ (a, w) -> ((a, w), w)) (- runWriterTm)
tell :: forall (m :: Type -> Type) w. Monad m => w -> WriterT w m () #
tell ww.
writer :: forall (m :: Type -> Type) a w. Monad m => (a, w) -> WriterT w m a #
Construct a writer computation from a (result, output) pair.
 (The inverse of runWriter.)