on 8a63c15 help sign in
30 lines 701 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.Has
12import Effectful.Internal.Monad
14-- | Provide access to a read only value of type @r@.
15newtype Reader r = Reader { unReader :: r }
17runReader :: r -> Eff (Reader r : es) a -> Eff es a
18runReader r = evalEffect (Reader r)
20ask :: Reader r :> es => Eff es r
21ask = unReader <$> getEffect
23local :: Reader r :> es => (r -> r) -> Eff es a -> Eff es a
24local f = localEffect (Reader . f . unReader)
26reader :: Reader r :> es => (r -> a) -> Eff es a
27reader f = f . unReader <$> getEffect
29asks :: Reader r :> es => (r -> a) -> Eff es a
30asks = reader