effectful-0.0.0.0: src/Effectful/Reader.hs
-- | The 'Reader' as an effect.
module Effectful.Reader
( Reader
, runReader
, ask
, local
, reader
, asks
) where
import Effectful.Internal.Has
import Effectful.Internal.Monad
-- | Provide access to a read only value of type @r@.
newtype Reader r = Reader { unReader :: r }
runReader :: r -> Eff (Reader r : es) a -> Eff es a
runReader r = evalEffect (Reader r)
ask :: Reader r :> es => Eff es r
ask = unReader <$> getEffect
local :: Reader r :> es => (r -> r) -> Eff es a -> Eff es a
local f = localEffect (Reader . f . unReader)
reader :: Reader r :> es => (r -> a) -> Eff es a
reader f = f . unReader <$> getEffect
asks :: Reader r :> es => (r -> a) -> Eff es a
asks = reader