transformers-0.3.0.0: Concrete functor and monad transformers

Copyright(c) Andy Gill 2001, (c) Oregon Graduate Institute of Science and Technology, 2001
License(c) Andy Gill 2001, (c) Oregon Graduate Institute of Science and Technology, 2001
Maintainerross@soi.city.ac.uk
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred

Control.Monad.Trans.RWS.Strict

Contents

Description

A monad transformer that combines ReaderT, WriterT and StateT. This version is strict; for a lazy version, see Control.Monad.Trans.RWS.Lazy, which has the same interface.

Synopsis

The RWS monad

type RWS r w s = RWST r w s IdentitySource

A monad containing an environment of type r, output of type w and an updatable state of type s.

rws :: (r -> s -> (a, s, w)) -> RWS r w s aSource

Construct an RWS computation from a function. (The inverse of runRWS.)

runRWS :: RWS r w s a -> r -> s -> (a, s, w)Source

Unwrap an RWS computation as a function. (The inverse of rws.)

evalRWSSource

Arguments

:: RWS r w s a

RWS computation to execute

-> r

initial environment

-> s

initial value

-> (a, w)

final value and output

Evaluate a computation with the given initial state and environment, returning the final value and output, discarding the final state.

execRWSSource

Arguments

:: RWS r w s a

RWS computation to execute

-> r

initial environment

-> s

initial value

-> (s, w)

final state and output

Evaluate a computation with the given initial state and environment, returning the final state and output, discarding the final value.

mapRWS :: ((a, s, w) -> (b, s, w')) -> RWS r w s a -> RWS r w' s bSource

Map the return value, final state and output of a computation using the given function.

withRWS :: (r' -> s -> (r, s)) -> RWS r w s a -> RWS r' w s aSource

withRWS f m executes action m with an initial environment and state modified by applying f.

The RWST monad transformer

newtype RWST r w s m a Source

A monad transformer adding reading an environment of type r, collecting an output of type w and updating a state of type s to an inner monad m.

Constructors

RWST 

Fields

runRWST :: r -> s -> m (a, s, w)
 

Instances

Monoid w => MonadTrans (RWST r w s) 
(Monoid w, Monad m) => Monad (RWST r w s m) 
Functor m => Functor (RWST r w s m) 
(Monoid w, MonadFix m) => MonadFix (RWST r w s m) 
(Monoid w, MonadPlus m) => MonadPlus (RWST r w s m) 
(Monoid w, Functor m, Monad m) => Applicative (RWST r w s m) 
(Monoid w, Functor m, MonadPlus m) => Alternative (RWST r w s m) 
(Monoid w, MonadIO m) => MonadIO (RWST r w s m) 

evalRWSTSource

Arguments

:: Monad m 
=> RWST r w s m a

computation to execute

-> r

initial environment

-> s

initial value

-> m (a, w)

computation yielding final value and output

Evaluate a computation with the given initial state and environment, returning the final value and output, discarding the final state.

execRWSTSource

Arguments

:: Monad m 
=> RWST r w s m a

computation to execute

-> r

initial environment

-> s

initial value

-> m (s, w)

computation yielding final state and output

Evaluate a computation with the given initial state and environment, returning the final state and output, discarding the final value.

mapRWST :: (m (a, s, w) -> n (b, s, w')) -> RWST r w s m a -> RWST r w' s n bSource

Map the inner computation using the given function.

withRWST :: (r' -> s -> (r, s)) -> RWST r w s m a -> RWST r' w s m aSource

withRWST f m executes action m with an initial environment and state modified by applying f.

Reader operations

reader :: (Monoid w, Monad m) => (r -> a) -> RWST r w s m aSource

Constructor for computations in the reader monad (equivalent to asks).

ask :: (Monoid w, Monad m) => RWST r w s m rSource

Fetch the value of the environment.

local :: (Monoid w, Monad m) => (r -> r) -> RWST r w s m a -> RWST r w s m aSource

Execute a computation in a modified environment

asks :: (Monoid w, Monad m) => (r -> a) -> RWST r w s m aSource

Retrieve a function of the current environment.

Writer operations

writer :: Monad m => (a, w) -> RWST r w s m aSource

Construct a writer computation from a (result, output) pair.

tell :: (Monoid w, Monad m) => w -> RWST r w s m ()Source

tell w is an action that produces the output w.

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

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

listens :: (Monoid w, Monad m) => (w -> b) -> RWST r w s m a -> RWST r w s 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.

pass :: (Monoid w, Monad m) => RWST r w s m (a, w -> w) -> RWST r w s m aSource

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.

censor :: (Monoid w, Monad m) => (w -> w) -> RWST r w s m a -> RWST r w s m aSource

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

State operations

state :: (Monoid w, Monad m) => (s -> (a, s)) -> RWST r w s m aSource

Construct a state monad computation from a state transformer function.

get :: (Monoid w, Monad m) => RWST r w s m sSource

Fetch the current value of the state within the monad.

put :: (Monoid w, Monad m) => s -> RWST r w s m ()Source

put s sets the state within the monad to s.

modify :: (Monoid w, Monad m) => (s -> s) -> RWST r w s m ()Source

modify f is an action that updates the state to the result of applying f to the current state.

gets :: (Monoid w, Monad m) => (s -> a) -> RWST r w s m aSource

Get a specific component of the state, using a projection function supplied.

Lifting other operations

liftCallCC :: Monoid w => ((((a, s, w) -> m (b, s, w)) -> m (a, s, w)) -> m (a, s, w)) -> ((a -> RWST r w s m b) -> RWST r w s m a) -> RWST r w s m aSource

Uniform lifting of a callCC operation to the new monad. This version rolls back to the original state on entering the continuation.

liftCallCC' :: Monoid w => ((((a, s, w) -> m (b, s, w)) -> m (a, s, w)) -> m (a, s, w)) -> ((a -> RWST r w s m b) -> RWST r w s m a) -> RWST r w s m aSource

In-situ lifting of a callCC operation to the new monad. This version uses the current state on entering the continuation.

liftCatch :: (m (a, s, w) -> (e -> m (a, s, w)) -> m (a, s, w)) -> RWST l w s m a -> (e -> RWST l w s m a) -> RWST l w s m aSource

Lift a catchError operation to the new monad.