| Copyright | (c) Andy Gill 2001 (c) Oregon Graduate Institute of Science and Technology 2001 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | experimental |
| Portability | non-portable (multi-param classes, functional dependencies) |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Control.Monad.Writer.Strict
Description
Strict 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 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
- 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.Trans
MonadWriter class
class (Monoid w, Monad m) => MonadWriter w m | m -> w where Source #
Methods
writer :: (a, w) -> m a Source #
embeds a simple writer action.writer (a,w)
is an action that produces the output tell ww.
listen :: m a -> m (a, w) Source #
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 Source #
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
Instances details
There are two valid instances for AccumT . It could either:
- Lift the operations to the inner
MonadWriter - 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: 2.3
listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b) Source #
censor :: MonadWriter w m => (w -> w) -> 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.
execWriterm =snd(runWriterm)
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 .
Instances
Instances details
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 #
'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: 2.3
Instance details
Defined in Control.Monad.Select
Instance details
Defined in Control.Monad.Trans.Writer.Strict
Instance details
Defined in Control.Monad.Trans.Writer.Strict
Instance details
Defined in Control.Monad.Trans.Writer.Strict
Instance details
Defined in Control.Monad.Trans.Writer.Strict
Instance details
Defined in Control.Monad.Trans.Writer.Strict
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 #
Instance details
Defined in Control.Monad.Trans.Writer.Strict
Instance details
Defined in Control.Monad.Trans.Writer.Strict
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] #
Instance details
Defined in Control.Monad.Trans.Writer.Strict
Instance details
Defined in Control.Monad.Trans.Writer.Strict
Instance details
Defined in Control.Monad.Trans.Writer.Strict
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 #
execWriterT :: Monad m => WriterT w m a -> m w #
Extract the output from a writer computation.
execWriterTm =liftMsnd(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)
module Control.Monad.Trans