License | BSD-style (see the file LICENSE) |
---|---|
Maintainer | ocean0yohsuke@gmail.com |
Stability | experimental |
Portability | --- |
Safe Haskell | Safe |
Language | Haskell2010 |
This module is just a concise mimic for Reader Monad in mtl(monad-transformer-library).
The qualifier "concise" means that this module doesn't make no attempt to transform functions of any kind of Monad automatically.
So when making some new data type of ReaderT, you have to manually define involved Monad instances,
for example MonadError
,
by making use of the transformation functions such as trans
, trans2
, etc.
Admittedly it is tedious though, you can deeply understand monad-transformation mechanism instead.
- class Monad m => MonadReader r m | m -> r where
- asks :: MonadReader r m => (r -> a) -> m a
- newtype Reader r a = Reader {
- runReader :: r -> a
- newtype ReaderT r m a = ReaderT {
- runReaderT :: r -> m a
- mapReaderT :: (m a -> n b) -> ReaderT r m a -> ReaderT r n b
- liftCatch :: Catch e m a -> Catch e (ReaderT r m) a
- newtype ReaderT2 r m1 m2 a = ReaderT2 {
- runReaderT2 :: r -> m1 (m2 a)
- mapReaderT2 :: (m1 (m2 a) -> n1 (n2 b)) -> ReaderT2 r m1 m2 a -> ReaderT2 r n1 n2 b
- newtype ReaderT3 r m1 m2 m3 a = ReaderT3 {
- runReaderT3 :: r -> m1 (m2 (m3 a))
- mapReaderT3 :: (m1 (m2 (m3 a)) -> n1 (n2 (n3 b))) -> ReaderT3 r m1 m2 m3 a -> ReaderT3 r n1 n2 n3 b
Documentation
class Monad m => MonadReader r m | m -> r where
See examples in Control.Monad.Reader.
Note, the partially applied function type (->) r
is a simple reader monad.
See the instance
declaration below.
ask :: m r
Retrieves the monad environment.
:: (r -> r) | The function to modify the environment. |
-> m a |
|
-> m a |
Executes a computation in a modified environment.
:: (r -> a) | The selector function to apply to the environment. |
-> m a |
Retrieves a function of the current environment.
asks :: MonadReader r m => (r -> a) -> m a Source
Level-0
Level-1
ReaderT | |
|
mapReaderT :: (m a -> n b) -> ReaderT r m a -> ReaderT r n b Source
Level-2
newtype ReaderT2 r m1 m2 a Source
ReaderT2 | |
|
(Monad m1, Monad2 m2) => MonadReader r (ReaderT2 r m1 m2) Source | |
MonadTrans2 (ReaderT2 r) Source | |
(Monad m1, Monad2 m2) => Monad (ReaderT2 r m1 m2) Source | |
(Functor m1, Functor m2) => Functor (ReaderT2 r m1 m2) Source | |
(Monad m1, Monad2 m2) => Applicative (ReaderT2 s m1 m2) Source | |
(MonadIO m1, Monad m1, Monad2 m2) => MonadIO (ReaderT2 r m1 m2) Source |
mapReaderT2 :: (m1 (m2 a) -> n1 (n2 b)) -> ReaderT2 r m1 m2 a -> ReaderT2 r n1 n2 b Source
Level-3
newtype ReaderT3 r m1 m2 m3 a Source
ReaderT3 | |
|
(Monad m1, Monad2 m2, Monad3 m3) => MonadReader r (ReaderT3 r m1 m2 m3) Source | |
MonadTrans3 (ReaderT3 r) Source | |
(Monad m1, Monad2 m2, Monad3 m3) => Monad (ReaderT3 r m1 m2 m3) Source | |
(Functor m1, Functor m2, Functor m3) => Functor (ReaderT3 r m1 m2 m3) Source | |
(Monad m1, Monad2 m2, Monad3 m3) => Applicative (ReaderT3 s m1 m2 m3) Source | |
(MonadIO m1, Monad m1, Monad2 m2, Monad3 m3) => MonadIO (ReaderT3 r m1 m2 m3) Source |
mapReaderT3 :: (m1 (m2 (m3 a)) -> n1 (n2 (n3 b))) -> ReaderT3 r m1 m2 m3 a -> ReaderT3 r n1 n2 n3 b Source