Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
A poor man's extensible reader effects via nested ReaderT
.
Synopsis
- type family MultiReaderT (xs :: [Type]) (m :: Type -> Type) :: Type -> Type where ...
- type MonadMultiReaderT m base = (m ~ MultiReaderT (MultiReaderIso m) base, MonadMultiReaderMap (MultiReaderIso m))
- type ChangeMultiReaderBase m newBase = MultiReaderT (MultiReaderIso m) newBase
- asks' :: forall m r (a :: Type) n. MultiReader n r m => (r -> a) -> m a
- ask' :: MultiReader n r m => m r
- local' :: MultiReader n r m => (r -> r) -> m a -> m a
- mapMultiReaderT :: (MonadMultiReaderMap xs, m' ~ MultiReaderT xs m, n' ~ MultiReaderT xs n, xs ~ MultiReaderIso m') => (m a -> n b) -> m' a -> n' b
Documentation
type family MultiReaderT (xs :: [Type]) (m :: Type -> Type) :: Type -> Type where ... Source #
Convenience type family to build a stack of multiple ReaderT
.
MultiReaderT (x ': xs) m = ReaderT x (MultiReaderT xs m) | |
MultiReaderT '[] m = m |
type MonadMultiReaderT m base = (m ~ MultiReaderT (MultiReaderIso m) base, MonadMultiReaderMap (MultiReaderIso m)) Source #
Convenience constraint synonym.
Required for asks
`, ask
`, local
` and mapMultiReaderT
type ChangeMultiReaderBase m newBase = MultiReaderT (MultiReaderIso m) newBase Source #
Replace the base monad for a nested ReaderT
stack.
asks' :: forall m r (a :: Type) n. MultiReader n r m => (r -> a) -> m a Source #
Unconstrained version of asks
. asks' f = fmap f ask'
.
ask' :: MultiReader n r m => m r Source #
Unconstrained version of ask
. Lifts the appropriate number of times
depending on the type r
.
local' :: MultiReader n r m => (r -> r) -> m a -> m a Source #
Unconstrained version of local
. Maps the appropriate number of times
depending on the type r
.
mapMultiReaderT :: (MonadMultiReaderMap xs, m' ~ MultiReaderT xs m, n' ~ MultiReaderT xs n, xs ~ MultiReaderIso m') => (m a -> n b) -> m' a -> n' b Source #
mapReaderT
, only it maps over the whole nested ReaderT
stack, and not
just one level.