| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Control.Monad.Trans.MultiState.Strict
Description
The multi-valued version of mtl's State / StateT
Synopsis
- 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
- mGet :: m a
- class MonadMultiGet a m => MonadMultiState a m where
- mSet :: a -> m ()
- 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
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.
Instances
class MonadMultiGet a m => MonadMultiState a m where Source #
Instances
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.