úÎ\³Wÿ,      !"#$%&'()*+None!"(2468=JK ,-./0123 ,-./0123None!"(2468=JK 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 Identity1A 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 40, 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, 0MultiStateT '[Int, Bool] :: (* -> *) -> (* -> *)4is 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.567 The value to add)The computation using the enlarged state'An computation using the smaller state The list of values to add+The computation using the enlarged state&A computation using the smaller stateThe initial stateThe computation to evaluate89:;<=>?@A   567  89:;<=>?@ANone!"(2468=JK 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, 1MultiReaderT '[Int, Bool] :: (* -> *) -> (* -> *)9is a Reader transformer 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.BCDThe initial stateThe computation to evaluateEFGHIJKLMN  BCDEFGHIJKLMNNone!"(23468=JK"2A MultiWriter transformer carrying an empty state.#,A Writer transformer monad patameterized by:=x - The list of types that can be written (Monoid instances).m - The inner monad.# corresponds to mtl's WriterT0, 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, 1MultiWriterT '[Int, Bool] :: (* -> *) -> (* -> *)9is a Writer transformer containing the types [Int, Bool]. OPQ!"#$%&'()*+RSTUVWXYZ[  !"#$%&'()*+ #$%"! *&'()+ OPQ!"#$%&'()*+RSTUVWXYZ[\      !"#$%&&'()*+,-./0123456789:;<=>?@ABCD89:EFGHIJKLCD89:MNOPQRSTCDUmultistate-0.3.0.0Data.HList.HListControl.Monad.MultiStateControl.Monad.MultiReaderControl.Monad.MultiWriterAppendHList:+:HNilMonadMultiStatemSetmGet MultiStateMultiStateTNull MultiStateTrunMultiStateTRawwithMultiStatewithMultiStatesevalMultiStateTevalMultiStateTWithInitialmGetRawmapMultiStateTMonadMultiReadermAsk MultiReaderMultiReaderTNull MultiReaderTrunMultiReaderTRawwithMultiReaderwithMultiReadersmAskRawevalMultiReaderTevalMultiReaderTWithInitialmapMultiReaderTMonadMultiWritermTell MultiWriterMultiWriterTNull MultiWriterTrunMultiWriterTRawwithMultiWriterwithMultiWritersrunMultiWriterTexecMultiWriterTmapMultiWriterTTFCo:R:Append:l2TFCo:R:Append[]l2 $fEqHList $fEqHList0 $fMonoidHList$fMonoidHList0 $fShowHList $fShowHList0transformers-0.3.0.0 Control.Monad.Trans.State.StrictStateT ContainsType setHListElem getHListElem$fMonadWriterwMultiStateT$fMonadStatesMultiStateT$fMonadMultiStateat$fMonadMultiStateaMultiStateT$fMonadTransMultiStateT$fMonadMultiStateT$fApplicativeMultiStateT$fFunctorMultiStateT$fContainsTypea:$fContainsTypea:0$fMonadWriterwMultiReaderT$fMonadStatesMultiReaderT$fMonadMultiReaderat$fMonadMultiReaderaMultiReaderT$fMonadTransMultiReaderT$fMonadMultiReaderT$fApplicativeMultiReaderT$fFunctorMultiReaderT$fMonadWriterwMultiWriterT$fMonadStatesMultiWriterT$fMonadMultiWriterat$fMonadMultiWriteraMultiWriterT$fMonadTransMultiWriterT$fMonadMultiWriterT$fApplicativeMultiWriterT$fFunctorMultiWriterT