transformers-0.6.1.2: Concrete functor and monad transformers
Copyright(c) Daniel Mendler 2016
(c) Andy Gill 2001
(c) Oregon Graduate Institute of Science and Technology 2001
LicenseBSD-style (see the file LICENSE)
MaintainerR.Paterson@city.ac.uk
Stabilityexperimental
Portabilityportable
Safe HaskellSafe
LanguageHaskell2010

Control.Monad.Trans.RWS.CPS

Description

A monad transformer that combines ReaderT, WriterT and StateT. This version uses continuation-passing-style for the writer part to achieve constant space usage. For a lazy version with the same interface, see Control.Monad.Trans.RWS.Lazy.

Synopsis

The RWS monad

type RWS r w s = RWST r w s Identity Source #

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

rws :: Monoid w => (r -> s -> (a, s, w)) -> RWS r w s a Source #

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

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

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

evalRWS Source #

Arguments

:: Monoid w 
=> 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.

execRWS Source #

Arguments

:: Monoid w 
=> 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 :: (Monoid w, Monoid w') => ((a, s, w) -> (b, s, w')) -> RWS r w s a -> RWS r w' s b Source #

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 a Source #

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

The RWST monad transformer

data RWST r w s (m :: Type -> Type) 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.

Instances

Instances details
MonadTrans (RWST r w s) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

lift :: Monad m => m a -> RWST r w s m a Source #

(Functor m, MonadPlus m) => Alternative (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

empty :: RWST r w s m a #

(<|>) :: RWST r w s m a -> RWST r w s m a -> RWST r w s m a #

some :: RWST r w s m a -> RWST r w s m [a] #

many :: RWST r w s m a -> RWST r w s m [a] #

(Functor m, Monad m) => Applicative (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

pure :: a -> RWST r w s m a #

(<*>) :: RWST r w s m (a -> b) -> RWST r w s m a -> RWST r w s m b #

liftA2 :: (a -> b -> c) -> RWST r w s m a -> RWST r w s m b -> RWST r w s m c #

(*>) :: RWST r w s m a -> RWST r w s m b -> RWST r w s m b #

(<*) :: RWST r w s m a -> RWST r w s m b -> RWST r w s m a #

Functor m => Functor (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

fmap :: (a -> b) -> RWST r w s m a -> RWST r w s m b #

(<$) :: a -> RWST r w s m b -> RWST r w s m a #

Monad m => Monad (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

(>>=) :: RWST r w s m a -> (a -> RWST r w s m b) -> RWST r w s m b #

(>>) :: RWST r w s m a -> RWST r w s m b -> RWST r w s m b #

return :: a -> RWST r w s m a #

(Functor m, MonadPlus m) => MonadPlus (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

mzero :: RWST r w s m a #

mplus :: RWST r w s m a -> RWST r w s m a -> RWST r w s m a #

MonadFail m => MonadFail (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

fail :: String -> RWST r w s m a #

MonadFix m => MonadFix (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

mfix :: (a -> RWST r w s m a) -> RWST r w s m a #

MonadIO m => MonadIO (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Methods

liftIO :: IO a -> RWST r w s m a #

Generic (RWST r w s m a) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

Associated Types

type Rep (RWST r w s m a) 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

type Rep (RWST r w s m a) = D1 ('MetaData "RWST" "Control.Monad.Trans.RWS.CPS" "transformers-0.6.1.2-e8f7" 'True) (C1 ('MetaCons "RWST" 'PrefixI 'True) (S1 ('MetaSel ('Just "unRWST") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (r -> s -> w -> m (a, s, w)))))

Methods

from :: RWST r w s m a -> Rep (RWST r w s m a) x #

to :: Rep (RWST r w s m a) x -> RWST r w s m a #

type Rep (RWST r w s m a) Source # 
Instance details

Defined in Control.Monad.Trans.RWS.CPS

type Rep (RWST r w s m a) = D1 ('MetaData "RWST" "Control.Monad.Trans.RWS.CPS" "transformers-0.6.1.2-e8f7" 'True) (C1 ('MetaCons "RWST" 'PrefixI 'True) (S1 ('MetaSel ('Just "unRWST") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (r -> s -> w -> m (a, s, w)))))

rwsT :: (Functor m, Monoid w) => (r -> s -> m (a, s, w)) -> RWST r w s m a Source #

Construct an RWST computation from a function. (The inverse of runRWST.)

runRWST :: Monoid w => RWST r w s m a -> r -> s -> m (a, s, w) Source #

Unwrap an RWST computation as a function. (The inverse of rwsT.)

evalRWST Source #

Arguments

:: (Monad m, Monoid w) 
=> 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.

execRWST Source #

Arguments

:: (Monad m, Monoid w) 
=> 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 :: (Monad n, Monoid w, Monoid w') => (m (a, s, w) -> n (b, s, w')) -> RWST r w s m a -> RWST r w' s n b Source #

Map the inner computation using the given function.

  • runRWST (mapRWST f m) r s = f (runRWST m r s) mapRWST :: (m (a, s, w) -> n (b, s, w')) -> RWST r w s m a -> RWST r w' s n b

withRWST :: forall r' s r w (m :: Type -> Type) a. (r' -> s -> (r, s)) -> RWST r w s m a -> RWST r' w s m a Source #

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

Reader operations

reader :: forall (m :: Type -> Type) r a w s. Monad m => (r -> a) -> RWST r w s m a Source #

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

ask :: forall (m :: Type -> Type) r w s. Monad m => RWST r w s m r Source #

Fetch the value of the environment.

local :: forall r w s (m :: Type -> Type) a. (r -> r) -> RWST r w s m a -> RWST r w s m a Source #

Execute a computation in a modified environment

asks :: forall (m :: Type -> Type) r a w s. Monad m => (r -> a) -> RWST r w s m a Source #

Retrieve a function of the current environment.

Writer operations

writer :: forall w (m :: Type -> Type) a r s. (Monoid w, Monad m) => (a, w) -> RWST r w s m a Source #

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

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

tell w is an action that produces the output w.

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

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

State operations

state :: forall (m :: Type -> Type) s a r w. Monad m => (s -> (a, s)) -> RWST r w s m a Source #

Construct a state monad computation from a state transformer function.

get :: forall (m :: Type -> Type) r w s. Monad m => RWST r w s m s Source #

Fetch the current value of the state within the monad.

put :: forall (m :: Type -> Type) s r w. Monad m => s -> RWST r w s m () Source #

put s sets the state within the monad to s.

modify :: forall (m :: Type -> Type) s r 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 :: forall (m :: Type -> Type) s a r w. Monad m => (s -> a) -> RWST r w s m a Source #

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

Lifting other operations

liftCallCC :: CallCC m (a, s, w) (b, s, w) -> CallCC (RWST r w s m) a b Source #

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

liftCallCC' :: CallCC m (a, s, w) (b, s, w) -> CallCC (RWST r w s m) a b Source #

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

liftCatch :: Catch e m (a, s, w) -> Catch e (RWST r w s m) a Source #

Lift a catchE operation to the new monad. The uniformity property (see Control.Monad.Signatures) implies that the lifted catchE discards any output or changes to the state from the body on entering the handler.