module Control.Monad.AWS.Class ( MonadAWS (..) ) where import Amazonka.Prelude import Amazonka.Core (AWSRequest, AWSResponse, Error) import qualified Amazonka.Waiter as Waiter import Data.Typeable (Typeable) -- | Typeclass for making AWS requests via "Amazonka" -- -- For out-of-the-box transformers, see: -- -- - "Control.Monad.AWS.EnvT" -- - "Control.Monad.AWS.MockT" -- -- For @DerivingVia@ usage, see: -- -- - "Control.Monad.AWS.ViaReader" -- - "Control.Monad.AWS.ViaMock" class Monad m => MonadAWS m where sendEither :: (AWSRequest a, Typeable a, Typeable (AWSResponse a)) => a -> m (Either Error (AWSResponse a)) awaitEither :: (AWSRequest a, Typeable a) => Waiter.Wait a -> a -> m (Either Error Waiter.Accept)