multistate-0.6.1.0: like mtl's ReaderT / WriterT / StateT, but more than one contained value/type.

Safe HaskellNone
LanguageHaskell2010

Control.Monad.MultiState

Contents

Description

Deprecated: Use Control.Monad.Trans.MultiState instead

The multi-valued version of mtl's State / StateT / MonadState

Synopsis

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 where a is an arbitrary type and b is the rest list.

For example,

MultiStateT '[Int, Bool] :: (* -> *) -> (* -> *)

is a State wrapper containing the types [Int, Bool].

Constructors

MultiStateT 

Fields

runMultiStateTRaw :: StateT (HList x) m a
 

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 => MonadMultiState a m where Source

All methods must be defined.

The idea is: Any monad stack is instance of MonadMultiState a, iff the stack contains a MultiStateT x with a element of x.

Methods

mSet :: a -> m () Source

state set function for values of type a.

mGet :: m a Source

state get function for values of type a.

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

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

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.

mGetRaw :: Monad m => MultiStateT a m (HList a) Source

A raw extractor of the contained HList (i.e. the complete state).

mPutRaw :: Monad m => HList s -> MultiStateT s m () Source