| 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.RWS.CPS
Description
Strict RWS monad that uses continuation-passing-style to achieve constant space usage.
Inspired by the paper Functional Programming with Overloading and Higher-Order Polymorphism, Mark P Jones (http://web.cecs.pdx.edu/~mpj/) Advanced School of Functional Programming, 1995.
Since: mtl-2.3, transformers-0.5.6
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
- 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
- module Control.Monad.RWS.Class
- module Control.Monad.Trans
The RWS monad
type RWS r w s = RWST r w s Identity #
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 #
Construct an RWS computation from a function.
(The inverse of runRWS .)
runRWS :: Monoid w => RWS r w s a -> r -> s -> (a, s, w) #
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.
The RWST monad transformer
data RWST r w s (m :: Type -> Type) a #
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.RWS.Class
Instance details
Defined in Control.Monad.Error.Class
Methods
throwError :: e -> RWST r w s m a Source #
catchError :: RWST r w s m a -> (e -> RWST r w s m a) -> RWST r w s m a Source #
A combination of an 'outer' ReaderT , WriterT and StateT. In short,
you get a value of type r which can influence what gets picked, but not how
anything is ranked, and the 'ranking' function gets access to an s and a
w, but can modify neither.
Since: 2.3
Instance details
Defined in Control.Monad.Select
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
runRWST :: Monoid w => RWST r w s m a -> r -> s -> m (a, s, w) #
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 #
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 #
Strict Reader-writer-state monads
module Control.Monad.RWS.Class
module Control.Monad.Trans