| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Control.Effect.Type.ReaderPrim
Contents
Synopsis
- data ReaderPrim i m a where
- ReaderPrimAsk :: ReaderPrim i m i
- ReaderPrimLocal :: (i -> i) -> m a -> ReaderPrim i m a
- threadReaderPrim :: forall i t m a. (MonadTrans t, Monad m) => ((forall x. ReaderPrim i m x -> m x) -> (i -> i) -> t m a -> t m a) -> (forall x. ReaderPrim i m x -> m x) -> ReaderPrim i (t m) a -> t m a
- threadReaderPrimViaClass :: forall i t m a. Monad m => (RepresentationalT t, MonadTrans t, forall b. MonadReader i b => MonadReader i (t b)) => (forall x. ReaderPrim i m x -> m x) -> ReaderPrim i (t m) a -> t m a
- threadReaderPrimViaRegional :: forall i t m a. (Monad m, MonadTrans t, ThreadsEff t (Regional ())) => (forall x. ReaderPrim i m x -> m x) -> ReaderPrim i (t m) a -> t m a
Effects
data ReaderPrim i m a where Source #
A primitive effect that may be used for
interpreters of connected Ask and
Local effects.
This combines Ask and Local,
which is relevant since certain monad transformers may only lift
local if they also have access to
ask.
ReaderPrim is only used as a primitive effect.
If you define a Carrier that relies on a novel
non-trivial monad transformer t, then you need to make
a instance (if possible).
ThreadsEff t (ReaderPrim i)threadReaderPrimViaClass and threadReaderPrimViaRegional
can help you with that.
The following threading constraints accept ReaderPrim:
Constructors
| ReaderPrimAsk :: ReaderPrim i m i | |
| ReaderPrimLocal :: (i -> i) -> m a -> ReaderPrim i m a |
Instances
Threading utilities
threadReaderPrim :: forall i t m a. (MonadTrans t, Monad m) => ((forall x. ReaderPrim i m x -> m x) -> (i -> i) -> t m a -> t m a) -> (forall x. ReaderPrim i m x -> m x) -> ReaderPrim i (t m) a -> t m a Source #
Construct a valid definition of threadEff for a
instance
only be specifying how ThreadsEff t (ReaderPrim w)ReaderPrimLocal should be lifted.
This uses lift to lift ReaderPrimAsk.
threadReaderPrimViaClass :: forall i t m a. Monad m => (RepresentationalT t, MonadTrans t, forall b. MonadReader i b => MonadReader i (t b)) => (forall x. ReaderPrim i m x -> m x) -> ReaderPrim i (t m) a -> t m a Source #
A valid definition of threadEff for a
instance, given that ThreadsEff t (ReaderPrim i)t lifts .MonadReader i
threadReaderPrimViaRegional :: forall i t m a. (Monad m, MonadTrans t, ThreadsEff t (Regional ())) => (forall x. ReaderPrim i m x -> m x) -> ReaderPrim i (t m) a -> t m a Source #
A valid definition of threadEff for a
instance, given that ThreadsEff t (ReaderPrim i)t threads for any Regional ss.