0 | module Control.Monad.State.Tuple
2 | import Control.Monad.State.State
3 | import public Control.Monad.State.Interface
4 | import Control.Monad.RWS.CPS
9 | Monad m => MonadState l (StateT (l, r) m) where
10 | get = Builtin.fst <$> get
11 | put = modify . mapFst . const
13 | wrapFst : Functor m => StateT r m a -> StateT (l, r) m a
14 | wrapFst act = ST $
\(x, y) => mapFst (x,) <$> runStateT y act
17 | MonadState s (StateT r m) => Monad m => MonadState s (StateT (l, r) m) where
22 | Monad m => MonadState sl (RWST r w (sl, sr) m) where
23 | get = Builtin.fst <$> get
24 | put = modify . mapFst . const
26 | wrapFst' : Functor m => RWST r w sr m a -> RWST r w (sl, sr) m a
27 | wrapFst' $
MkRWST rwst = MkRWST $
\r, (sx, sy), w => rwst r sy w <&> \(a, sy', w') => (a, (sx, sy'), w')
30 | MonadState s (RWST r w sr m) => Monad m => MonadState s (RWST r w (sl, sr) m) where
32 | put = wrapFst' . put