| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Control.Monad.Trans.MultiReader.Strict
Description
The multi-valued version of mtl's Reader / ReaderT
Synopsis
- newtype MultiReaderT x m a = MultiReaderT {
- runMultiReaderTRaw :: StateT (HList x) m a
- type MultiReaderTNull = MultiReaderT '[]
- type MultiReader x = MultiReaderT x Identity
- class Monad m => MonadMultiReader a m where
- mAsk :: m a
- class Monad m => MonadMultiGet a m where
- mGet :: m a
- runMultiReaderT :: Monad m => HList r -> MultiReaderT r m a -> m a
- runMultiReaderT_ :: Functor m => HList r -> MultiReaderT r m a -> m ()
- runMultiReaderTNil :: Monad m => MultiReaderT '[] m a -> m a
- runMultiReaderTNil_ :: Functor m => MultiReaderT '[] m a -> m ()
- withMultiReader :: Monad m => r -> MultiReaderT (r ': rs) m a -> MultiReaderT rs m a
- withMultiReader_ :: (Functor m, Monad m) => r -> MultiReaderT (r ': rs) m a -> MultiReaderT rs m ()
- withMultiReaders :: Monad m => HList r1 -> MultiReaderT (Append r1 r2) m a -> MultiReaderT r2 m a
- withMultiReaders_ :: (Functor m, Monad m) => HList r1 -> MultiReaderT (Append r1 r2) m a -> MultiReaderT r2 m ()
- withoutMultiReader :: Monad m => MultiReaderT rs m a -> MultiReaderT (r ': rs) m a
- inflateReader :: (Monad m, ContainsType r rs) => ReaderT r m a -> MultiReaderT rs m a
- mapMultiReaderT :: (m (a, HList w) -> m' (a', HList w)) -> MultiReaderT w m a -> MultiReaderT w m' a'
- mGetRaw :: Monad m => MultiReaderT a m (HList a)
- mPutRaw :: Monad m => HList s -> MultiReaderT s m ()
MultiReaderT
newtype MultiReaderT x m a Source #
A Reader transformer monad patameterized by:
- x - The list of types constituting the environment / input (to be read),
- m - The inner monad.
MultiReaderT corresponds to mtl's ReaderT, but can contain
a heterogenous list of types.
This heterogenous list is represented using Types.Data.List, i.e:
'[]- The empty list,a ': b- A list whereais an arbitrary type andbis the rest list.
For example,
MultiReaderT '[Int, Bool] :: (* -> *) -> (* -> *)
is a Reader transformer containing the types [Int, Bool].
Constructors
| MultiReaderT | |
Fields
| |
Instances
type MultiReaderTNull = MultiReaderT '[] Source #
A MultiReader transformer carrying an empty state.
type MultiReader x = MultiReaderT x Identity Source #
A reader monad parameterized by the list of types x of the environment / input to carry.
Similar to Reader r = ReaderT r Identity
MonadMultiReader class
class Monad m => MonadMultiReader a m where Source #
All methods must be defined.
The idea is: Any monad stack is instance of MonadMultiReader a, iff
the stack contains a MultiReaderT x with a element of x.
Instances
| (MonadTrans t, Monad (t m), MonadMultiReader a m) => MonadMultiReader a (t m) Source # | |
Defined in Control.Monad.Trans.MultiReader.Class | |
| (Monad m, ContainsType a c) => MonadMultiReader a (MultiReaderT c m) Source # | |
Defined in Control.Monad.Trans.MultiReader.Strict Methods mAsk :: MultiReaderT c m a Source # | |
| (Monad m, ContainsType a c) => MonadMultiReader a (MultiReaderT c m) Source # | |
Defined in Control.Monad.Trans.MultiReader.Lazy Methods mAsk :: MultiReaderT c m a Source # | |
| (Monad m, ContainsType a r) => MonadMultiReader a (MultiRWST r w s m) Source # | |
Defined in Control.Monad.Trans.MultiRWS.Strict | |
| (Monad m, ContainsType a r) => MonadMultiReader a (MultiRWST r w s m) Source # | |
Defined in Control.Monad.Trans.MultiRWS.Lazy | |
class Monad m => MonadMultiGet a m where Source #
In contrast to MonadMultiReader, MonadMultiGet is defined for State too, so it corresponds to read-access of any kind.
Note however that for MultiRWS, only the values from the state part can
be accessed via MonadMultiGet, due to limitations of the design of
MultiRWS and of the type system. This is issue is resolved in the
MultiGST type.
Instances
run-functions
runMultiReaderT :: Monad m => HList r -> MultiReaderT r m a -> m a Source #
runMultiReaderT_ :: Functor m => HList r -> MultiReaderT r m a -> m () Source #
runMultiReaderTNil :: Monad m => MultiReaderT '[] m a -> m a Source #
runMultiReaderTNil_ :: Functor m => MultiReaderT '[] m a -> m () Source #
with-functions (single reader)
withMultiReader :: Monad m => r -> MultiReaderT (r ': rs) m a -> MultiReaderT rs m a Source #
withMultiReader_ :: (Functor m, Monad m) => r -> MultiReaderT (r ': rs) m a -> MultiReaderT rs m () Source #
with-functions (multiple readers)
withMultiReaders :: Monad m => HList r1 -> MultiReaderT (Append r1 r2) m a -> MultiReaderT r2 m a Source #
withMultiReaders_ :: (Functor m, Monad m) => HList r1 -> MultiReaderT (Append r1 r2) m a -> MultiReaderT r2 m () Source #
without-function (single reader)
withoutMultiReader :: Monad m => MultiReaderT rs m a -> MultiReaderT (r ': rs) m a Source #
inflate-function (run ReaderT in MultiReaderT)
inflateReader :: (Monad m, ContainsType r rs) => ReaderT r m a -> MultiReaderT rs m a Source #
other functions
mapMultiReaderT :: (m (a, HList w) -> m' (a', HList w)) -> MultiReaderT w m a -> MultiReaderT w m' a' Source #
Map both the return value and the environment of a computation using the given function.
Note that there is a difference to mtl's ReaderT, where it is not possible to modify the environment.