on 209f615 help sign in
35 lines 785 B history raw
1-- | The 'Reader' as an effect.
2module Effectful.Reader
3 ( Reader
4 , runReader
5 , ask
6 , local
7 , reader
8 , asks
9 ) where
11import Effectful.Internal.Effect
12import Effectful.Internal.Monad
14-- | Provide access to a read only value of type @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
26local :: Reader r :> es => (r -> r) -> Eff es a -> Eff es a
27local f = localEffect $ \(IdE (Reader r)) -> IdE (Reader (f r))
29reader :: Reader r :> es => (r -> a) -> Eff es a
30reader f = do
31 IdE (Reader r) <- getEffect
32 pure $ f r
34asks :: Reader r :> es => (r -> a) -> Eff es a
35asks = reader