{-# LANGUAGE DerivingVia #-}
module Control.Monad.AWS.EnvT
( EnvT
, runEnvT
)
where
import Prelude
import Control.Monad.Logger (MonadLogger, MonadLoggerIO)
import Control.Monad.AWS.Class
import Control.Monad.AWS.ViaReader
import Control.Monad.Except (MonadError)
import Control.Monad.Reader
import Control.Monad.State (MonadState)
import Control.Monad.Trans.Resource
import Control.Monad.Writer (MonadWriter)
newtype EnvT m a = EnvT
{ forall (m :: * -> *) a. EnvT m a -> ReaderT Env (ResourceT m) a
unEnvT :: ReaderT Env (ResourceT m) a
}
deriving newtype
( (forall a b. (a -> b) -> EnvT m a -> EnvT m b)
-> (forall a b. a -> EnvT m b -> EnvT m a) -> Functor (EnvT m)
forall a b. a -> EnvT m b -> EnvT m a
forall a b. (a -> b) -> EnvT m a -> EnvT m b
forall (m :: * -> *) a b. Functor m => a -> EnvT m b -> EnvT m a
forall (m :: * -> *) a b.
Functor m =>
(a -> b) -> EnvT m a -> EnvT m b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall (m :: * -> *) a b.
Functor m =>
(a -> b) -> EnvT m a -> EnvT m b
fmap :: forall a b. (a -> b) -> EnvT m a -> EnvT m b
$c<$ :: forall (m :: * -> *) a b. Functor m => a -> EnvT m b -> EnvT m a
<$ :: forall a b. a -> EnvT m b -> EnvT m a
Functor
, Functor (EnvT m)
Functor (EnvT m) =>
(forall a. a -> EnvT m a)
-> (forall a b. EnvT m (a -> b) -> EnvT m a -> EnvT m b)
-> (forall a b c.
(a -> b -> c) -> EnvT m a -> EnvT m b -> EnvT m c)
-> (forall a b. EnvT m a -> EnvT m b -> EnvT m b)
-> (forall a b. EnvT m a -> EnvT m b -> EnvT m a)
-> Applicative (EnvT m)
forall a. a -> EnvT m a
forall a b. EnvT m a -> EnvT m b -> EnvT m a
forall a b. EnvT m a -> EnvT m b -> EnvT m b
forall a b. EnvT m (a -> b) -> EnvT m a -> EnvT m b
forall a b c. (a -> b -> c) -> EnvT m a -> EnvT m b -> EnvT m c
forall (f :: * -> *).
Functor f =>
(forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
forall (m :: * -> *). Applicative m => Functor (EnvT m)
forall (m :: * -> *) a. Applicative m => a -> EnvT m a
forall (m :: * -> *) a b.
Applicative m =>
EnvT m a -> EnvT m b -> EnvT m a
forall (m :: * -> *) a b.
Applicative m =>
EnvT m a -> EnvT m b -> EnvT m b
forall (m :: * -> *) a b.
Applicative m =>
EnvT m (a -> b) -> EnvT m a -> EnvT m b
forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> c) -> EnvT m a -> EnvT m b -> EnvT m c
$cpure :: forall (m :: * -> *) a. Applicative m => a -> EnvT m a
pure :: forall a. a -> EnvT m a
$c<*> :: forall (m :: * -> *) a b.
Applicative m =>
EnvT m (a -> b) -> EnvT m a -> EnvT m b
<*> :: forall a b. EnvT m (a -> b) -> EnvT m a -> EnvT m b
$cliftA2 :: forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> c) -> EnvT m a -> EnvT m b -> EnvT m c
liftA2 :: forall a b c. (a -> b -> c) -> EnvT m a -> EnvT m b -> EnvT m c
$c*> :: forall (m :: * -> *) a b.
Applicative m =>
EnvT m a -> EnvT m b -> EnvT m b
*> :: forall a b. EnvT m a -> EnvT m b -> EnvT m b
$c<* :: forall (m :: * -> *) a b.
Applicative m =>
EnvT m a -> EnvT m b -> EnvT m a
<* :: forall a b. EnvT m a -> EnvT m b -> EnvT m a
Applicative
, Applicative (EnvT m)
Applicative (EnvT m) =>
(forall a b. EnvT m a -> (a -> EnvT m b) -> EnvT m b)
-> (forall a b. EnvT m a -> EnvT m b -> EnvT m b)
-> (forall a. a -> EnvT m a)
-> Monad (EnvT m)
forall a. a -> EnvT m a
forall a b. EnvT m a -> EnvT m b -> EnvT m b
forall a b. EnvT m a -> (a -> EnvT m b) -> EnvT m b
forall (m :: * -> *). Monad m => Applicative (EnvT m)
forall (m :: * -> *) a. Monad m => a -> EnvT m a
forall (m :: * -> *) a b.
Monad m =>
EnvT m a -> EnvT m b -> EnvT m b
forall (m :: * -> *) a b.
Monad m =>
EnvT m a -> (a -> EnvT m b) -> EnvT m b
forall (m :: * -> *).
Applicative m =>
(forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
$c>>= :: forall (m :: * -> *) a b.
Monad m =>
EnvT m a -> (a -> EnvT m b) -> EnvT m b
>>= :: forall a b. EnvT m a -> (a -> EnvT m b) -> EnvT m b
$c>> :: forall (m :: * -> *) a b.
Monad m =>
EnvT m a -> EnvT m b -> EnvT m b
>> :: forall a b. EnvT m a -> EnvT m b -> EnvT m b
$creturn :: forall (m :: * -> *) a. Monad m => a -> EnvT m a
return :: forall a. a -> EnvT m a
Monad
, Monad (EnvT m)
Monad (EnvT m) => (forall a. IO a -> EnvT m a) -> MonadIO (EnvT m)
forall a. IO a -> EnvT m a
forall (m :: * -> *).
Monad m =>
(forall a. IO a -> m a) -> MonadIO m
forall (m :: * -> *). MonadIO m => Monad (EnvT m)
forall (m :: * -> *) a. MonadIO m => IO a -> EnvT m a
$cliftIO :: forall (m :: * -> *) a. MonadIO m => IO a -> EnvT m a
liftIO :: forall a. IO a -> EnvT m a
MonadIO
, MonadIO (EnvT m)
MonadIO (EnvT m) =>
(forall b. ((forall a. EnvT m a -> IO a) -> IO b) -> EnvT m b)
-> MonadUnliftIO (EnvT m)
forall b. ((forall a. EnvT m a -> IO a) -> IO b) -> EnvT m b
forall (m :: * -> *).
MonadIO m =>
(forall b. ((forall a. m a -> IO a) -> IO b) -> m b)
-> MonadUnliftIO m
forall (m :: * -> *). MonadUnliftIO m => MonadIO (EnvT m)
forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. EnvT m a -> IO a) -> IO b) -> EnvT m b
$cwithRunInIO :: forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. EnvT m a -> IO a) -> IO b) -> EnvT m b
withRunInIO :: forall b. ((forall a. EnvT m a -> IO a) -> IO b) -> EnvT m b
MonadUnliftIO
, MonadIO (EnvT m)
MonadIO (EnvT m) =>
(forall a. ResourceT IO a -> EnvT m a) -> MonadResource (EnvT m)
forall a. ResourceT IO a -> EnvT m a
forall (m :: * -> *). MonadIO m => MonadIO (EnvT m)
forall (m :: * -> *).
MonadIO m =>
(forall a. ResourceT IO a -> m a) -> MonadResource m
forall (m :: * -> *) a. MonadIO m => ResourceT IO a -> EnvT m a
$cliftResourceT :: forall (m :: * -> *) a. MonadIO m => ResourceT IO a -> EnvT m a
liftResourceT :: forall a. ResourceT IO a -> EnvT m a
MonadResource
, MonadReader Env
, MonadError e
, MonadState s
, MonadWriter w
, Monad (EnvT m)
Monad (EnvT m) =>
(forall msg.
ToLogStr msg =>
Loc -> LogSource -> LogLevel -> msg -> EnvT m ())
-> MonadLogger (EnvT m)
forall msg.
ToLogStr msg =>
Loc -> LogSource -> LogLevel -> msg -> EnvT m ()
forall (m :: * -> *).
Monad m =>
(forall msg.
ToLogStr msg =>
Loc -> LogSource -> LogLevel -> msg -> m ())
-> MonadLogger m
forall (m :: * -> *). MonadLogger m => Monad (EnvT m)
forall (m :: * -> *) msg.
(MonadLogger m, ToLogStr msg) =>
Loc -> LogSource -> LogLevel -> msg -> EnvT m ()
$cmonadLoggerLog :: forall (m :: * -> *) msg.
(MonadLogger m, ToLogStr msg) =>
Loc -> LogSource -> LogLevel -> msg -> EnvT m ()
monadLoggerLog :: forall msg.
ToLogStr msg =>
Loc -> LogSource -> LogLevel -> msg -> EnvT m ()
MonadLogger
, MonadIO (EnvT m)
MonadLogger (EnvT m)
EnvT m (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
(MonadLogger (EnvT m), MonadIO (EnvT m)) =>
EnvT m (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
-> MonadLoggerIO (EnvT m)
forall (m :: * -> *). MonadLoggerIO m => MonadIO (EnvT m)
forall (m :: * -> *). MonadLoggerIO m => MonadLogger (EnvT m)
forall (m :: * -> *).
MonadLoggerIO m =>
EnvT m (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
forall (m :: * -> *).
(MonadLogger m, MonadIO m) =>
m (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
-> MonadLoggerIO m
$caskLoggerIO :: forall (m :: * -> *).
MonadLoggerIO m =>
EnvT m (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
askLoggerIO :: EnvT m (Loc -> LogSource -> LogLevel -> LogStr -> IO ())
MonadLoggerIO
)
deriving (Monad (EnvT m)
Monad (EnvT m) =>
(forall a.
(AWSRequest a, Typeable a, Typeable (AWSResponse a)) =>
a -> EnvT m (Either Error (AWSResponse a)))
-> (forall a.
(AWSRequest a, Typeable a) =>
Wait a -> a -> EnvT m (Either Error Accept))
-> (forall a. (AuthEnv -> EnvT m a) -> EnvT m a)
-> (forall a. (Env -> Env) -> EnvT m a -> EnvT m a)
-> MonadAWS (EnvT m)
forall a.
(AWSRequest a, Typeable a, Typeable (AWSResponse a)) =>
a -> EnvT m (Either Error (AWSResponse a))
forall a.
(AWSRequest a, Typeable a) =>
Wait a -> a -> EnvT m (Either Error Accept)
forall a. (AuthEnv -> EnvT m a) -> EnvT m a
forall a. (Env -> Env) -> EnvT m a -> EnvT m a
forall (m :: * -> *).
Monad m =>
(forall a.
(AWSRequest a, Typeable a, Typeable (AWSResponse a)) =>
a -> m (Either Error (AWSResponse a)))
-> (forall a.
(AWSRequest a, Typeable a) =>
Wait a -> a -> m (Either Error Accept))
-> (forall a. (AuthEnv -> m a) -> m a)
-> (forall a. (Env -> Env) -> m a -> m a)
-> MonadAWS m
forall (m :: * -> *). MonadIO m => Monad (EnvT m)
forall (m :: * -> *) a.
(MonadIO m, AWSRequest a, Typeable a, Typeable (AWSResponse a)) =>
a -> EnvT m (Either Error (AWSResponse a))
forall (m :: * -> *) a.
(MonadIO m, AWSRequest a, Typeable a) =>
Wait a -> a -> EnvT m (Either Error Accept)
forall (m :: * -> *) a.
MonadIO m =>
(AuthEnv -> EnvT m a) -> EnvT m a
forall (m :: * -> *) a.
MonadIO m =>
(Env -> Env) -> EnvT m a -> EnvT m a
$csendEither :: forall (m :: * -> *) a.
(MonadIO m, AWSRequest a, Typeable a, Typeable (AWSResponse a)) =>
a -> EnvT m (Either Error (AWSResponse a))
sendEither :: forall a.
(AWSRequest a, Typeable a, Typeable (AWSResponse a)) =>
a -> EnvT m (Either Error (AWSResponse a))
$cawaitEither :: forall (m :: * -> *) a.
(MonadIO m, AWSRequest a, Typeable a) =>
Wait a -> a -> EnvT m (Either Error Accept)
awaitEither :: forall a.
(AWSRequest a, Typeable a) =>
Wait a -> a -> EnvT m (Either Error Accept)
$cwithAuth :: forall (m :: * -> *) a.
MonadIO m =>
(AuthEnv -> EnvT m a) -> EnvT m a
withAuth :: forall a. (AuthEnv -> EnvT m a) -> EnvT m a
$clocalEnv :: forall (m :: * -> *) a.
MonadIO m =>
(Env -> Env) -> EnvT m a -> EnvT m a
localEnv :: forall a. (Env -> Env) -> EnvT m a -> EnvT m a
MonadAWS) via (ReaderAWS (EnvT m))
instance MonadTrans EnvT where
lift :: forall (m :: * -> *) a. Monad m => m a -> EnvT m a
lift = ReaderT Env (ResourceT m) a -> EnvT m a
forall (m :: * -> *) a. ReaderT Env (ResourceT m) a -> EnvT m a
EnvT (ReaderT Env (ResourceT m) a -> EnvT m a)
-> (m a -> ReaderT Env (ResourceT m) a) -> m a -> EnvT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ResourceT m a -> ReaderT Env (ResourceT m) a
forall (m :: * -> *) a. Monad m => m a -> ReaderT Env m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (ResourceT m a -> ReaderT Env (ResourceT m) a)
-> (m a -> ResourceT m a) -> m a -> ReaderT Env (ResourceT m) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m a -> ResourceT m a
forall (m :: * -> *) a. Monad m => m a -> ResourceT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift
runEnvT :: MonadUnliftIO m => EnvT m a -> Env -> m a
runEnvT :: forall (m :: * -> *) a. MonadUnliftIO m => EnvT m a -> Env -> m a
runEnvT EnvT m a
f = ResourceT m a -> m a
forall (m :: * -> *) a. MonadUnliftIO m => ResourceT m a -> m a
runResourceT (ResourceT m a -> m a) -> (Env -> ResourceT m a) -> Env -> m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ReaderT Env (ResourceT m) a -> Env -> ResourceT m a
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT (EnvT m a -> ReaderT Env (ResourceT m) a
forall (m :: * -> *) a. EnvT m a -> ReaderT Env (ResourceT m) a
unEnvT EnvT m a
f)