module Control.Monad.Ether.Implicit.Reader
(
MonadReader
, local
, ask
, reader
, asks
, Reader
, runReader
, ReaderT
, readerT
, runReaderT
) where
import Data.Proxy
import qualified Control.Monad.Ether.Reader as Explicit
type ReaderT r = Explicit.ReaderT r r
type Reader r = Explicit.Reader r r
readerT :: (r -> m a) -> ReaderT r m a
readerT = Explicit.readerT Proxy
runReaderT :: ReaderT r m a -> r -> m a
runReaderT = Explicit.runReaderT Proxy
runReader :: Reader r a -> r -> a
runReader = Explicit.runReader Proxy
type MonadReader r = Explicit.MonadReader r r
local :: forall r m a . MonadReader r m => (r -> r) -> m a -> m a
local = Explicit.local (Proxy :: Proxy r)
ask :: forall r m . MonadReader r m => m r
ask = Explicit.ask (Proxy :: Proxy r)
reader :: forall r m a . MonadReader r m => (r -> a) -> m a
reader = Explicit.reader (Proxy :: Proxy r)
asks :: forall r m a . MonadReader r m => (r -> a) -> m a
asks = Explicit.asks (Proxy :: Proxy r)