License | BSD-style (see the file LICENSE) |
---|---|
Maintainer | ocean0yohsuke@gmail.com |
Stability | experimental |
Portability | --- |
Safe Haskell | Safe |
Language | Haskell2010 |
This module is just a concise mimic for RWS Monad in mtl(monad-transformer-library).
The qualifier "concise" means that this module doesn't make no attempt to transform functions of any kind of Monad automatically.
So when making some new data type of RWSTx, you have to manually define involved Monad instances,
for example MonadError
,
by making use of the transformation functions such as trans
, trans2
, etc.
Admittedly it is tedious though, you can deeply understand monad-transformation mechanism instead.
- class Monad m => MonadReader r m | m -> r where
- class (Monoid w, Monad m) => MonadWriter w m | m -> w where
- class Monad m => MonadState s m | m -> s where
- newtype RWS r w s a = RWS {
- runRWS :: r -> s -> (a, s, w)
- rws :: (r -> s -> (a, s, w)) -> RWS r w s a
- evalRWS :: RWS r w s a -> r -> s -> (a, w)
- execRWS :: RWS r w s a -> r -> s -> (s, w)
- mapRWS :: ((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
- newtype RWST r w s m a = RWST {
- runRWST :: r -> s -> m (a, s, w)
- rwsT :: Monad m => (r -> s -> (a, s, w)) -> RWST r w s m a
- evalRWST :: Monad m => RWST r w s m a -> r -> s -> m (a, w)
- execRWST :: Monad m => RWST r w s m a -> r -> s -> m (s, w)
- mapRWST :: (m (a, s, w) -> n (b, s, w')) -> RWST r w s m a -> RWST r w' s n b
- withRWST :: (r' -> s -> (r, s)) -> RWST r w s m a -> RWST r' w s m a
- liftCatch :: Catch e m (a, s, w) -> Catch e (RWST r w s m) a
- newtype RWST2 r w s m1 m2 a = RWST2 {
- runRWST2 :: r -> s -> m1 (m2 (a, s, w))
- rwsT2 :: (Monad m1, Monad2 m2) => (r -> s -> (a, s, w)) -> RWST2 r w s m1 m2 a
- evalRWST2 :: (Monad m1, Monad2 m2) => RWST2 r w s m1 m2 a -> r -> s -> m1 (m2 (a, w))
- execRWST2 :: (Monad m1, Monad2 m2) => RWST2 r w s m1 m2 a -> r -> s -> m1 (m2 (s, w))
- mapRWST2 :: (m1 (m2 (a, s, w)) -> n1 (n2 (b, s, w'))) -> RWST2 r w s m1 m2 a -> RWST2 r w' s n1 n2 b
- withRWST2 :: (r' -> s -> (r, s)) -> RWST2 r w s m1 m2 a -> RWST2 r' w s m1 m2 a
- newtype RWST3 r w s m1 m2 m3 a = RWST3 {
- runRWST3 :: r -> s -> m1 (m2 (m3 (a, s, w)))
- rwsT3 :: (Monad m1, Monad2 m2, Monad3 m3) => (r -> s -> (a, s, w)) -> RWST3 r w s m1 m2 m3 a
- evalRWST3 :: (Monad m1, Monad2 m2, Monad3 m3) => RWST3 r w s m1 m2 m3 a -> r -> s -> m1 (m2 (m3 (a, w)))
- execRWST3 :: (Monad m1, Monad2 m2, Monad3 m3) => RWST3 r w s m1 m2 m3 a -> r -> s -> m1 (m2 (m3 (s, w)))
- mapRWST3 :: (m1 (m2 (m3 (a, s, w))) -> n1 (n2 (n3 (b, s, w')))) -> RWST3 r w s m1 m2 m3 a -> RWST3 r w' s n1 n2 n3 b
- withRWST3 :: (r' -> s -> (r, s)) -> RWST3 r w s m1 m2 m3 a -> RWST3 r' w s m1 m2 m3 a
Documentation
class Monad m => MonadReader r m | m -> r where
See examples in Control.Monad.Reader.
Note, the partially applied function type (->) r
is a simple reader monad.
See the instance
declaration below.
ask :: m r
Retrieves the monad environment.
:: (r -> r) | The function to modify the environment. |
-> m a |
|
-> m a |
Executes a computation in a modified environment.
:: (r -> a) | The selector function to apply to the environment. |
-> m a |
Retrieves a function of the current environment.
class (Monoid w, Monad m) => MonadWriter w m | m -> w where
writer :: (a, w) -> m a
embeds a simple writer action.writer
(a,w)
tell :: w -> m ()
is an action that produces the output tell
ww
.
listen :: m a -> m (a, w)
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
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.
class Monad m => MonadState s m | m -> s where
Minimal definition is either both of get
and put
or just state
get :: m s
Return the state from the internals of the monad.
put :: s -> m ()
Replace the state inside the monad.
state :: (s -> (a, s)) -> m a
Embed a simple state action into the monad.
Level-0
Level-1
(Monoid w, Monad m) => MonadReader r (RWST r w s m) Source | |
(Monoid w, Monad m) => MonadState s (RWST r w s m) Source | |
(Monoid w, Monad m) => MonadWriter w (RWST r w s m) Source | |
Monoid w => MonadTrans (RWST r w s) Source | |
(Monoid w, Monad m) => Monad (RWST r w s m) Source | |
Functor m => Functor (RWST r w s m) Source | |
(Monoid w, Monad m) => Applicative (RWST r w s m) Source | |
(Monoid w, MonadIO m, Monad m) => MonadIO (RWST r w s m) Source |
Level-2
newtype RWST2 r w s m1 m2 a Source
(Monoid w, Monad m1, Monad2 m2) => MonadReader r (RWST2 r w s m1 m2) Source | |
(Monoid w, Monad m1, Monad2 m2) => MonadState s (RWST2 r w s m1 m2) Source | |
(Monoid w, Monad m1, Monad2 m2) => MonadWriter w (RWST2 r w s m1 m2) Source | |
Monoid w => MonadTrans2 (RWST2 r w s) Source | |
(Monoid w, Monad m1, Monad2 m2) => Monad (RWST2 r w s m1 m2) Source | |
(Functor m1, Functor m2) => Functor (RWST2 r w s m1 m2) Source | |
(Monoid w, Monad m1, Monad2 m2) => Applicative (RWST2 r w s m1 m2) Source | |
(Monoid w, MonadIO m1, Monad m1, Monad2 m2) => MonadIO (RWST2 r w s m1 m2) Source |
mapRWST2 :: (m1 (m2 (a, s, w)) -> n1 (n2 (b, s, w'))) -> RWST2 r w s m1 m2 a -> RWST2 r w' s n1 n2 b Source
Level-3
newtype RWST3 r w s m1 m2 m3 a Source
(Monoid w, Monad m1, Monad2 m2, Monad3 m3) => MonadReader r (RWST3 r w s m1 m2 m3) Source | |
(Monoid w, Monad m1, Monad2 m2, Monad3 m3) => MonadState s (RWST3 r w s m1 m2 m3) Source | |
(Monoid w, Monad m1, Monad2 m2, Monad3 m3) => MonadWriter w (RWST3 r w s m1 m2 m3) Source | |
Monoid w => MonadTrans3 (RWST3 r w s) Source | |
(Monoid w, Monad m1, Monad2 m2, Monad3 m3) => Monad (RWST3 r w s m1 m2 m3) Source | |
(Functor m1, Functor m2, Functor m3) => Functor (RWST3 r w s m1 m2 m3) Source | |
(Monoid w, Monad m1, Monad2 m2, Monad3 m3) => Applicative (RWST3 r w s m1 m2 m3) Source | |
(Monoid w, MonadIO m1, Monad m1, Monad2 m2, Monad3 m3) => MonadIO (RWST3 r w s m1 m2 m3) Source |
evalRWST3 :: (Monad m1, Monad2 m2, Monad3 m3) => RWST3 r w s m1 m2 m3 a -> r -> s -> m1 (m2 (m3 (a, w))) Source
execRWST3 :: (Monad m1, Monad2 m2, Monad3 m3) => RWST3 r w s m1 m2 m3 a -> r -> s -> m1 (m2 (m3 (s, w))) Source