úÎOðLµ      None !"2468=K !"# !"#None !"2468=K 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.&state set function for values of type a.&state get function for values of type a.IA state monad parameterized by the list of types x of the state to carry. Similar to State s = StateT s Identity 1A MultiState transformer carrying an empty state. +A State transformer monad patameterized by:-x - The list of types constituting the state,m - The inner monad.  corresponds to mtl's $0, but can contain a heterogenous list of types.AThis 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 (Cons Int (Cons Bool Null)) :: (* -> *) -> (* -> *)3is a State wrapper containing the types [Int,Bool]. YAdds an element to the state, thereby transforming a MultiStateT over values with types (x:xs) to a MultiStateT over xs.EThink "Execute this computation with this additional value as state".nAdds a heterogenous list of elements to the state, thereby transforming a MultiStateT over values with types xs++ys to a MultiStateT over ys.1Similar to recursively adding single values with  . Note that ysL can be Null; in that case the return value can be evaluated further using .$Evaluate an empty state computation.>Because the state is empty, no initial state must be provided._Currently it is not directly possible to extract the final state of a computation (similar to  execStateT and  runStateT% for mtl's StateT), but you can use  if you need such functionality.JIf you want to evaluate a computation over any non-Null state, either usesimplify the computation using   / , then use  on the result.:Evaluate a state computation with the given initial state.AA raw extractor of the contained HList (i.e. the complete state).For a possible usecase, see .SMap both the return value and the state of a computation using the given function.%&' The value to add)The computation using the enlarged state'An computation using the smaller stateThe list of values to add+The computation using the enlarged state&A computation using the smaller stateThe initial stateThe computation to evaluate()*+,-./01   %&'  ()*+,-./01None !"2468=K All methods must be defined.,The idea is: Any monad stack is instance of MonadMultiReader a, iff the stack contains a MultiReaderT x with a element of x.YA reader monad parameterized by the list of types x of the environment / input to carry. Similar to Reader r = ReaderT r Identity2A MultiReader transformer carrying an empty state.,A Reader transformer monad patameterized by:Hx - The list of types constituting the environment / input (to be read),m - The inner monad. corresponds to mtl's ReaderT0, but can contain a heterogenous list of types.AThis 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, @MultiReaderT (Cons Int (Cons Bool Null)) :: (* -> *) -> (* -> *)4is a Reader wrapper containing the types [Int,Bool].lAdds an element to the environment, thereby transforming a MultiReaderT carrying an environment with types (x:xs) to a a MultiReaderT with xs.KThink "Execute this computation with this additional value as environment".ŽAdds a heterogenous list of elements to the environment, thereby transforming a MultiReaderT carrying an environment with values over types xs++ys to a MultiReaderT over ys.1Similar to recursively adding single values with . Note that ysL can be Null; in that case the return value can be evaluated further using .GA raw extractor of the contained HList (i.e. the complete environment).For a possible usecase, see .1Evaluate a computation over an empty environment.BBecause the environment is empty, it does not need to be provided.PIf you want to evaluate a computation over any non-Null environment, either usesimplify the computation using  / , then use  on the result.9Evaluate a reader computation with the given environment.YMap both the return value and the environment of a computation using the given function.?Note that there is a difference to mtl's ReaderT, where it is not$ possible to modify the environment.-Access to a specific type in the environment.234The initial stateThe computation to evaluate56789:;<=>23456789:;<=>?      !"#$%&'()*+,-./01234567+,-89:;<=>?67@multistate-0.1.2Control.Monad.MultiStateData.HList.HListControl.Monad.MultiReadertfp-0.8Types.Data.ListConsNullHListTNullTConsMonadMultiStatemSetmGet MultiStateMultiStateTNull MultiStateTrunMultiStateTRawwithMultiStatewithMultiStatesevalMultiStateTevalMultiStateTWithInitialmGetRawmapMultiStateTMonadMultiReadermAsk MultiReaderMultiReaderTNull MultiReaderTrunMultiReaderTRawwithMultiReaderwithMultiReadersmAskRawevalMultiReaderTevalMultiReaderTWithInitialmapMultiReaderT $fMonoidHList$fMonoidHList0 $fShowHList $fShowHList0transformers-0.3.0.0 Control.Monad.Trans.State.StrictStateT ContainsType setHListElem getHListElem$fMonadWriterwMultiStateT$fMonadStatesMultiStateT$fMonadMultiStateat$fMonadMultiStateaMultiStateT$fMonadTransMultiStateT$fMonadMultiStateT$fApplicativeMultiStateT$fFunctorMultiStateT$fContainsTypeaCons$fContainsTypeaCons0$fMonadWriterwMultiReaderT$fMonadStatesMultiReaderT$fMonadMultiReaderat$fMonadMultiReaderaMultiReaderT$fMonadTransMultiReaderT$fMonadMultiReaderT$fApplicativeMultiReaderT$fFunctorMultiReaderT