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 (type families) |
Safe Haskell | None |
Language | GHC2021 |
Control.Monad.Writer.Lazy
Description
Lazy writer monads.
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.
Synopsis
- class (Monoid (WriterType m), Monad m) => MonadWriter (m :: Type -> Type) where
- type WriterType (m :: Type -> Type)
- tell :: WriterType m -> m ()
- listen :: m a -> m (a, WriterType m)
- pass :: m (a, WriterType m -> WriterType m) -> m a
- listens :: MonadWriter m => (WriterType m -> b) -> m a -> m (a, b)
- censor :: MonadWriter m => (WriterType m -> WriterType m) -> m a -> m a
- 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
- newtype WriterT w (m :: Type -> Type) 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
- module Control.Monad
- module Control.Monad.Fix
- module Control.Monad.Trans
- module Data.Monoid
MonadWriter class
class (Monoid (WriterType m), Monad m) => MonadWriter (m :: Type -> Type) where Source #
Associated Types
type WriterType (m :: Type -> Type) Source #
Methods
tell :: WriterType m -> m () Source #
Shout to the monad what you want to be heard. The monad carries
this packet upwards, merging it if needed (hence the Monoid
requirement).
listen :: m a -> m (a, WriterType m) Source #
Listen to a monad acting, and return what the monad "said".
pass :: m (a, WriterType m -> WriterType m) -> m a Source #
Provide a writer transformer which changes internals of the written object.
Instances
listens :: MonadWriter m => (WriterType m -> b) -> m a -> m (a, b) Source #
censor :: MonadWriter m => (WriterType m -> WriterType m) -> m a -> m a Source #
The Writer monad
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.
execWriter
m =snd
(runWriter
m)
The WriterT monad transformer
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
Monoid w => MonadTrans (WriterT w) | |||||
Defined in Control.Monad.Trans.Writer.Lazy | |||||
(Monoid w, MonadFail m) => MonadFail (WriterT w m) | |||||
Defined in Control.Monad.Trans.Writer.Lazy | |||||
(Monoid w, MonadFix m) => MonadFix (WriterT w m) | |||||
Defined in Control.Monad.Trans.Writer.Lazy | |||||
(Monoid w, MonadIO m) => MonadIO (WriterT w m) | |||||
Defined in Control.Monad.Trans.Writer.Lazy | |||||
(Monoid w, MonadZip m) => MonadZip (WriterT w m) | |||||
Foldable f => Foldable (WriterT w f) | |||||
Defined in Control.Monad.Trans.Writer.Lazy Methods fold :: Monoid m => WriterT w f m -> m # foldMap :: Monoid m => (a -> m) -> WriterT w f a -> m # foldMap' :: Monoid m => (a -> m) -> WriterT w f a -> m # foldr :: (a -> b -> b) -> b -> WriterT w f a -> b # foldr' :: (a -> b -> b) -> b -> WriterT w f a -> b # foldl :: (b -> a -> b) -> b -> WriterT w f a -> b # foldl' :: (b -> a -> b) -> b -> WriterT w f a -> b # foldr1 :: (a -> a -> a) -> WriterT w f a -> a # foldl1 :: (a -> a -> a) -> WriterT w f a -> a # toList :: WriterT w f a -> [a] # null :: WriterT w f a -> Bool # length :: WriterT w f a -> Int # elem :: Eq a => a -> WriterT w f a -> Bool # maximum :: Ord a => WriterT w f a -> a # minimum :: Ord a => WriterT w f a -> a # | |||||
(Eq w, Eq1 m) => Eq1 (WriterT w m) | |||||
(Ord w, Ord1 m) => Ord1 (WriterT w m) | |||||
Defined in Control.Monad.Trans.Writer.Lazy | |||||
(Read w, Read1 m) => Read1 (WriterT w m) | |||||
Defined in Control.Monad.Trans.Writer.Lazy Methods liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (WriterT w m a) # liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [WriterT w m a] # liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (WriterT w m a) # liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [WriterT w m a] # | |||||
(Show w, Show1 m) => Show1 (WriterT w m) | |||||
Contravariant m => Contravariant (WriterT w m) | |||||
Traversable f => Traversable (WriterT w f) | |||||
Defined in Control.Monad.Trans.Writer.Lazy | |||||
(Monoid w, Alternative m) => Alternative (WriterT w m) | |||||
(Monoid w, Applicative m) => Applicative (WriterT w m) | |||||
Defined in Control.Monad.Trans.Writer.Lazy | |||||
Functor m => Functor (WriterT w m) | |||||
(Monoid w, Monad m) => Monad (WriterT w m) | |||||
(Monoid w, MonadPlus m) => MonadPlus (WriterT w m) | |||||
(Monoid w, MonadCont m) => MonadCont (WriterT w m) Source # | |||||
(Monoid w, MonadError m) => MonadError (WriterT w m) Source # | |||||
Defined in Control.Monad.Except.Class Associated Types
| |||||
(Monoid w, MonadReader m) => MonadReader (WriterT w m) Source # | |||||
Defined in Control.Monad.Reader.Class Associated Types
| |||||
(Monoid w, MonadState m) => MonadState (WriterT w m) Source # | |||||
(Monoid w, Monad m) => MonadWriter (WriterT w m) Source # | |||||
Defined in Control.Monad.Writer.Class Associated Types
| |||||
Generic (WriterT w m a) | |||||
Defined in Control.Monad.Trans.Writer.Lazy Associated Types
| |||||
(Read w, Read1 m, Read a) => Read (WriterT w m a) | |||||
(Show w, Show1 m, Show a) => Show (WriterT w m a) | |||||
(Eq w, Eq1 m, Eq a) => Eq (WriterT w m a) | |||||
(Ord w, Ord1 m, Ord a) => Ord (WriterT w m a) | |||||
Defined in Control.Monad.Trans.Writer.Lazy Methods compare :: WriterT w m a -> WriterT w m a -> Ordering # (<) :: WriterT w m a -> WriterT w m a -> Bool # (<=) :: WriterT w m a -> WriterT w m a -> Bool # (>) :: WriterT w m a -> WriterT w m a -> Bool # (>=) :: WriterT w m a -> WriterT w m a -> Bool # | |||||
type ErrorType (WriterT w m) Source # | |||||
Defined in Control.Monad.Except.Class | |||||
type EnvType (WriterT w m) Source # | |||||
Defined in Control.Monad.Reader.Class | |||||
type StateType (WriterT w m) Source # | |||||
Defined in Control.Monad.State.Class | |||||
type WriterType (WriterT w m) Source # | |||||
Defined in Control.Monad.Writer.Class | |||||
type Rep (WriterT w m a) | |||||
Defined in Control.Monad.Trans.Writer.Lazy |
execWriterT :: Monad m => WriterT w m a -> m w #
Extract the output from a writer computation.
execWriterT
m =liftM
snd
(runWriterT
m)
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
(mapWriterT
f m) = f (runWriterT
m)
module Control.Monad
module Control.Monad.Fix
module Control.Monad.Trans
module Data.Monoid