0 | module Control.Monad.Reader.Tuple
2 | import Control.Monad.Reader.Reader
3 | import public Control.Monad.Reader.Interface
4 | import Control.Monad.RWS.CPS
9 | Monad m => MonadReader l (ReaderT (l, r) m) where
10 | ask = Builtin.fst <$> ask
11 | local = local . mapFst
14 | MonadReader v (ReaderT r m) => Monad m => MonadReader v (ReaderT (l, r) m) where
15 | ask @{sub} = MkReaderT $
runReaderT' (ask @{sub}) . snd
16 | local @{sub} f act = MkReaderT $
\(x, y) => runReaderT y $
local @{sub} f $
MkReaderT $
runReaderT' act . (x,)
19 | Monad m => MonadReader rl (RWST (rl, rr) w s m) where
20 | ask = Builtin.fst <$> ask
21 | local = local . mapFst
24 | MonadReader v (RWST rr w s m) => Monad m => MonadReader v (RWST (rl, rr) w s m) where
25 | ask @{sub} = MkRWST $
unRWST (ask @{sub}) . snd
26 | local @{sub} f act = MkRWST $
\(x, y) => flip unRWST y $
local @{sub} f $
MkRWST $
unRWST act . (x,)