{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableInstances #-}
module Control.Monad.Reader.Class (
MonadReader(..),
asks,
) where
import Control.Monad.Trans.Cont as Cont
import Control.Monad.Trans.Except
import Control.Monad.Trans.Error
import Control.Monad.Trans.Identity
import Control.Monad.Trans.List
import Control.Monad.Trans.Maybe
import Control.Monad.Trans.Reader (ReaderT)
import qualified Control.Monad.Trans.Reader as ReaderT (ask, local, reader)
import qualified Control.Monad.Trans.RWS.Lazy as LazyRWS (RWST, ask, local, reader)
import qualified Control.Monad.Trans.RWS.Strict as StrictRWS (RWST, ask, local, reader)
import Control.Monad.Trans.State.Lazy as Lazy
import Control.Monad.Trans.State.Strict as Strict
import Control.Monad.Trans.Writer.Lazy as Lazy
import Control.Monad.Trans.Writer.Strict as Strict
import Control.Monad.Trans.Class (lift)
import Control.Monad
import Data.Monoid
class Monad m => MonadReader r m | m -> r where
#if __GLASGOW_HASKELL__ >= 707
{-# MINIMAL (ask | reader), local #-}
#endif
ask :: m r
ask = (r -> r) -> m r
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader r -> r
forall a. a -> a
id
local :: (r -> r)
-> m a
-> m a
reader :: (r -> a)
-> m a
reader r -> a
f = do
r
r <- m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
return (r -> a
f r
r)
asks :: MonadReader r m
=> (r -> a)
-> m a
asks :: (r -> a) -> m a
asks = (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance MonadReader r ((->) r) where
ask :: r -> r
ask = r -> r
forall a. a -> a
id
local :: (r -> r) -> (r -> a) -> r -> a
local r -> r
f r -> a
m = r -> a
m (r -> a) -> (r -> r) -> r -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. r -> r
f
reader :: (r -> a) -> r -> a
reader = (r -> a) -> r -> a
forall a. a -> a
id
instance Monad m => MonadReader r (ReaderT r m) where
ask :: ReaderT r m r
ask = ReaderT r m r
forall (m :: * -> *) r. Monad m => ReaderT r m r
Evidence bound by a type signature of the constraint type Monad m
ReaderT.ask
local :: (r -> r) -> ReaderT r m a -> ReaderT r m a
local = (r -> r) -> ReaderT r m a -> ReaderT r m a
forall r (m :: * -> *) a.
(r -> r) -> ReaderT r m a -> ReaderT r m a
ReaderT.local
reader :: (r -> a) -> ReaderT r m a
reader = (r -> a) -> ReaderT r m a
forall (m :: * -> *) r a. Monad m => (r -> a) -> ReaderT r m a
Evidence bound by a type signature of the constraint type Monad m
ReaderT.reader
instance (Monad m, Monoid w) => MonadReader r (LazyRWS.RWST r w s m) where
ask :: RWST r w s m r
ask = RWST r w s m r
forall w (m :: * -> *) r s. (Monoid w, Monad m) => RWST r w s m r
Evidence bound by a type signature of the constraint type Monad m
Evidence bound by a type signature of the constraint type Monoid w
LazyRWS.ask
local :: (r -> r) -> RWST r w s m a -> RWST r w s m a
local = (r -> r) -> RWST r w s m a -> RWST r w s m a
forall r w s (m :: * -> *) a.
(r -> r) -> RWST r w s m a -> RWST r w s m a
LazyRWS.local
reader :: (r -> a) -> RWST r w s m a
reader = (r -> a) -> RWST r w s m a
forall w (m :: * -> *) r a s.
(Monoid w, Monad m) =>
(r -> a) -> RWST r w s m a
Evidence bound by a type signature of the constraint type Monad m
Evidence bound by a type signature of the constraint type Monoid w
LazyRWS.reader
instance (Monad m, Monoid w) => MonadReader r (StrictRWS.RWST r w s m) where
ask :: RWST r w s m r
ask = RWST r w s m r
forall w (m :: * -> *) r s. (Monoid w, Monad m) => RWST r w s m r
Evidence bound by a type signature of the constraint type Monad m
Evidence bound by a type signature of the constraint type Monoid w
StrictRWS.ask
local :: (r -> r) -> RWST r w s m a -> RWST r w s m a
local = (r -> r) -> RWST r w s m a -> RWST r w s m a
forall r w s (m :: * -> *) a.
(r -> r) -> RWST r w s m a -> RWST r w s m a
StrictRWS.local
reader :: (r -> a) -> RWST r w s m a
reader = (r -> a) -> RWST r w s m a
forall w (m :: * -> *) r a s.
(Monoid w, Monad m) =>
(r -> a) -> RWST r w s m a
Evidence bound by a type signature of the constraint type Monad m
Evidence bound by a type signature of the constraint type Monoid w
StrictRWS.reader
instance MonadReader r' m => MonadReader r' (ContT r m) where
ask :: ContT r m r'
ask = m r' -> ContT r m r'
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r' m
External instance of the constraint type forall r. MonadTrans (ContT r)
lift m r'
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r' m
ask
local :: (r' -> r') -> ContT r m a -> ContT r m a
local = m r'
-> ((r' -> r') -> m r -> m r)
-> (r' -> r')
-> ContT r m a
-> ContT r m a
forall (m :: * -> *) r' r a.
Monad m =>
m r'
-> ((r' -> r') -> m r -> m r)
-> (r' -> r')
-> ContT r m a
-> ContT r m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r' m
Cont.liftLocal m r'
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r' m
ask (r' -> r') -> m r -> m r
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r' m
local
reader :: (r' -> a) -> ContT r m a
reader = m a -> ContT r m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r' m
External instance of the constraint type forall r. MonadTrans (ContT r)
lift (m a -> ContT r m a)
-> ((r' -> a) -> m a) -> (r' -> a) -> ContT r m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r' -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r' m
reader
instance (Error e, MonadReader r m) => MonadReader r (ErrorT e m) where
ask :: ErrorT e m r
ask = m r -> ErrorT e m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall e. MonadTrans (ErrorT e)
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> ErrorT e m a -> ErrorT e m a
local = (m (Either e a) -> m (Either e a)) -> ErrorT e m a -> ErrorT e m a
forall (m :: * -> *) e a (n :: * -> *) e' b.
(m (Either e a) -> n (Either e' b))
-> ErrorT e m a -> ErrorT e' n b
mapErrorT ((m (Either e a) -> m (Either e a))
-> ErrorT e m a -> ErrorT e m a)
-> ((r -> r) -> m (Either e a) -> m (Either e a))
-> (r -> r)
-> ErrorT e m a
-> ErrorT e m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m (Either e a) -> m (Either e a)
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> ErrorT e m a
reader = m a -> ErrorT e m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall e. MonadTrans (ErrorT e)
lift (m a -> ErrorT e m a)
-> ((r -> a) -> m a) -> (r -> a) -> ErrorT e m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance MonadReader r m => MonadReader r (ExceptT e m) where
ask :: ExceptT e m r
ask = m r -> ExceptT e m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall e. MonadTrans (ExceptT e)
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> ExceptT e m a -> ExceptT e m a
local = (m (Either e a) -> m (Either e a))
-> ExceptT e m a -> ExceptT e m a
forall (m :: * -> *) e a (n :: * -> *) e' b.
(m (Either e a) -> n (Either e' b))
-> ExceptT e m a -> ExceptT e' n b
mapExceptT ((m (Either e a) -> m (Either e a))
-> ExceptT e m a -> ExceptT e m a)
-> ((r -> r) -> m (Either e a) -> m (Either e a))
-> (r -> r)
-> ExceptT e m a
-> ExceptT e m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m (Either e a) -> m (Either e a)
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> ExceptT e m a
reader = m a -> ExceptT e m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall e. MonadTrans (ExceptT e)
lift (m a -> ExceptT e m a)
-> ((r -> a) -> m a) -> (r -> a) -> ExceptT e m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance MonadReader r m => MonadReader r (IdentityT m) where
ask :: IdentityT m r
ask = m r -> IdentityT m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type MonadTrans IdentityT
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> IdentityT m a -> IdentityT m a
local = (m a -> m a) -> IdentityT m a -> IdentityT m a
forall {k1} {k2} (m :: k1 -> *) (a :: k1) (n :: k2 -> *) (b :: k2).
(m a -> n b) -> IdentityT m a -> IdentityT n b
mapIdentityT ((m a -> m a) -> IdentityT m a -> IdentityT m a)
-> ((r -> r) -> m a -> m a)
-> (r -> r)
-> IdentityT m a
-> IdentityT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m a -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> IdentityT m a
reader = m a -> IdentityT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type MonadTrans IdentityT
lift (m a -> IdentityT m a)
-> ((r -> a) -> m a) -> (r -> a) -> IdentityT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance MonadReader r m => MonadReader r (ListT m) where
ask :: ListT m r
ask = m r -> ListT m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type MonadTrans ListT
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> ListT m a -> ListT m a
local = (m [a] -> m [a]) -> ListT m a -> ListT m a
forall (m :: * -> *) a (n :: * -> *) b.
(m [a] -> n [b]) -> ListT m a -> ListT n b
mapListT ((m [a] -> m [a]) -> ListT m a -> ListT m a)
-> ((r -> r) -> m [a] -> m [a])
-> (r -> r)
-> ListT m a
-> ListT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m [a] -> m [a]
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> ListT m a
reader = m a -> ListT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type MonadTrans ListT
lift (m a -> ListT m a) -> ((r -> a) -> m a) -> (r -> a) -> ListT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance MonadReader r m => MonadReader r (MaybeT m) where
ask :: MaybeT m r
ask = m r -> MaybeT m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type MonadTrans MaybeT
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> MaybeT m a -> MaybeT m a
local = (m (Maybe a) -> m (Maybe a)) -> MaybeT m a -> MaybeT m a
forall (m :: * -> *) a (n :: * -> *) b.
(m (Maybe a) -> n (Maybe b)) -> MaybeT m a -> MaybeT n b
mapMaybeT ((m (Maybe a) -> m (Maybe a)) -> MaybeT m a -> MaybeT m a)
-> ((r -> r) -> m (Maybe a) -> m (Maybe a))
-> (r -> r)
-> MaybeT m a
-> MaybeT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m (Maybe a) -> m (Maybe a)
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> MaybeT m a
reader = m a -> MaybeT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type MonadTrans MaybeT
lift (m a -> MaybeT m a) -> ((r -> a) -> m a) -> (r -> a) -> MaybeT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance MonadReader r m => MonadReader r (Lazy.StateT s m) where
ask :: StateT s m r
ask = m r -> StateT s m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall s. MonadTrans (StateT s)
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> StateT s m a -> StateT s m a
local = (m (a, s) -> m (a, s)) -> StateT s m a -> StateT s m a
forall (m :: * -> *) a s (n :: * -> *) b.
(m (a, s) -> n (b, s)) -> StateT s m a -> StateT s n b
Lazy.mapStateT ((m (a, s) -> m (a, s)) -> StateT s m a -> StateT s m a)
-> ((r -> r) -> m (a, s) -> m (a, s))
-> (r -> r)
-> StateT s m a
-> StateT s m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m (a, s) -> m (a, s)
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> StateT s m a
reader = m a -> StateT s m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall s. MonadTrans (StateT s)
lift (m a -> StateT s m a)
-> ((r -> a) -> m a) -> (r -> a) -> StateT s m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance MonadReader r m => MonadReader r (Strict.StateT s m) where
ask :: StateT s m r
ask = m r -> StateT s m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall s. MonadTrans (StateT s)
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> StateT s m a -> StateT s m a
local = (m (a, s) -> m (a, s)) -> StateT s m a -> StateT s m a
forall (m :: * -> *) a s (n :: * -> *) b.
(m (a, s) -> n (b, s)) -> StateT s m a -> StateT s n b
Strict.mapStateT ((m (a, s) -> m (a, s)) -> StateT s m a -> StateT s m a)
-> ((r -> r) -> m (a, s) -> m (a, s))
-> (r -> r)
-> StateT s m a
-> StateT s m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m (a, s) -> m (a, s)
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> StateT s m a
reader = m a -> StateT s m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall s. MonadTrans (StateT s)
lift (m a -> StateT s m a)
-> ((r -> a) -> m a) -> (r -> a) -> StateT s m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance (Monoid w, MonadReader r m) => MonadReader r (Lazy.WriterT w m) where
ask :: WriterT w m r
ask = m r -> WriterT w m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall w. Monoid w => MonadTrans (WriterT w)
Evidence bound by a type signature of the constraint type Monoid w
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> WriterT w m a -> WriterT w m a
local = (m (a, w) -> m (a, w)) -> WriterT w m a -> WriterT w m a
forall (m :: * -> *) a w (n :: * -> *) b w'.
(m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b
Lazy.mapWriterT ((m (a, w) -> m (a, w)) -> WriterT w m a -> WriterT w m a)
-> ((r -> r) -> m (a, w) -> m (a, w))
-> (r -> r)
-> WriterT w m a
-> WriterT w m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m (a, w) -> m (a, w)
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> WriterT w m a
reader = m a -> WriterT w m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall w. Monoid w => MonadTrans (WriterT w)
Evidence bound by a type signature of the constraint type Monoid w
lift (m a -> WriterT w m a)
-> ((r -> a) -> m a) -> (r -> a) -> WriterT w m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader
instance (Monoid w, MonadReader r m) => MonadReader r (Strict.WriterT w m) where
ask :: WriterT w m r
ask = m r -> WriterT w m r
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall w. Monoid w => MonadTrans (WriterT w)
Evidence bound by a type signature of the constraint type Monoid w
lift m r
forall r (m :: * -> *). MonadReader r m => m r
Evidence bound by a type signature of the constraint type MonadReader r m
ask
local :: (r -> r) -> WriterT w m a -> WriterT w m a
local = (m (a, w) -> m (a, w)) -> WriterT w m a -> WriterT w m a
forall (m :: * -> *) a w (n :: * -> *) b w'.
(m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b
Strict.mapWriterT ((m (a, w) -> m (a, w)) -> WriterT w m a -> WriterT w m a)
-> ((r -> r) -> m (a, w) -> m (a, w))
-> (r -> r)
-> WriterT w m a
-> WriterT w m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> r) -> m (a, w) -> m (a, w)
forall r (m :: * -> *) a. MonadReader r m => (r -> r) -> m a -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
local
reader :: (r -> a) -> WriterT w m a
reader = m a -> WriterT w m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
Evidence bound by a superclass of: MonadReader of the constraint type forall r (m :: * -> *). MonadReader r m => Monad m
Evidence bound by a type signature of the constraint type MonadReader r m
External instance of the constraint type forall w. Monoid w => MonadTrans (WriterT w)
Evidence bound by a type signature of the constraint type Monoid w
lift (m a -> WriterT w m a)
-> ((r -> a) -> m a) -> (r -> a) -> WriterT w m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (r -> a) -> m a
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
Evidence bound by a type signature of the constraint type MonadReader r m
reader