| Copyright | (c) Daniel Mendler 2016 (c) Andy Gill 2001 (c) Oregon Graduate Institute of Science and Technology 2001 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | R.Paterson@city.ac.uk |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell2010 |
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
- type RWS r w s = RWST r w s Identity
- rws :: Monoid w => (r -> s -> (a, s, w)) -> RWS r w s a
- runRWS :: Monoid w => RWS r w s a -> r -> s -> (a, s, w)
- evalRWS :: Monoid w => RWS r w s a -> r -> s -> (a, w)
- execRWS :: Monoid w => RWS r w s a -> r -> s -> (s, w)
- mapRWS :: (Monoid w, Monoid w') => ((a, s, w) -> (b, s, w')) -> RWS r w s a -> RWS r w' s b
- withRWS :: (r' -> s -> (r, s)) -> RWS r w s a -> RWS r' w s a
- data RWST r w s (m :: Type -> Type) a
- rwsT :: (Functor m, Monoid w) => (r -> s -> m (a, s, w)) -> RWST r w s m a
- runRWST :: Monoid w => RWST r w s m a -> r -> s -> m (a, s, w)
- evalRWST :: (Monad m, Monoid w) => RWST r w s m a -> r -> s -> m (a, w)
- execRWST :: (Monad m, Monoid w) => RWST r w s m a -> r -> s -> m (s, w)
- 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
- 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
- reader :: forall (m :: Type -> Type) r a w s. Monad m => (r -> a) -> RWST r w s m a
- ask :: forall (m :: Type -> Type) r w s. Monad m => RWST r w s m r
- local :: forall r w s (m :: Type -> Type) a. (r -> r) -> RWST r w s m a -> RWST r w s m a
- asks :: forall (m :: Type -> Type) r a w s. Monad m => (r -> a) -> RWST r w s m a
- writer :: forall w (m :: Type -> Type) a r s. (Monoid w, Monad m) => (a, w) -> RWST r w s m a
- tell :: forall w (m :: Type -> Type) r s. (Monoid w, Monad m) => w -> RWST r w s m ()
- 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)
- 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)
- 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
- 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
- state :: forall (m :: Type -> Type) s a r w. Monad m => (s -> (a, s)) -> RWST r w s m a
- get :: forall (m :: Type -> Type) r w s. Monad m => RWST r w s m s
- put :: forall (m :: Type -> Type) s r w. Monad m => s -> RWST r w s m ()
- modify :: forall (m :: Type -> Type) s r w. Monad m => (s -> s) -> RWST r w s m ()
- gets :: forall (m :: Type -> Type) s a r w. Monad m => (s -> a) -> RWST r w s m a
- liftCallCC :: CallCC m (a, s, w) (b, s, w) -> CallCC (RWST r w s m) a b
- liftCallCC' :: CallCC m (a, s, w) (b, s, w) -> CallCC (RWST r w s m) a b
- liftCatch :: Catch e m (a, s, w) -> Catch e (RWST r w s m) a
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 .)
Arguments
RWS computation to execute
initial environment
initial value
final value and output
Evaluate a computation with the given initial state and environment, returning the final value and output, discarding the final state.
Arguments
RWS computation to execute
initial environment
initial value
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 #
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
Instance details
Defined in Control.Monad.Trans.RWS.CPS
Instance details
Defined in Control.Monad.Trans.RWS.CPS
Instance details
Defined in Control.Monad.Trans.RWS.CPS
Associated Types
Instance details
Defined in Control.Monad.Trans.RWS.CPS
Instance details
Defined in Control.Monad.Trans.RWS.CPS
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 .)
Arguments
computation to execute
initial environment
initial value
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.
Arguments
computation to execute
initial environment
initial value
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 #
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 #
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.
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 #
is an action that produces the output tell ww.
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 #
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 #
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 #
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 #
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 #
sets the state within the monad to put ss.
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.