| Copyright | (c) Daniel Mendler 2016 (c) Andy Gill 2001 (c) Oregon Graduate Institute of Science and Technology 2001 | 
|---|---|
| License | BSD-style (see the file LICENSE) | 
| Maintainer | R.Paterson@city.ac.uk | 
| Stability | experimental | 
| Portability | portable | 
| Safe Haskell | Safe | 
| Language | Haskell2010 | 
Control.Monad.Trans.Writer.CPS
Description
The strict WriterT monad transformer, which adds collection of
 outputs (such as a count or string output) to a given monad.
This monad transformer provides only limited access to the output during the computation. For more general access, use Control.Monad.Trans.State instead.
This version builds its output strictly and uses continuation-passing-style to achieve constant space usage. This transformer can be used as a drop-in replacement for Control.Monad.Trans.Writer.Strict.
Synopsis
- type Writer w = WriterT w Identity
- writer :: forall w (m :: Type -> Type) a. (Monoid w, Monad m) => (a, w) -> WriterT w m a
- runWriter :: Monoid w => Writer w a -> (a, w)
- execWriter :: Monoid w => Writer w a -> w
- mapWriter :: (Monoid w, Monoid w') => ((a, w) -> (b, w')) -> Writer w a -> Writer w' b
- data WriterT w (m :: Type -> Type) a
- writerT :: (Functor m, Monoid w) => m (a, w) -> WriterT w m a
- runWriterT :: Monoid w => WriterT w m a -> m (a, w)
- execWriterT :: (Monad m, Monoid w) => WriterT w m a -> m w
- mapWriterT :: (Monad n, Monoid w, Monoid w') => (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b
- tell :: forall w (m :: Type -> Type). (Monoid w, Monad m) => w -> WriterT w m ()
- listen :: forall w (m :: Type -> Type) a. (Monoid w, Monad m) => WriterT w m a -> WriterT w m (a, w)
- listens :: forall w (m :: Type -> Type) b a. (Monoid w, Monad m) => (w -> b) -> WriterT w m a -> WriterT w m (a, b)
- pass :: forall w w' (m :: Type -> Type) a. (Monoid w, Monoid w', Monad m) => WriterT w m (a, w -> w') -> WriterT w' m a
- censor :: forall w (m :: Type -> Type) a. (Monoid w, Monad m) => (w -> w) -> WriterT w m a -> WriterT w m a
- liftCallCC :: CallCC m (a, w) (b, w) -> CallCC (WriterT w m) a b
- liftCatch :: Catch e m (a, w) -> Catch e (WriterT w m) a
The Writer monad
writer :: forall w (m :: Type -> Type) a. (Monoid w, Monad m) => (a, w) -> WriterT w m a Source #
Construct a writer computation from a (result, output) pair.
 (The inverse of runWriter.)
runWriter :: Monoid w => Writer w a -> (a, w) Source #
Unwrap a writer computation as a (result, output) pair.
 (The inverse of writer.)
execWriter :: Monoid w => Writer w a -> w Source #
Extract the output from a writer computation.
- execWriterm =- snd(- runWriterm)
The WriterT monad transformer
data WriterT w (m :: Type -> Type) a Source #
A writer monad parameterized by:
- w- the output to accumulate.
- m- The inner monad.
The return function produces the output mempty, while m 
 combines the outputs of the subcomputations using >>= kmappend (also
 known as <>):
Instances
| MonadTrans (WriterT w) Source # | |||||
| (Functor m, MonadPlus m) => Alternative (WriterT w m) Source # | |||||
| (Functor m, Monad m) => Applicative (WriterT w m) Source # | |||||
| Defined in Control.Monad.Trans.Writer.CPS | |||||
| Functor m => Functor (WriterT w m) Source # | |||||
| Monad m => Monad (WriterT w m) Source # | |||||
| (Functor m, MonadPlus m) => MonadPlus (WriterT w m) Source # | |||||
| MonadFail m => MonadFail (WriterT w m) Source # | |||||
| Defined in Control.Monad.Trans.Writer.CPS Methods fail :: HasCallStack => String -> WriterT w m a # | |||||
| MonadFix m => MonadFix (WriterT w m) Source # | |||||
| Defined in Control.Monad.Trans.Writer.CPS | |||||
| MonadIO m => MonadIO (WriterT w m) Source # | |||||
| Defined in Control.Monad.Trans.Writer.CPS | |||||
| Generic (WriterT w m a) Source # | |||||
| Defined in Control.Monad.Trans.Writer.CPS Associated Types 
 | |||||
| type Rep (WriterT w m a) Source # | |||||
| Defined in Control.Monad.Trans.Writer.CPS | |||||
writerT :: (Functor m, Monoid w) => m (a, w) -> WriterT w m a Source #
Construct a writer computation from a (result, output) computation.
 (The inverse of runWriterT.)
runWriterT :: Monoid w => WriterT w m a -> m (a, w) Source #
Unwrap a writer computation.
 (The inverse of writerT.)
execWriterT :: (Monad m, Monoid w) => WriterT w m a -> m w Source #
Extract the output from a writer computation.
- execWriterTm =- liftM- snd(- runWriterTm)
mapWriterT :: (Monad n, Monoid w, Monoid w') => (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b Source #
Map both the return value and output of a computation using the given function.
- runWriterT(- mapWriterTf m) = f (- runWriterTm)
Writer operations
tell :: forall w (m :: Type -> Type). (Monoid w, Monad m) => w -> WriterT w m () Source #
tell ww.
listen :: forall w (m :: Type -> Type) a. (Monoid w, Monad m) => WriterT w m a -> WriterT w m (a, w) Source #
listen mm and adds its
 output to the value of the computation.
- runWriterT(- listenm) =- liftM(\ (a, w) -> ((a, w), w)) (- runWriterTm)
listens :: forall w (m :: Type -> Type) b a. (Monoid w, Monad m) => (w -> b) -> WriterT w m a -> WriterT w m (a, b) Source #
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)
pass :: forall w w' (m :: Type -> Type) a. (Monoid w, Monoid w', Monad m) => WriterT w m (a, w -> w') -> WriterT w' m a Source #
pass mm, which returns
 a value and a function, and returns the value, applying the function
 to the output.
- runWriterT(- passm) =- liftM(\ ((a, f), w) -> (a, f w)) (- runWriterTm)
censor :: forall w (m :: Type -> Type) a. (Monoid w, Monad m) => (w -> w) -> WriterT w m a -> WriterT w m a Source #
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)
Lifting other operations
liftCallCC :: CallCC m (a, w) (b, w) -> CallCC (WriterT w m) a b Source #
Uniform lifting of a callCC operation to the new monad.
 The uniformity property (see Control.Monad.Signatures) implies that
 the lifted callCC discards any output from the body on entering
 the saved continuation.