Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Strict read-only state
Documentation
The Reader monad
The request for a value of type e from the current environment
This can be expressed as a GADT because the type of values
returned in response to a (Reader e a) request is not any a;
we expect in reply the value of type e
, the value from the
environment. So, the return type is restricted: 'a ~ e'
data Reader e v where
Reader :: Reader e e
One can also define this as data Reader e v = (e ~ v) => Reader and even without GADTs, using explicit coercion as is done here.
In the latter case, when we make the request, we make it as Reader id. So, strictly speaking, GADTs are not really necessary.
Reader (e -> v) |
ask :: Member (Reader e) r => Eff r e Source #
Get the current value from a Reader. The signature is inferred (when using NoMonomorphismRestriction).
local :: forall e a r. Member (Reader e) r => (e -> e) -> Eff r a -> Eff r a Source #
Locally rebind the value in the dynamic environment This function is like a relay; it is both an admin for Reader requests, and a requestor of them