W3cubDocs

/Haskell 9

Control.Monad.Writer.CPS

Copyright (c) Andy Gill 2001
(c) Oregon Graduate Institute of Science and Technology 2001
License BSD-style (see the file LICENSE)
Maintainer [email protected]
Stability experimental
Portability non-portable (multi-param classes, functional dependencies)
Safe Haskell Safe
Language Haskell2010

Description

Strict writer monads that use continuation-passing-style to achieve constant space usage.

Inspired by the paper Functional Programming with Overloading and Higher-Order Polymorphism, Mark P Jones (http://web.cecs.pdx.edu/~mpj/pubs/springschool.html) Advanced School of Functional Programming, 1995.

Since: mtl-2.3, transformers-0.5.6

MonadWriter class

class (Monoid w, Monad m) => MonadWriter w (m :: Type -> Type) | m -> w where Source

Minimal complete definition

(writer | tell), listen, pass

Methods

writer :: (a, w) -> m a Source

writer (a,w) embeds a simple writer action.

tell :: w -> m () Source

tell w is an action that produces the output w.

listen :: m a -> m (a, w) Source

listen m is an action that executes the action m and adds its output to the value of the computation.

pass :: m (a, w -> w) -> m a Source

pass m is an action that executes the action m, which returns a value and a function, and returns the value, applying the function to the output.

Instances
Instances details
MonadWriter w m => MonadWriter w (MaybeT m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> MaybeT m a Source

tell :: w -> MaybeT m () Source

listen :: MaybeT m a -> MaybeT m (a, w) Source

pass :: MaybeT m (a, w -> w) -> MaybeT m a Source

Monoid w => MonadWriter w ((,) w) Source

Since: mtl-2.2.2

Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> (w, a) Source

tell :: w -> (w, ()) Source

listen :: (w, a) -> (w, (a, w)) Source

pass :: (w, (a, w -> w)) -> (w, a) Source

(Monoid w', MonadWriter w m) => MonadWriter w (AccumT w' m) Source

There are two valid instances for AccumT. It could either:

  1. Lift the operations to the inner MonadWriter
  2. Handle the operations itself, à la a WriterT.

This instance chooses (1), reflecting that the intent of AccumT as a type is different than that of WriterT.

Since: mtl-2.3

Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> AccumT w' m a Source

tell :: w -> AccumT w' m () Source

listen :: AccumT w' m a -> AccumT w' m (a, w) Source

pass :: AccumT w' m (a, w -> w) -> AccumT w' m a Source

MonadWriter w m => MonadWriter w (ExceptT e m) Source

Since: mtl-2.2

Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> ExceptT e m a Source

tell :: w -> ExceptT e m () Source

listen :: ExceptT e m a -> ExceptT e m (a, w) Source

pass :: ExceptT e m (a, w -> w) -> ExceptT e m a Source

MonadWriter w m => MonadWriter w (IdentityT m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> IdentityT m a Source

tell :: w -> IdentityT m () Source

listen :: IdentityT m a -> IdentityT m (a, w) Source

pass :: IdentityT m (a, w -> w) -> IdentityT m a Source

MonadWriter w m => MonadWriter w (ReaderT r m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> ReaderT r m a Source

tell :: w -> ReaderT r m () Source

listen :: ReaderT r m a -> ReaderT r m (a, w) Source

pass :: ReaderT r m (a, w -> w) -> ReaderT r m a Source

MonadWriter w m => MonadWriter w (StateT s m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> StateT s m a Source

tell :: w -> StateT s m () Source

listen :: StateT s m a -> StateT s m (a, w) Source

pass :: StateT s m (a, w -> w) -> StateT s m a Source

MonadWriter w m => MonadWriter w (StateT s m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> StateT s m a Source

tell :: w -> StateT s m () Source

listen :: StateT s m a -> StateT s m (a, w) Source

pass :: StateT s m (a, w -> w) -> StateT s m a Source

(Monoid w, Monad m) => MonadWriter w (WriterT w m) Source

Since: mtl-2.3

Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> WriterT w m a Source

tell :: w -> WriterT w m () Source

listen :: WriterT w m a -> WriterT w m (a, w) Source

pass :: WriterT w m (a, w -> w) -> WriterT w m a Source

(Monoid w, Monad m) => MonadWriter w (WriterT w m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> WriterT w m a Source

tell :: w -> WriterT w m () Source

listen :: WriterT w m a -> WriterT w m (a, w) Source

pass :: WriterT w m (a, w -> w) -> WriterT w m a Source

(Monoid w, Monad m) => MonadWriter w (WriterT w m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> WriterT w m a Source

tell :: w -> WriterT w m () Source

listen :: WriterT w m a -> WriterT w m (a, w) Source

pass :: WriterT w m (a, w -> w) -> WriterT w m a Source

(Monoid w, Monad m) => MonadWriter w (RWST r w s m) Source

Since: mtl-2.3

Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> RWST r w s m a Source

tell :: w -> RWST r w s m () Source

listen :: RWST r w s m a -> RWST r w s m (a, w) Source

pass :: RWST r w s m (a, w -> w) -> RWST r w s m a Source

(Monoid w, Monad m) => MonadWriter w (RWST r w s m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> RWST r w s m a Source

tell :: w -> RWST r w s m () Source

listen :: RWST r w s m a -> RWST r w s m (a, w) Source

pass :: RWST r w s m (a, w -> w) -> RWST r w s m a Source

(Monoid w, Monad m) => MonadWriter w (RWST r w s m) Source
Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> RWST r w s m a Source

tell :: w -> RWST r w s m () Source

listen :: RWST r w s m a -> RWST r w s m (a, w) Source

pass :: RWST r w s m (a, w -> w) -> RWST r w s m a Source

listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b) Source

listens f m is an action that executes the action m and adds the result of applying f to the output to the value of the computation.

censor :: MonadWriter w m => (w -> w) -> m a -> m a Source

censor f m is an action that executes the action m and applies the function f to its output, leaving the return value unchanged.

The Writer monad

type Writer w = WriterT w Identity Source

A writer monad parameterized by the type w of output to accumulate.

The return function produces the output mempty, while m >>= k combines the outputs of the subcomputations using mappend (also known as <>):

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.

mapWriter :: (Monoid w, Monoid w') => ((a, w) -> (b, w')) -> Writer w a -> Writer w' b Source

Map both the return value and output of a computation using the given function.

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 >>= k combines the outputs of the subcomputations using mappend (also known as <>):

Instances
Instances details
MonadAccum w' m => MonadAccum w' (WriterT w m) Source

Since: mtl-2.3

Instance details

Defined in Control.Monad.Accum

Methods

look :: WriterT w m w' Source

add :: w' -> WriterT w m () Source

accum :: (w' -> (a, w')) -> WriterT w m a Source

(Monoid w, MonadError e m) => MonadError e (WriterT w m) Source

Since: mtl-2.3

Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: e -> WriterT w m a Source

catchError :: WriterT w m a -> (e -> WriterT w m a) -> WriterT w m a Source

(Monoid w, MonadReader r m) => MonadReader r (WriterT w m) Source

Since: mtl-2.3

Instance details

Defined in Control.Monad.Reader.Class

Methods

ask :: WriterT w m r Source

local :: (r -> r) -> WriterT w m a -> WriterT w m a Source

reader :: (r -> a) -> WriterT w m a Source

MonadSelect w' m => MonadSelect w' (WriterT w m) Source

'Readerizes' the writer: the 'ranking' function can see the value that's been accumulated (of type w), but can't add anything to the log. Effectively, can be thought of as 'extending' the 'ranking' by all values of w, but which w gets given to any rank calls is predetermined by the 'outer writer' (and cannot change).

Since: mtl-2.3

Instance details

Defined in Control.Monad.Select

Methods

select :: ((a -> w') -> a) -> WriterT w m a Source

(Monoid w, MonadState s m) => MonadState s (WriterT w m) Source

Since: mtl-2.3

Instance details

Defined in Control.Monad.State.Class

Methods

get :: WriterT w m s Source

put :: s -> WriterT w m () Source

state :: (s -> (a, s)) -> WriterT w m a Source

(Monoid w, Monad m) => MonadWriter w (WriterT w m) Source

Since: mtl-2.3

Instance details

Defined in Control.Monad.Writer.Class

Methods

writer :: (a, w) -> WriterT w m a Source

tell :: w -> WriterT w m () Source

listen :: WriterT w m a -> WriterT w m (a, w) Source

pass :: WriterT w m (a, w -> w) -> WriterT w m a Source

MonadTrans (WriterT w) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

lift :: Monad m => m a -> WriterT w m a Source

(Functor m, MonadPlus m) => Alternative (WriterT w m) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

empty :: WriterT w m a

(<|>) :: WriterT w m a -> WriterT w m a -> WriterT w m a

some :: WriterT w m a -> WriterT w m [a]

many :: WriterT w m a -> WriterT w m [a]

(Functor m, Monad m) => Applicative (WriterT w m) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

pure :: a -> WriterT w m a

(<*>) :: WriterT w m (a -> b) -> WriterT w m a -> WriterT w m b

liftA2 :: (a -> b -> c) -> WriterT w m a -> WriterT w m b -> WriterT w m c

(*>) :: WriterT w m a -> WriterT w m b -> WriterT w m b

(<*) :: WriterT w m a -> WriterT w m b -> WriterT w m a

Functor m => Functor (WriterT w m) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

fmap :: (a -> b) -> WriterT w m a -> WriterT w m b

(<$) :: a -> WriterT w m b -> WriterT w m a

Monad m => Monad (WriterT w m) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

(>>=) :: WriterT w m a -> (a -> WriterT w m b) -> WriterT w m b

(>>) :: WriterT w m a -> WriterT w m b -> WriterT w m b

return :: a -> WriterT w m a

(Functor m, MonadPlus m) => MonadPlus (WriterT w m) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

mzero :: WriterT w m a

mplus :: WriterT w m a -> WriterT w m a -> WriterT w m a

MonadFail m => MonadFail (WriterT w m) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

fail :: String -> WriterT w m a

MonadFix m => MonadFix (WriterT w m) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

mfix :: (a -> WriterT w m a) -> WriterT w m a

MonadIO m => MonadIO (WriterT w m) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Methods

liftIO :: IO a -> WriterT w m a

(Monoid w, MonadCont m) => MonadCont (WriterT w m) Source

Since: mtl-2.3

Instance details

Defined in Control.Monad.Cont.Class

Methods

callCC :: ((a -> WriterT w m b) -> WriterT w m a) -> WriterT w m a Source

Generic (WriterT w m a) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

Associated Types

type Rep (WriterT w m a)
Instance details

Defined in Control.Monad.Trans.Writer.CPS

type Rep (WriterT w m a) = D1 ('MetaData "WriterT" "Control.Monad.Trans.Writer.CPS" "transformers-0.6.1.2-72bd" 'True) (C1 ('MetaCons "WriterT" 'PrefixI 'True) (S1 ('MetaSel ('Just "unWriterT") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (w -> m (a, w)))))

Methods

from :: WriterT w m a -> Rep (WriterT w m a) x

to :: Rep (WriterT w m a) x -> WriterT w m a

type Rep (WriterT w m a) Source
Instance details

Defined in Control.Monad.Trans.Writer.CPS

type Rep (WriterT w m a) = D1 ('MetaData "WriterT" "Control.Monad.Trans.Writer.CPS" "transformers-0.6.1.2-72bd" 'True) (C1 ('MetaCons "WriterT" 'PrefixI 'True) (S1 ('MetaSel ('Just "unWriterT") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (w -> m (a, w)))))

execWriterT :: (Monad m, Monoid w) => WriterT w m a -> m w Source

Extract the output from a writer computation.

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.

module Control.Monad.Trans

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/mtl-2.3.1-a17d/Control-Monad-Writer-CPS.html