amazonka-mtl-0.1.1.0: MTL-style type-class and deriving-via newtypes for Amazonka
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Monad.AWS.ViaReader

Description

DerivingVia machinery for adding Amazonka functionality to a reader-like transformer

This is useful when you have a ReaderT-IO-like stack implemented with an AppT wrapper to which you will add the MonadAWS instance:

newtype AppT m a = AppT
  -- ...
  deriving MonadAWS via (ReaderAWS (AppT m))

Complete example:

{-# LANGUAGE DerivingVia #-}

module Main (main) where

import qualified Amazonka
import Control.Lens
import Control.Monad.AWS
import Control.Monad.AWS.ViaReader
import Control.Monad.Reader
import Control.Monad.Trans.Resource

data App = App
  { -- ...
  , appAWS :: Env'
  }

instance HasEnv App where
  envL = lens appAWS $ x y -> x { appAWS = y }

newtype AppT m a = AppT
  { unAppT :: ReaderT App (ResourceT m) a
  }
  deriving newtype
    ( Functor
    , Applicative
    , Monad
    , MonadIO
    , MonadUnliftIO
    , MonadResource
    , MonadReader App
    )
  deriving MonadAWS via (ReaderAWS (AppT m))

runAppT :: MonadUnliftIO m => AppT m a -> App -> m a
runAppT f app = runResourceT $ runReaderT (unAppT f) app

main :: IO ()
main = do
  app <- undefined
  runAppT someAction app

someAction :: (MonadIO m, MonadAWS m) => m ()
someAction = do
  resp <- send newListBuckets
  liftIO $ print resp
Synopsis

Documentation

type Env = Env' Identity #

An environment with auth credentials. Most AWS requests need one of these, and you can create one with newEnv.

class HasEnv env where Source #

Since: 0.1.0.0

Methods

envL :: Lens' env Env Source #

Instances

Instances details
HasEnv Env Source #

Since: 0.1.0.0

Instance details

Defined in Control.Monad.AWS.ViaReader

Methods

envL :: Lens' Env Env Source #

newtype ReaderAWS m a Source #

Since: 0.1.0.0

Constructors

ReaderAWS 

Fields

Instances

Instances details
MonadReader env m => MonadReader env (ReaderAWS m) Source # 
Instance details

Defined in Control.Monad.AWS.ViaReader

Methods

ask :: ReaderAWS m env #

local :: (env -> env) -> ReaderAWS m a -> ReaderAWS m a #

reader :: (env -> a) -> ReaderAWS m a #

(MonadResource m, MonadReader env m, HasEnv env) => MonadAWS (ReaderAWS m) Source # 
Instance details

Defined in Control.Monad.AWS.ViaReader

MonadIO m => MonadIO (ReaderAWS m) Source # 
Instance details

Defined in Control.Monad.AWS.ViaReader

Methods

liftIO :: IO a -> ReaderAWS m a #

Applicative m => Applicative (ReaderAWS m) Source # 
Instance details

Defined in Control.Monad.AWS.ViaReader

Methods

pure :: a -> ReaderAWS m a #

(<*>) :: ReaderAWS m (a -> b) -> ReaderAWS m a -> ReaderAWS m b #

liftA2 :: (a -> b -> c) -> ReaderAWS m a -> ReaderAWS m b -> ReaderAWS m c #

(*>) :: ReaderAWS m a -> ReaderAWS m b -> ReaderAWS m b #

(<*) :: ReaderAWS m a -> ReaderAWS m b -> ReaderAWS m a #

Functor m => Functor (ReaderAWS m) Source # 
Instance details

Defined in Control.Monad.AWS.ViaReader

Methods

fmap :: (a -> b) -> ReaderAWS m a -> ReaderAWS m b #

(<$) :: a -> ReaderAWS m b -> ReaderAWS m a #

Monad m => Monad (ReaderAWS m) Source # 
Instance details

Defined in Control.Monad.AWS.ViaReader

Methods

(>>=) :: ReaderAWS m a -> (a -> ReaderAWS m b) -> ReaderAWS m b #

(>>) :: ReaderAWS m a -> ReaderAWS m b -> ReaderAWS m b #

return :: a -> ReaderAWS m a #

MonadResource m => MonadResource (ReaderAWS m) Source # 
Instance details

Defined in Control.Monad.AWS.ViaReader

Methods

liftResourceT :: ResourceT IO a -> ReaderAWS m a #