0 | module Control.Monad.Reader.Interface
2 | import Control.Monad.Maybe
3 | import Control.Monad.Error.Either
4 | import Control.Monad.Reader.Reader
5 | import Control.Monad.State.State
6 | import Control.Monad.RWS.CPS
7 | import Control.Monad.Trans
8 | import Control.Monad.Writer.CPS
14 | interface Monad m => MonadReader stateType m | m where
19 | local : (stateType -> stateType) -> m a -> m a
24 | asks : MonadReader stateType m => (stateType -> a) -> m a
31 | public export %inline
32 | Monad m => MonadReader stateType (ReaderT stateType m) where
33 | ask = MkReaderT (\st => pure st)
35 | local f (MkReaderT action) = MkReaderT (action . f)
37 | public export %inline
38 | Monad m => MonadReader r (RWST r w s m) where
39 | ask = MkRWST $
\r,s,w => pure (r,s,w)
40 | local f m = MkRWST $
\r,s,w => unRWST m (f r) s w
42 | public export %inline
43 | MonadReader r m => MonadReader r (EitherT e m) where
45 | local = mapEitherT . local
47 | public export %inline
48 | MonadReader r m => MonadReader r (MaybeT m) where
50 | local = mapMaybeT . local
52 | public export %inline
53 | MonadReader r m => MonadReader r (StateT s m) where
55 | local = mapStateT . local
57 | public export %inline
58 | MonadReader r m => MonadReader r (WriterT w m) where
66 | local f (MkWriterT m) = MkWriterT $
\w => local f (m w)