# amazonka-mtl [![Hackage](https://img.shields.io/hackage/v/amazonka-mtl.svg?style=flat)](https://hackage.haskell.org/package/amazonka-mtl) [![Stackage Nightly](http://stackage.org/package/amazonka-mtl/badge/nightly)](http://stackage.org/nightly/package/amazonka-mtl) [![Stackage LTS](http://stackage.org/package/amazonka-mtl/badge/lts)](http://stackage.org/lts/package/amazonka-mtl) [![CI](https://github.com/freckle/amazonka-mtl/actions/workflows/ci.yml/badge.svg)](https://github.com/freckle/amazonka-mtl/actions/workflows/ci.yml) MTL-style type-class and deriving-via newtypes for Amazonka. ## Example This package allows incorporation of AWS actions into any MTL-style function, ```haskell import Amazonka.Data.Text (ToText(..)) import Amazonka.S3.ListObjects import Amazonka.S3.Types.Object import Blammo.Logging import Conduit import Control.Lens hiding ((.=)) import Control.Monad.AWS as AWS ``` ```haskell someAction :: ( MonadIO m , MonadLogger m , MonadAWS m , MonadReader env m , HasSettings env ) => m () someAction = do Settings {..} <- view settingsL keys <- runConduit $ paginate (newListObjects settingsBucketName) .| concatMapC (^. listObjectsResponse_contents) .| concatC .| mapC (^. object_key . to toText) .| iterMC (\k -> logDebug $ k :# []) .| sinkList logInfo $ "Bucket contents" :# ["keys" .= keys] ``` This package also provides a number of options for execution: - Through a concrete transformer: `Control.Monad.AWS.EnvT` - Through your own reader env and deriving-via: `Control.Monad.AWS.ViaReader` This package also provides mechanisms for mocking AWS in tests: - Through a concrete transformer: `Control.Monad.AWS.MockT` - Through your own reader env and deriving-via: `Control.Monad.AWS.ViaMock` Please see the [documentation on hackage][hackage] for all the details. [hackage]: https://hackage.haskell.org/package/amazonka-mtl ## Development & Tests ```console stack build --fast --pedantic --test --file-watch ``` --- [CHANGELOG](./CHANGELOG.md) | [LICENSE](./LICENSE)