| Portability | portable |
|---|---|
| Stability | experimental |
| Maintainer | me@joelt.io |
| Safe Haskell | Safe-Inferred |
Control.Monad.RWS.Concurrent.Strict
Contents
Description
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
- runRWSCs :: (MonadFork m, Monoid w) => [RWSC r w s m a] -> r -> s -> m ([a], s, w)
- evalRWSCs :: (MonadFork m, Monoid w) => [RWSC r w s m a] -> r -> s -> m ([a], w)
- execRWSCs :: (MonadFork m, Monoid w) => [RWSC r w s m a] -> r -> s -> m (s, w)
- liftCallCC :: ((((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.
Instances
| (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) | |
| (Monoid w, MonadFork m) => MonadFork (RWSC r w s m) |
Running RWSC actions
Arguments
| :: 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.
Arguments
| :: 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.
Arguments
| :: 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
Running concurrent operations on a single input
Arguments
| :: (MonadFork m, Monoid w) | |
| => [RWSC r w s m a] | RWS computations to execute |
| -> r | environment |
| -> s | initial state |
| -> m ([a], s, w) | return values, final state, and output |
Run multiple RWS operations on the same value, returning the resultant state, output, and the value produced by each operation.
Arguments
| :: (MonadFork m, Monoid w) | |
| => [RWSC r w s m a] | RWS computations to execute |
| -> r | environment |
| -> s | initial state |
| -> m ([a], w) | return values and output |
Run multiple RWS operations on the same value, returning the final output and the return values of each operation.
Arguments
| :: (MonadFork m, Monoid w) | |
| => [RWSC r w s m a] | RWS computations to execute |
| -> r | environment |
| -> s | initial state |
| -> m (s, w) | final state and output |
Run multiple RWS operations on the same value, returning the final state and the return values of each operation.