| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Control.Monad.Trans.MultiState.Strict
Contents
Description
The multi-valued version of mtl's State / StateT
- newtype MultiStateT x m a = MultiStateT {
- runMultiStateTRaw :: StateT (HList x) m a
- type MultiStateTNull = MultiStateT '[]
- type MultiState x = MultiStateT x Identity
- class Monad m => MonadMultiGet a m where
- class MonadMultiGet a m => MonadMultiState a m where
- runMultiStateT :: Functor m => HList s -> MultiStateT s m a -> m (a, HList s)
- runMultiStateTAS :: Functor m => HList s -> MultiStateT s m a -> m (a, HList s)
- runMultiStateTSA :: Monad m => HList s -> MultiStateT s m a -> m (HList s, a)
- runMultiStateTA :: Monad m => HList s -> MultiStateT s m a -> m a
- runMultiStateTS :: Monad m => HList s -> MultiStateT s m a -> m (HList s)
- runMultiStateT_ :: Functor m => HList s -> MultiStateT s m a -> m ()
- runMultiStateTNil :: Monad m => MultiStateT '[] m a -> m a
- runMultiStateTNil_ :: Functor m => MultiStateT '[] m a -> m ()
- withMultiState :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m (a, s)
- withMultiStateAS :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m (a, s)
- withMultiStateSA :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m (s, a)
- withMultiStateA :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m a
- withMultiStateS :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m s
- withMultiState_ :: (Functor m, Monad m) => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m ()
- withMultiStates :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m (a, HList s1)
- withMultiStatesAS :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m (a, HList s1)
- withMultiStatesSA :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m (HList s1, a)
- withMultiStatesA :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m a
- withMultiStatesS :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m (HList s1)
- withMultiStates_ :: (Functor m, Monad m) => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m ()
- withoutMultiState :: (Functor m, Monad m) => MultiStateT ss m a -> MultiStateT (s ': ss) m a
- inflateState :: (Monad m, ContainsType s ss) => StateT s m a -> MultiStateT ss m a
- inflateReader :: (Monad m, ContainsType r ss) => ReaderT r m a -> MultiStateT ss m a
- inflateWriter :: (Monad m, ContainsType w ss, Monoid w) => WriterT w m a -> MultiStateT ss m a
- mapMultiStateT :: (m (a, HList w) -> m' (a', HList w)) -> MultiStateT w m a -> MultiStateT w m' a'
- mGetRaw :: Monad m => MultiStateT a m (HList a)
- mPutRaw :: Monad m => HList s -> MultiStateT s m ()
MultiStateT
newtype MultiStateT x m a Source #
A State transformer monad patameterized by:
- x - The list of types constituting the state,
- m - The inner monad.
MultiStateT corresponds to mtl's StateT, but can contain
a heterogenous list of types.
This heterogenous list is represented using Types.Data.List, i.e:
'[]- The empty list,a ': b- A list whereais an arbitrary type andbis the rest list.
For example,
MultiStateT '[Int, Bool] :: (* -> *) -> (* -> *)
is a State wrapper containing the types [Int, Bool].
Constructors
| MultiStateT | |
Fields
| |
Instances
| MonadBase b m => MonadBase b (MultiStateT s m) Source # | |
| MonadBaseControl b m => MonadBaseControl b (MultiStateT s m) Source # | |
| MonadState s m => MonadState s (MultiStateT c m) Source # | |
| MonadWriter w m => MonadWriter w (MultiStateT c m) Source # | |
| (Monad m, ContainsType a c) => MonadMultiGet a (MultiStateT c m) Source # | |
| (Monad m, ContainsType a c) => MonadMultiState a (MultiStateT c m) Source # | |
| MonadTrans (MultiStateT x) Source # | |
| MonadTransControl (MultiStateT s) Source # | |
| Monad m => Monad (MultiStateT x m) Source # | |
| Functor f => Functor (MultiStateT x f) Source # | |
| MonadFix m => MonadFix (MultiStateT s m) Source # | |
| (Applicative m, Monad m) => Applicative (MultiStateT x m) Source # | |
| MonadIO m => MonadIO (MultiStateT c m) Source # | |
| (Functor m, Applicative m, MonadPlus m) => Alternative (MultiStateT s m) Source # | |
| MonadPlus m => MonadPlus (MultiStateT s m) Source # | |
| type StT (MultiStateT s) a Source # | |
| type StM (MultiStateT s m) a Source # | |
type MultiStateTNull = MultiStateT '[] Source #
A MultiState transformer carrying an empty state.
type MultiState x = MultiStateT x Identity Source #
A state monad parameterized by the list of types x of the state to carry.
Similar to State s = StateT s Identity
MonadMultiState class
class Monad m => MonadMultiGet a m where Source #
In contrast to MonadMultiReader, MonadMultiGet is defined for State too, so it corresponds to read-access of any kind.
Note however that for MultiRWS, only the values from the state part can
be accessed via MonadMultiGet, due to limitations of the design of
MultiRWS and of the type system. This is issue is resolved in the
MultiGST type.
Minimal complete definition
Instances
| (MonadTrans t, Monad (t m), MonadMultiGet a m) => MonadMultiGet a (t m) Source # | |
| (Monad m, ContainsType a c) => MonadMultiGet a (MultiReaderT c m) Source # | |
| (Monad m, ContainsType a c) => MonadMultiGet a (MultiReaderT c m) Source # | |
| (Monad m, ContainsType a c) => MonadMultiGet a (MultiStateT c m) Source # | |
| (Monad m, ContainsType a c) => MonadMultiGet a (MultiStateT c m) Source # | |
| (Monad m, HListMContains GettableFlag a cts) => MonadMultiGet a (MultiGSTT cts m) Source # | |
| (Monad m, HListMContains GettableFlag a cts) => MonadMultiGet a (MultiGSTT cts m) Source # | |
| (Monad m, ContainsType a s) => MonadMultiGet a (MultiRWST r w s m) Source # | |
| (Monad m, ContainsType a s) => MonadMultiGet a (MultiRWST r w s m) Source # | |
class MonadMultiGet a m => MonadMultiState a m where Source #
Minimal complete definition
Instances
| (MonadTrans t, Monad (t m), MonadMultiState a m) => MonadMultiState a (t m) Source # | |
| (Monad m, ContainsType a c) => MonadMultiState a (MultiStateT c m) Source # | |
| (Monad m, ContainsType a c) => MonadMultiState a (MultiStateT c m) Source # | |
| (Monad m, HListMContains SettableFlag a cts) => MonadMultiState a (MultiGSTT cts m) Source # | |
| (Monad m, HListMContains SettableFlag a cts) => MonadMultiState a (MultiGSTT cts m) Source # | |
| (Monad m, ContainsType a s) => MonadMultiState a (MultiRWST r w s m) Source # | |
| (Monad m, ContainsType a s) => MonadMultiState a (MultiRWST r w s m) Source # | |
run-functions
runMultiStateT :: Functor m => HList s -> MultiStateT s m a -> m (a, HList s) Source #
runMultiStateTAS :: Functor m => HList s -> MultiStateT s m a -> m (a, HList s) Source #
runMultiStateTSA :: Monad m => HList s -> MultiStateT s m a -> m (HList s, a) Source #
runMultiStateTA :: Monad m => HList s -> MultiStateT s m a -> m a Source #
runMultiStateTS :: Monad m => HList s -> MultiStateT s m a -> m (HList s) Source #
runMultiStateT_ :: Functor m => HList s -> MultiStateT s m a -> m () Source #
runMultiStateTNil :: Monad m => MultiStateT '[] m a -> m a Source #
runMultiStateTNil_ :: Functor m => MultiStateT '[] m a -> m () Source #
with-functions (single state)
withMultiState :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m (a, s) Source #
withMultiStateAS :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m (a, s) Source #
withMultiStateSA :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m (s, a) Source #
withMultiStateA :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m a Source #
withMultiStateS :: Monad m => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m s Source #
withMultiState_ :: (Functor m, Monad m) => s -> MultiStateT (s ': ss) m a -> MultiStateT ss m () Source #
with-functions (multiple states)
withMultiStates :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m (a, HList s1) Source #
withMultiStatesAS :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m (a, HList s1) Source #
withMultiStatesSA :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m (HList s1, a) Source #
withMultiStatesA :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m a Source #
withMultiStatesS :: Monad m => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m (HList s1) Source #
withMultiStates_ :: (Functor m, Monad m) => HList s1 -> MultiStateT (Append s1 s2) m a -> MultiStateT s2 m () Source #
without-function (single state)
withoutMultiState :: (Functor m, Monad m) => MultiStateT ss m a -> MultiStateT (s ': ss) m a Source #
inflate-functions (run single state in multiple states)
inflateState :: (Monad m, ContainsType s ss) => StateT s m a -> MultiStateT ss m a Source #
inflateReader :: (Monad m, ContainsType r ss) => ReaderT r m a -> MultiStateT ss m a Source #
inflateWriter :: (Monad m, ContainsType w ss, Monoid w) => WriterT w m a -> MultiStateT ss m a Source #
other functions
mapMultiStateT :: (m (a, HList w) -> m' (a', HList w)) -> MultiStateT w m a -> MultiStateT w m' a' Source #
Map both the return value and the state of a computation using the given function.