{-# LANGUAGE AllowAmbiguousTypes #-}
module Data.Effect.Reader where
data Ask r (a :: Type) where
Ask :: Ask r r
data Local r f (a :: Type) where
Local :: (r -> r) -> f a -> Local r f a
makeEffect [''Ask] [''Local]
asks :: (Ask r <: f, Functor f) => (r -> a) -> f a
asks :: forall r (f :: * -> *) a.
(Ask r <: f, Functor f) =>
(r -> a) -> f a
asks r -> a
f = r -> a
f (r -> a) -> f r -> f a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> f r
forall r (f :: * -> *). SendFOE (Ask r) f => f r
ask