on 043bffe help sign in
32 lines 734 B history raw
1-- | The 'Reader' effect.
2module Effectful.Reader
3 ( Reader
4 , runReader
5 , ask
6 , asks
7 , local
8 ) where
10import Effectful.Internal.Effect
11import Effectful.Internal.Monad
13-- | Provide access to a strict (WHNF), thread local, read only value of type
14-- @r@.
15newtype Reader r :: Effect where
16 Reader :: r -> Reader r m a
18runReader :: r -> Eff (Reader r : es) a -> Eff es a
19runReader r = evalEffect (IdE (Reader r))
21ask :: Reader r :> es => Eff es r
22ask = do
23 IdE (Reader r) <- getEffect
24 pure r
26asks :: Reader r :> es => (r -> a) -> Eff es a
27asks f = do
28 IdE (Reader r) <- getEffect
29 pure $ f r
31local :: Reader r :> es => (r -> r) -> Eff es a -> Eff es a
32local f = localEffect $ \(IdE (Reader r)) -> IdE (Reader (f r))