Portability | portable |
---|---|
Stability | experimental |
Maintainer | me@joelt.io |
Safe Haskell | Safe-Inferred |
Concurrent RWS monad, combining a Reader, a Writer, and a State monad.
This module performs computations strictly. For a lazy version, see Control.Monad.RWS.Concurrent.Lazy.
- module Control.Monad.RWS
- data RWSC r w s m a
- runRWSC :: MonadIO m => RWSC r w s m a -> r -> TVar s -> TVar w -> m (a, s, w)
- evalRWSC :: MonadIO m => RWSC r w s m a -> r -> TVar s -> TVar w -> m (a, w)
- execRWSC :: MonadIO m => RWSC r w s m a -> r -> TVar s -> TVar w -> m (s, w)
- mapRWSC :: (m (a, TVar s, TVar w) -> n (b, TVar s, TVar w)) -> RWSC r w s m a -> RWSC r w s n b
- withRWSC :: (r' -> TVar s -> TVar w -> (r, TVar s, TVar w)) -> RWSC r w s m a -> RWSC r' w s m a
- liftCallCCC :: ((((a, TVar s, TVar w) -> m (b, TVar s, TVar w)) -> m (a, TVar s, TVar w)) -> m (a, TVar s, TVar w)) -> ((a -> RWSC r w s m b) -> RWSC r w s m a) -> RWSC r w s m a
- liftCatch :: (m (a, TVar s, TVar w) -> (e -> m (a, TVar s, TVar w)) -> m (a, TVar s, TVar w)) -> RWSC l w s m a -> (e -> RWSC l w s m a) -> RWSC l w s m a
Documentation
module Control.Monad.RWS
The RWSC monad transformer
A concurrent monad transformer reading an environment of type r
,
collecting output of type w
and updating a state of type s
to an
inner monad m
.
This is very similar to transformers
' RWST
, with the exception of
the MonadIO
constraint on every instance, which is necessary to
perform STM actions.
(Monoid w, MonadIO m, MonadReader r m, MonadWriter w m, MonadState s m) => MonadRWS r w s (RWSC r w s m) | |
MonadReader r m => MonadReader r (RWSC r w s m) | |
(MonadIO m, MonadState s m) => MonadState s (RWSC r w s m) | |
(Monoid w, MonadIO m, MonadWriter w m) => MonadWriter w (RWSC r w s m) | |
MonadTrans (RWSC r w s) | |
Monad m => Monad (RWSC r w s m) | |
Functor m => Functor (RWSC r w s m) | |
MonadFix m => MonadFix (RWSC r w s m) | |
MonadPlus m => MonadPlus (RWSC r w s m) | |
(Functor m, Monad m) => Applicative (RWSC r w s m) | |
(Functor m, MonadPlus m) => Alternative (RWSC r w s m) | |
(MonadIO m, MonadCatch m) => MonadCatch (RWSC r w s m) | |
MonadIO m => MonadIO (RWSC r w s m) | |
MonadFork m => MonadFork (RWSC r w s m) |
Running RWSC actions
:: MonadIO m | |
=> RWSC r w s m a | computation to execute |
-> r | environment to read |
-> TVar s | state to modify |
-> TVar w | output channel |
-> m (a, s, w) | return value, final state, and collected output |
Unwrap a concurrent RWS monad computation as a function.
:: MonadIO m | |
=> RWSC r w s m a | computation to execute |
-> r | environment to read |
-> TVar s | state to modify |
-> TVar w | output channel |
-> m (a, w) | return value and collected output |
Unwrap a concurrent RWS monad computation as a function, discarding the final state.
:: MonadIO m | |
=> RWSC r w s m a | computation to execute |
-> r | environment to read |
-> TVar s | state to modify |
-> TVar w | output channel |
-> m (s, w) | final state and collected output |
Unwrap a concurrent RWS monad computation as a function, discarding the return value.
mapRWSC :: (m (a, TVar s, TVar w) -> n (b, TVar s, TVar w)) -> RWSC r w s m a -> RWSC r w s n bSource
withRWSC :: (r' -> TVar s -> TVar w -> (r, TVar s, TVar w)) -> RWSC r w s m a -> RWSC r' w s m aSource