Safe Haskell | None |
---|---|
Language | Haskell2010 |
State monad with multiple states (extensible)
Similar to the multistate package, with the following differences (as of 0.7.0.0): * don't pollute Data.HList.HList * use HArray instead of a HList, for fast indexing
Synopsis
- type MStateT (s :: [*]) m a = StateT (HArray s) m a
- type MState (s :: [*]) a = MStateT s Identity a
- mSet :: (Monad m, HArrayIndexT a s) => a -> MStateT s m ()
- mGet :: (Monad m, HArrayIndexT a s) => MStateT s m a
- mTryGet :: (Monad m, HArrayTryIndexT a s) => MStateT s m (Maybe a)
- mModify :: (Monad m, HArrayIndexT a s) => (a -> a) -> MStateT s m ()
- mModify' :: (Monad m, HArrayIndexT a s) => (a -> a) -> MStateT s m ()
- mWith :: forall s a m b. Monad m => a -> MStateT (a ': s) m b -> MStateT s m b
- runMState :: MState s a -> HArray s -> (a, HArray s)
- evalMState :: MState s a -> HArray s -> a
- execMState :: MState s a -> HArray s -> HArray s
- liftMStateT :: Monad m => MStateT xs m x -> HArrayT m xs (x ': xs)
- (>~:>) :: Monad m => HArrayT m xs ys -> MStateT ys m y -> HArrayT m xs (y ': ys)
- (>:>) :: Monad m => MStateT xs m x -> MStateT (x ': xs) m y -> HArrayT m xs (y ': (x ': xs))
Documentation
type MStateT (s :: [*]) m a = StateT (HArray s) m a Source #
Multi-state monad transformer
States are stacked in a heterogeneous array.
mTryGet :: (Monad m, HArrayTryIndexT a s) => MStateT s m (Maybe a) Source #
Try to get a value in the state
mModify :: (Monad m, HArrayIndexT a s) => (a -> a) -> MStateT s m () Source #
Modify a value in the state
mModify' :: (Monad m, HArrayIndexT a s) => (a -> a) -> MStateT s m () Source #
Modify a value in the state (strict version)
mWith :: forall s a m b. Monad m => a -> MStateT (a ': s) m b -> MStateT s m b Source #
Execute an action with an extended state
evalMState :: MState s a -> HArray s -> a Source #
Evaluate MState
liftMStateT :: Monad m => MStateT xs m x -> HArrayT m xs (x ': xs) Source #
Lift a multi-state into an HArray transformer