diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,24 +1,59 @@
 # Amazon Simple Queue Service SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon Simple Queue Service (SQS) is a fast, reliable, scalable, fully
-managed message queuing service. SQS makes it simple and cost-effective to
-decouple the components of a cloud application. You can use SQS to transmit
-any volume of data, at any level of throughput, without losing messages or
-requiring other services to be always available. With SQS, you can offload
-the administrative burden of operating and scaling a highly available
-messaging cluster, while paying a low price for only what you use.
+Welcome to the /Amazon Simple Queue Service API Reference/. This section
+describes who should read this guide, how the guide is organized, and
+other resources related to the Amazon Simple Queue Service (Amazon SQS).
 
+Amazon SQS offers reliable and scalable hosted queues for storing
+messages as they travel between computers. By using Amazon SQS, you can
+move data between distributed components of your applications that
+perform different tasks without losing messages or requiring each
+component to be always available.
+
+Helpful Links:
+
+-   <http://queue.amazonaws.com/doc/2012-11-05/QueueService.wsdl Current WSDL (2012-11-05)>
+-   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/MakingRequestsArticle.html Making API Requests>
+-   <http://aws.amazon.com/sqs/ Amazon SQS product page>
+-   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html Using Amazon SQS Message Attributes>
+-   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html Using Amazon SQS Dead Letter Queues>
+-   <http://docs.aws.amazon.com/general/latest/gr/rande.html#sqs_region Regions and Endpoints>
+
+We also provide SDKs that enable you to access Amazon SQS from your
+preferred programming language. The SDKs contain functionality that
+automatically takes care of tasks such as:
+
+-   Cryptographically signing your service requests
+-   Retrying requests
+-   Handling error responses
+
+For a list of available SDKs, go to
+<http://aws.amazon.com/tools/ Tools for Amazon Web Services>.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-sqs)
 and the [AWS API Reference](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Welcome.html).
 
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
 ## Contribute
 
diff --git a/amazonka-sqs.cabal b/amazonka-sqs.cabal
--- a/amazonka-sqs.cabal
+++ b/amazonka-sqs.cabal
@@ -1,31 +1,61 @@
 name:                  amazonka-sqs
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon Simple Queue Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon Simple Queue Service (SQS) is a fast, reliable, scalable, fully
-    managed message queuing service. SQS makes it simple and cost-effective to
-    decouple the components of a cloud application. You can use SQS to transmit
-    any volume of data, at any level of throughput, without losing messages or
-    requiring other services to be always available. With SQS, you can offload
-    the administrative burden of operating and scaling a highly available
-    messaging cluster, while paying a low price for only what you use.
+    Welcome to the /Amazon Simple Queue Service API Reference/. This section
+    describes who should read this guide, how the guide is organized, and
+    other resources related to the Amazon Simple Queue Service (Amazon SQS).
 
+    Amazon SQS offers reliable and scalable hosted queues for storing
+    messages as they travel between computers. By using Amazon SQS, you can
+    move data between distributed components of your applications that
+    perform different tasks without losing messages or requiring each
+    component to be always available.
+
+    Helpful Links:
+
+    -   <http://queue.amazonaws.com/doc/2012-11-05/QueueService.wsdl Current WSDL (2012-11-05)>
+    -   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/MakingRequestsArticle.html Making API Requests>
+    -   <http://aws.amazon.com/sqs/ Amazon SQS product page>
+    -   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html Using Amazon SQS Message Attributes>
+    -   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html Using Amazon SQS Dead Letter Queues>
+    -   <http://docs.aws.amazon.com/general/latest/gr/rande.html#sqs_region Regions and Endpoints>
+
+    We also provide SDKs that enable you to access Amazon SQS from your
+    preferred programming language. The SDKs contain functionality that
+    automatically takes care of tasks such as:
+
+    -   Cryptographically signing your service requests
+    -   Retrying requests
+    -   Handling error responses
+
+    For a list of available SDKs, go to
+    <http://aws.amazon.com/tools/ Tools for Amazon Web Services>.
     .
-    /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Welcome.html AWS API Reference>
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
     .
-    /Warning:/ This is an experimental preview release which is still under
-    heavy development and not intended for public consumption, caveat emptor!
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.SQS" and the <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -47,7 +77,7 @@
         , Network.AWS.SQS.DeleteMessageBatch
         , Network.AWS.SQS.DeleteQueue
         , Network.AWS.SQS.GetQueueAttributes
-        , Network.AWS.SQS.GetQueueUrl
+        , Network.AWS.SQS.GetQueueURL
         , Network.AWS.SQS.ListDeadLetterSourceQueues
         , Network.AWS.SQS.ListQueues
         , Network.AWS.SQS.PurgeQueue
@@ -57,9 +87,40 @@
         , Network.AWS.SQS.SendMessageBatch
         , Network.AWS.SQS.SetQueueAttributes
         , Network.AWS.SQS.Types
+        , Network.AWS.SQS.Waiters
 
     other-modules:
+          Network.AWS.SQS.Types.Product
+        , Network.AWS.SQS.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-sqs-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This is not comprehensive if modules have manually been added.
+    -- It exists to ensure cabal 'somewhat' detects test module changes.
+    other-modules:
+          Test.AWS.SQS
+        , Test.AWS.Gen.SQS
+        , Test.AWS.SQS.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-sqs == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/SQS.hs b/gen/Network/AWS/SQS.hs
--- a/gen/Network/AWS/SQS.hs
+++ b/gen/Network/AWS/SQS.hs
@@ -1,58 +1,279 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon Simple Queue Service (SQS) is a fast, reliable, scalable, fully
--- managed message queuing service. SQS makes it simple and cost-effective to
--- decouple the components of a cloud application. You can use SQS to transmit
--- any volume of data, at any level of throughput, without losing messages or
--- requiring other services to be always available. With SQS, you can offload
--- the administrative burden of operating and scaling a highly available
--- messaging cluster, while paying a low price for only what you use.
+-- Welcome to the /Amazon Simple Queue Service API Reference/. This section
+-- describes who should read this guide, how the guide is organized, and
+-- other resources related to the Amazon Simple Queue Service (Amazon SQS).
+--
+-- Amazon SQS offers reliable and scalable hosted queues for storing
+-- messages as they travel between computers. By using Amazon SQS, you can
+-- move data between distributed components of your applications that
+-- perform different tasks without losing messages or requiring each
+-- component to be always available.
+--
+-- Helpful Links:
+--
+-- -   <http://queue.amazonaws.com/doc/2012-11-05/QueueService.wsdl Current WSDL (2012-11-05)>
+-- -   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/MakingRequestsArticle.html Making API Requests>
+-- -   <http://aws.amazon.com/sqs/ Amazon SQS product page>
+-- -   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html Using Amazon SQS Message Attributes>
+-- -   <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html Using Amazon SQS Dead Letter Queues>
+-- -   <http://docs.aws.amazon.com/general/latest/gr/rande.html#sqs_region Regions and Endpoints>
+--
+-- We also provide SDKs that enable you to access Amazon SQS from your
+-- preferred programming language. The SDKs contain functionality that
+-- automatically takes care of tasks such as:
+--
+-- -   Cryptographically signing your service requests
+-- -   Retrying requests
+-- -   Handling error responses
+--
+-- For a list of available SDKs, go to
+-- <http://aws.amazon.com/tools/ Tools for Amazon Web Services>.
+--
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.SQS
-    ( module Network.AWS.SQS.AddPermission
-    , module Network.AWS.SQS.ChangeMessageVisibility
+    (
+    -- * Service
+      SQS
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidBatchEntryId
+    , _InvalidBatchEntryId
+
+    -- ** TooManyEntriesInBatchRequest
+    , _TooManyEntriesInBatchRequest
+
+    -- ** InvalidAttributeName
+    , _InvalidAttributeName
+
+    -- ** QueueDeletedRecently
+    , _QueueDeletedRecently
+
+    -- ** QueueDoesNotExist
+    , _QueueDoesNotExist
+
+    -- ** UnsupportedOperation
+    , _UnsupportedOperation
+
+    -- ** InvalidMessageContents
+    , _InvalidMessageContents
+
+    -- ** BatchRequestTooLong
+    , _BatchRequestTooLong
+
+    -- ** OverLimit
+    , _OverLimit
+
+    -- ** PurgeQueueInProgress
+    , _PurgeQueueInProgress
+
+    -- ** QueueNameExists
+    , _QueueNameExists
+
+    -- ** InvalidIdFormat
+    , _InvalidIdFormat
+
+    -- ** ReceiptHandleIsInvalid
+    , _ReceiptHandleIsInvalid
+
+    -- ** EmptyBatchRequest
+    , _EmptyBatchRequest
+
+    -- ** MessageNotInflight
+    , _MessageNotInflight
+
+    -- ** BatchEntryIdsNotDistinct
+    , _BatchEntryIdsNotDistinct
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** GetQueueURL
+    , module Network.AWS.SQS.GetQueueURL
+
+    -- ** PurgeQueue
+    , module Network.AWS.SQS.PurgeQueue
+
+    -- ** SendMessage
+    , module Network.AWS.SQS.SendMessage
+
+    -- ** ChangeMessageVisibilityBatch
     , module Network.AWS.SQS.ChangeMessageVisibilityBatch
-    , module Network.AWS.SQS.CreateQueue
-    , module Network.AWS.SQS.DeleteMessage
-    , module Network.AWS.SQS.DeleteMessageBatch
-    , module Network.AWS.SQS.DeleteQueue
+
+    -- ** RemovePermission
+    , module Network.AWS.SQS.RemovePermission
+
+    -- ** GetQueueAttributes
     , module Network.AWS.SQS.GetQueueAttributes
-    , module Network.AWS.SQS.GetQueueUrl
-    , module Network.AWS.SQS.ListDeadLetterSourceQueues
+
+    -- ** ListQueues
     , module Network.AWS.SQS.ListQueues
-    , module Network.AWS.SQS.PurgeQueue
+
+    -- ** ReceiveMessage
     , module Network.AWS.SQS.ReceiveMessage
-    , module Network.AWS.SQS.RemovePermission
-    , module Network.AWS.SQS.SendMessage
-    , module Network.AWS.SQS.SendMessageBatch
+
+    -- ** DeleteQueue
+    , module Network.AWS.SQS.DeleteQueue
+
+    -- ** DeleteMessageBatch
+    , module Network.AWS.SQS.DeleteMessageBatch
+
+    -- ** SetQueueAttributes
     , module Network.AWS.SQS.SetQueueAttributes
-    , module Network.AWS.SQS.Types
+
+    -- ** ListDeadLetterSourceQueues
+    , module Network.AWS.SQS.ListDeadLetterSourceQueues
+
+    -- ** AddPermission
+    , module Network.AWS.SQS.AddPermission
+
+    -- ** DeleteMessage
+    , module Network.AWS.SQS.DeleteMessage
+
+    -- ** CreateQueue
+    , module Network.AWS.SQS.CreateQueue
+
+    -- ** ChangeMessageVisibility
+    , module Network.AWS.SQS.ChangeMessageVisibility
+
+    -- ** SendMessageBatch
+    , module Network.AWS.SQS.SendMessageBatch
+
+    -- * Types
+
+    -- ** QueueAttributeName
+    , QueueAttributeName (..)
+
+    -- ** BatchResultErrorEntry
+    , BatchResultErrorEntry
+    , batchResultErrorEntry
+    , breeMessage
+    , breeId
+    , breeSenderFault
+    , breeCode
+
+    -- ** ChangeMessageVisibilityBatchRequestEntry
+    , ChangeMessageVisibilityBatchRequestEntry
+    , changeMessageVisibilityBatchRequestEntry
+    , cVisibilityTimeout
+    , cId
+    , cReceiptHandle
+
+    -- ** ChangeMessageVisibilityBatchResultEntry
+    , ChangeMessageVisibilityBatchResultEntry
+    , changeMessageVisibilityBatchResultEntry
+    , cmvbreId
+
+    -- ** DeleteMessageBatchRequestEntry
+    , DeleteMessageBatchRequestEntry
+    , deleteMessageBatchRequestEntry
+    , dmbreId
+    , dmbreReceiptHandle
+
+    -- ** DeleteMessageBatchResultEntry
+    , DeleteMessageBatchResultEntry
+    , deleteMessageBatchResultEntry
+    , dId
+
+    -- ** Message
+    , Message
+    , message
+    , mMessageAttributes
+    , mMD5OfBody
+    , mBody
+    , mAttributes
+    , mMessageId
+    , mReceiptHandle
+    , mMD5OfMessageAttributes
+
+    -- ** MessageAttributeValue
+    , MessageAttributeValue
+    , messageAttributeValue
+    , mavBinaryValue
+    , mavStringListValues
+    , mavStringValue
+    , mavBinaryListValues
+    , mavDataType
+
+    -- ** SendMessageBatchRequestEntry
+    , SendMessageBatchRequestEntry
+    , sendMessageBatchRequestEntry
+    , sMessageAttributes
+    , sDelaySeconds
+    , sId
+    , sMessageBody
+
+    -- ** SendMessageBatchResultEntry
+    , SendMessageBatchResultEntry
+    , sendMessageBatchResultEntry
+    , smbreMD5OfMessageAttributes
+    , smbreId
+    , smbreMessageId
+    , smbreMD5OfMessageBody
     ) where
 
-import Network.AWS.SQS.AddPermission
-import Network.AWS.SQS.ChangeMessageVisibility
-import Network.AWS.SQS.ChangeMessageVisibilityBatch
-import Network.AWS.SQS.CreateQueue
-import Network.AWS.SQS.DeleteMessage
-import Network.AWS.SQS.DeleteMessageBatch
-import Network.AWS.SQS.DeleteQueue
-import Network.AWS.SQS.GetQueueAttributes
-import Network.AWS.SQS.GetQueueUrl
-import Network.AWS.SQS.ListDeadLetterSourceQueues
-import Network.AWS.SQS.ListQueues
-import Network.AWS.SQS.PurgeQueue
-import Network.AWS.SQS.ReceiveMessage
-import Network.AWS.SQS.RemovePermission
-import Network.AWS.SQS.SendMessage
-import Network.AWS.SQS.SendMessageBatch
-import Network.AWS.SQS.SetQueueAttributes
-import Network.AWS.SQS.Types
+import           Network.AWS.SQS.AddPermission
+import           Network.AWS.SQS.ChangeMessageVisibility
+import           Network.AWS.SQS.ChangeMessageVisibilityBatch
+import           Network.AWS.SQS.CreateQueue
+import           Network.AWS.SQS.DeleteMessage
+import           Network.AWS.SQS.DeleteMessageBatch
+import           Network.AWS.SQS.DeleteQueue
+import           Network.AWS.SQS.GetQueueAttributes
+import           Network.AWS.SQS.GetQueueURL
+import           Network.AWS.SQS.ListDeadLetterSourceQueues
+import           Network.AWS.SQS.ListQueues
+import           Network.AWS.SQS.PurgeQueue
+import           Network.AWS.SQS.ReceiveMessage
+import           Network.AWS.SQS.RemovePermission
+import           Network.AWS.SQS.SendMessage
+import           Network.AWS.SQS.SendMessageBatch
+import           Network.AWS.SQS.SetQueueAttributes
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'SQS'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/SQS/AddPermission.hs b/gen/Network/AWS/SQS/AddPermission.hs
--- a/gen/Network/AWS/SQS/AddPermission.hs
+++ b/gen/Network/AWS/SQS/AddPermission.hs
@@ -1,145 +1,163 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.AddPermission
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Adds a permission to a queue for a specific <http://docs.aws.amazon.com/general/latest/gr/glos-chap.html#P principal>. This allows for
--- sharing access to the queue.
+-- Adds a permission to a queue for a specific
+-- <http://docs.aws.amazon.com/general/latest/gr/glos-chap.html#P principal>.
+-- This allows for sharing access to the queue.
 --
--- When you create a queue, you have full control access rights for the queue.
--- Only you (as owner of the queue) can grant or deny permissions to the queue.
--- For more information about these permissions, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/acp-overview.html Shared Queues> in the /AmazonSQS Developer Guide/.
+-- When you create a queue, you have full control access rights for the
+-- queue. Only you (as owner of the queue) can grant or deny permissions to
+-- the queue. For more information about these permissions, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/acp-overview.html Shared Queues>
+-- in the /Amazon SQS Developer Guide/.
 --
--- 'AddPermission' writes an Amazon SQS-generated policy. If you want to write
--- your own policy, use 'SetQueueAttributes' to upload your policy. For more
--- information about writing your own policy, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AccessPolicyLanguage.html Using The Access PolicyLanguage> in the /Amazon SQS Developer Guide/.
+-- 'AddPermission' writes an Amazon SQS-generated policy. If you want to
+-- write your own policy, use SetQueueAttributes to upload your policy. For
+-- more information about writing your own policy, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AccessPolicyLanguage.html Using The Access Policy Language>
+-- in the /Amazon SQS Developer Guide/.
 --
--- Some API actions take lists of parameters. These lists are specified using
--- the 'param.n' notation. Values of 'n' are integers starting from 1. For example,
--- a parameter list with two elements looks like this:  '&Attribute.1=this'
+-- Some API actions take lists of parameters. These lists are specified
+-- using the 'param.n' notation. Values of 'n' are integers starting from
+-- 1. For example, a parameter list with two elements looks like this:
 --
+-- '&Attribute.1=this'
+--
 -- '&Attribute.2=that'
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_AddPermission.html AWS API Reference> for AddPermission.
 module Network.AWS.SQS.AddPermission
     (
-    -- * Request
-      AddPermission
-    -- ** Request constructor
-    , addPermission
-    -- ** Request lenses
+    -- * Creating a Request
+      addPermission
+    , AddPermission
+    -- * Request Lenses
+    , apQueueURL
+    , apLabel
     , apAWSAccountIds
     , apActions
-    , apLabel
-    , apQueueUrl
 
-    -- * Response
-    , AddPermissionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , addPermissionResponse
+    , AddPermissionResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data AddPermission = AddPermission
-    { _apAWSAccountIds :: List "member" Text
-    , _apActions       :: List "member" Text
-    , _apLabel         :: Text
-    , _apQueueUrl      :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'addPermission' smart constructor.
+data AddPermission = AddPermission'
+    { _apQueueURL      :: !Text
+    , _apLabel         :: !Text
+    , _apAWSAccountIds :: ![Text]
+    , _apActions       :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'AddPermission' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'AddPermission' with the minimum fields required to make a request.
 --
--- * 'apAWSAccountIds' @::@ ['Text']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'apActions' @::@ ['Text']
+-- * 'apQueueURL'
 --
--- * 'apLabel' @::@ 'Text'
+-- * 'apLabel'
 --
--- * 'apQueueUrl' @::@ 'Text'
+-- * 'apAWSAccountIds'
 --
-addPermission :: Text -- ^ 'apQueueUrl'
-              -> Text -- ^ 'apLabel'
-              -> AddPermission
-addPermission p1 p2 = AddPermission
-    { _apQueueUrl      = p1
-    , _apLabel         = p2
+-- * 'apActions'
+addPermission
+    :: Text -- ^ 'apQueueURL'
+    -> Text -- ^ 'apLabel'
+    -> AddPermission
+addPermission pQueueURL_ pLabel_ =
+    AddPermission'
+    { _apQueueURL = pQueueURL_
+    , _apLabel = pLabel_
     , _apAWSAccountIds = mempty
-    , _apActions       = mempty
+    , _apActions = mempty
     }
 
--- | The AWS account number of the <http://docs.aws.amazon.com/general/latest/gr/glos-chap.html#P principal> who will be given permission. The
--- principal must have an AWS account, but does not need to be signed up for
--- Amazon SQS. For information about locating the AWS account identification,
--- see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AWSCredentials.html Your AWS Identifiers> in the /Amazon SQS Developer Guide/.
+-- | The URL of the Amazon SQS queue to take action on.
+apQueueURL :: Lens' AddPermission Text
+apQueueURL = lens _apQueueURL (\ s a -> s{_apQueueURL = a});
+
+-- | The unique identification of the permission you\'re setting (e.g.,
+-- 'AliceSendMessage'). Constraints: Maximum 80 characters; alphanumeric
+-- characters, hyphens (-), and underscores (_) are allowed.
+apLabel :: Lens' AddPermission Text
+apLabel = lens _apLabel (\ s a -> s{_apLabel = a});
+
+-- | The AWS account number of the
+-- <http://docs.aws.amazon.com/general/latest/gr/glos-chap.html#P principal>
+-- who will be given permission. The principal must have an AWS account,
+-- but does not need to be signed up for Amazon SQS. For information about
+-- locating the AWS account identification, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AWSCredentials.html Your AWS Identifiers>
+-- in the /Amazon SQS Developer Guide/.
 apAWSAccountIds :: Lens' AddPermission [Text]
-apAWSAccountIds = lens _apAWSAccountIds (\s a -> s { _apAWSAccountIds = a }) . _List
+apAWSAccountIds = lens _apAWSAccountIds (\ s a -> s{_apAWSAccountIds = a}) . _Coerce;
 
 -- | The action the client wants to allow for the specified principal. The
--- following are valid values: '* | SendMessage | ReceiveMessage | DeleteMessage| ChangeMessageVisibility | GetQueueAttributes | GetQueueUrl'. For more
--- information about these actions, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/acp-overview.html#PermissionTypes Understanding Permissions> in the /AmazonSQS Developer Guide/.
+-- following are valid values:
+-- '* | SendMessage | ReceiveMessage | DeleteMessage | ChangeMessageVisibility | GetQueueAttributes | GetQueueUrl'.
+-- For more information about these actions, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/acp-overview.html#PermissionTypes Understanding Permissions>
+-- in the /Amazon SQS Developer Guide/.
 --
--- Specifying 'SendMessage', 'DeleteMessage', or 'ChangeMessageVisibility' for the 'ActionName.n' also grants permissions for the corresponding batch versions of those
--- actions: 'SendMessageBatch', 'DeleteMessageBatch', and 'ChangeMessageVisibilityBatch'.
+-- Specifying 'SendMessage', 'DeleteMessage', or 'ChangeMessageVisibility'
+-- for the 'ActionName.n' also grants permissions for the corresponding
+-- batch versions of those actions: 'SendMessageBatch',
+-- 'DeleteMessageBatch', and 'ChangeMessageVisibilityBatch'.
 apActions :: Lens' AddPermission [Text]
-apActions = lens _apActions (\s a -> s { _apActions = a }) . _List
-
--- | The unique identification of the permission you're setting (e.g., 'AliceSendMessage'). Constraints: Maximum 80 characters; alphanumeric characters, hyphens (-),
--- and underscores (_) are allowed.
-apLabel :: Lens' AddPermission Text
-apLabel = lens _apLabel (\s a -> s { _apLabel = a })
-
--- | The URL of the Amazon SQS queue to take action on.
-apQueueUrl :: Lens' AddPermission Text
-apQueueUrl = lens _apQueueUrl (\s a -> s { _apQueueUrl = a })
+apActions = lens _apActions (\ s a -> s{_apActions = a}) . _Coerce;
 
-data AddPermissionResponse = AddPermissionResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest AddPermission where
+        type Sv AddPermission = SQS
+        type Rs AddPermission = AddPermissionResponse
+        request = postQuery
+        response = receiveNull AddPermissionResponse'
 
--- | 'AddPermissionResponse' constructor.
-addPermissionResponse :: AddPermissionResponse
-addPermissionResponse = AddPermissionResponse
+instance ToHeaders AddPermission where
+        toHeaders = const mempty
 
 instance ToPath AddPermission where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery AddPermission where
-    toQuery AddPermission{..} = mconcat
-        [ toQuery        _apAWSAccountIds
-        , toQuery        _apActions
-        , "Label"         =? _apLabel
-        , "QueueUrl"      =? _apQueueUrl
-        ]
-
-instance ToHeaders AddPermission
+        toQuery AddPermission'{..}
+          = mconcat
+              ["Action" =: ("AddPermission" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _apQueueURL, "Label" =: _apLabel,
+               toQueryList "AWSAccountId" _apAWSAccountIds,
+               toQueryList "ActionName" _apActions]
 
-instance AWSRequest AddPermission where
-    type Sv AddPermission = SQS
-    type Rs AddPermission = AddPermissionResponse
+-- | /See:/ 'addPermissionResponse' smart constructor.
+data AddPermissionResponse =
+    AddPermissionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "AddPermission"
-    response = nullResponse AddPermissionResponse
+-- | Creates a value of 'AddPermissionResponse' with the minimum fields required to make a request.
+--
+addPermissionResponse
+    :: AddPermissionResponse
+addPermissionResponse = AddPermissionResponse'
diff --git a/gen/Network/AWS/SQS/ChangeMessageVisibility.hs b/gen/Network/AWS/SQS/ChangeMessageVisibility.hs
--- a/gen/Network/AWS/SQS/ChangeMessageVisibility.hs
+++ b/gen/Network/AWS/SQS/ChangeMessageVisibility.hs
@@ -1,143 +1,154 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.ChangeMessageVisibility
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Changes the visibility timeout of a specified message in a queue to a new
--- value. The maximum allowed timeout value you can set the value to is 12
--- hours. This means you can't extend the timeout of a message in an existing
--- queue to more than a total visibility timeout of 12 hours. (For more
--- information visibility timeout, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html Visibility Timeout> in the /Amazon SQSDeveloper Guide/.)
+-- Changes the visibility timeout of a specified message in a queue to a
+-- new value. The maximum allowed timeout value you can set the value to is
+-- 12 hours. This means you can\'t extend the timeout of a message in an
+-- existing queue to more than a total visibility timeout of 12 hours. (For
+-- more information visibility timeout, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html Visibility Timeout>
+-- in the /Amazon SQS Developer Guide/.)
 --
--- For example, let's say you have a message and its default message visibility
--- timeout is 30 minutes. You could call 'ChangeMessageVisiblity' with a value of
--- two hours and the effective timeout would be two hours and 30 minutes. When
--- that time comes near you could again extend the time out by calling
--- ChangeMessageVisiblity, but this time the maximum allowed timeout would be 9
--- hours and 30 minutes.
+-- For example, let\'s say you have a message and its default message
+-- visibility timeout is 30 minutes. You could call
+-- 'ChangeMessageVisiblity' with a value of two hours and the effective
+-- timeout would be two hours and 30 minutes. When that time comes near you
+-- could again extend the time out by calling ChangeMessageVisiblity, but
+-- this time the maximum allowed timeout would be 9 hours and 30 minutes.
 --
 -- There is a 120,000 limit for the number of inflight messages per queue.
 -- Messages are inflight after they have been received from the queue by a
--- consuming component, but have not yet been deleted from the queue. If you
--- reach the 120,000 limit, you will receive an OverLimit error message from
--- Amazon SQS. To help avoid reaching the limit, you should delete the messages
--- from the queue after they have been processed. You can also increase the
--- number of queues you use to process the messages.
+-- consuming component, but have not yet been deleted from the queue. If
+-- you reach the 120,000 limit, you will receive an OverLimit error message
+-- from Amazon SQS. To help avoid reaching the limit, you should delete the
+-- messages from the queue after they have been processed. You can also
+-- increase the number of queues you use to process the messages.
 --
 -- If you attempt to set the 'VisibilityTimeout' to an amount more than the
--- maximum time left, Amazon SQS returns an error. It will not automatically
--- recalculate and increase the timeout to the maximum time remaining. Unlike
--- with a queue, when you change the visibility timeout for a specific message,
--- that timeout value is applied immediately but is not saved in memory for that
--- message. If you don't delete a message after it is received, the visibility
--- timeout for the message the next time it is received reverts to the original
--- timeout value, not the value you set with the 'ChangeMessageVisibility' action.
+-- maximum time left, Amazon SQS returns an error. It will not
+-- automatically recalculate and increase the timeout to the maximum time
+-- remaining.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html>
+-- Unlike with a queue, when you change the visibility timeout for a
+-- specific message, that timeout value is applied immediately but is not
+-- saved in memory for that message. If you don\'t delete a message after
+-- it is received, the visibility timeout for the message the next time it
+-- is received reverts to the original timeout value, not the value you set
+-- with the 'ChangeMessageVisibility' action.
+--
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html AWS API Reference> for ChangeMessageVisibility.
 module Network.AWS.SQS.ChangeMessageVisibility
     (
-    -- * Request
-      ChangeMessageVisibility
-    -- ** Request constructor
-    , changeMessageVisibility
-    -- ** Request lenses
-    , cmvQueueUrl
+    -- * Creating a Request
+      changeMessageVisibility
+    , ChangeMessageVisibility
+    -- * Request Lenses
+    , cmvQueueURL
     , cmvReceiptHandle
     , cmvVisibilityTimeout
 
-    -- * Response
-    , ChangeMessageVisibilityResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , changeMessageVisibilityResponse
+    , ChangeMessageVisibilityResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data ChangeMessageVisibility = ChangeMessageVisibility
-    { _cmvQueueUrl          :: Text
-    , _cmvReceiptHandle     :: Text
-    , _cmvVisibilityTimeout :: Int
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'changeMessageVisibility' smart constructor.
+data ChangeMessageVisibility = ChangeMessageVisibility'
+    { _cmvQueueURL          :: !Text
+    , _cmvReceiptHandle     :: !Text
+    , _cmvVisibilityTimeout :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ChangeMessageVisibility' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ChangeMessageVisibility' with the minimum fields required to make a request.
 --
--- * 'cmvQueueUrl' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmvReceiptHandle' @::@ 'Text'
+-- * 'cmvQueueURL'
 --
--- * 'cmvVisibilityTimeout' @::@ 'Int'
+-- * 'cmvReceiptHandle'
 --
-changeMessageVisibility :: Text -- ^ 'cmvQueueUrl'
-                        -> Text -- ^ 'cmvReceiptHandle'
-                        -> Int -- ^ 'cmvVisibilityTimeout'
-                        -> ChangeMessageVisibility
-changeMessageVisibility p1 p2 p3 = ChangeMessageVisibility
-    { _cmvQueueUrl          = p1
-    , _cmvReceiptHandle     = p2
-    , _cmvVisibilityTimeout = p3
+-- * 'cmvVisibilityTimeout'
+changeMessageVisibility
+    :: Text -- ^ 'cmvQueueURL'
+    -> Text -- ^ 'cmvReceiptHandle'
+    -> Int -- ^ 'cmvVisibilityTimeout'
+    -> ChangeMessageVisibility
+changeMessageVisibility pQueueURL_ pReceiptHandle_ pVisibilityTimeout_ =
+    ChangeMessageVisibility'
+    { _cmvQueueURL = pQueueURL_
+    , _cmvReceiptHandle = pReceiptHandle_
+    , _cmvVisibilityTimeout = pVisibilityTimeout_
     }
 
 -- | The URL of the Amazon SQS queue to take action on.
-cmvQueueUrl :: Lens' ChangeMessageVisibility Text
-cmvQueueUrl = lens _cmvQueueUrl (\s a -> s { _cmvQueueUrl = a })
+cmvQueueURL :: Lens' ChangeMessageVisibility Text
+cmvQueueURL = lens _cmvQueueURL (\ s a -> s{_cmvQueueURL = a});
 
 -- | The receipt handle associated with the message whose visibility timeout
--- should be changed. This parameter is returned by the 'ReceiveMessage' action.
+-- should be changed. This parameter is returned by the ReceiveMessage
+-- action.
 cmvReceiptHandle :: Lens' ChangeMessageVisibility Text
-cmvReceiptHandle = lens _cmvReceiptHandle (\s a -> s { _cmvReceiptHandle = a })
+cmvReceiptHandle = lens _cmvReceiptHandle (\ s a -> s{_cmvReceiptHandle = a});
 
 -- | The new value (in seconds - from 0 to 43200 - maximum 12 hours) for the
--- message's visibility timeout.
+-- message\'s visibility timeout.
 cmvVisibilityTimeout :: Lens' ChangeMessageVisibility Int
-cmvVisibilityTimeout =
-    lens _cmvVisibilityTimeout (\s a -> s { _cmvVisibilityTimeout = a })
+cmvVisibilityTimeout = lens _cmvVisibilityTimeout (\ s a -> s{_cmvVisibilityTimeout = a});
 
-data ChangeMessageVisibilityResponse = ChangeMessageVisibilityResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest ChangeMessageVisibility where
+        type Sv ChangeMessageVisibility = SQS
+        type Rs ChangeMessageVisibility =
+             ChangeMessageVisibilityResponse
+        request = postQuery
+        response
+          = receiveNull ChangeMessageVisibilityResponse'
 
--- | 'ChangeMessageVisibilityResponse' constructor.
-changeMessageVisibilityResponse :: ChangeMessageVisibilityResponse
-changeMessageVisibilityResponse = ChangeMessageVisibilityResponse
+instance ToHeaders ChangeMessageVisibility where
+        toHeaders = const mempty
 
 instance ToPath ChangeMessageVisibility where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ChangeMessageVisibility where
-    toQuery ChangeMessageVisibility{..} = mconcat
-        [ "QueueUrl"          =? _cmvQueueUrl
-        , "ReceiptHandle"     =? _cmvReceiptHandle
-        , "VisibilityTimeout" =? _cmvVisibilityTimeout
-        ]
-
-instance ToHeaders ChangeMessageVisibility
+        toQuery ChangeMessageVisibility'{..}
+          = mconcat
+              ["Action" =:
+                 ("ChangeMessageVisibility" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _cmvQueueURL,
+               "ReceiptHandle" =: _cmvReceiptHandle,
+               "VisibilityTimeout" =: _cmvVisibilityTimeout]
 
-instance AWSRequest ChangeMessageVisibility where
-    type Sv ChangeMessageVisibility = SQS
-    type Rs ChangeMessageVisibility = ChangeMessageVisibilityResponse
+-- | /See:/ 'changeMessageVisibilityResponse' smart constructor.
+data ChangeMessageVisibilityResponse =
+    ChangeMessageVisibilityResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "ChangeMessageVisibility"
-    response = nullResponse ChangeMessageVisibilityResponse
+-- | Creates a value of 'ChangeMessageVisibilityResponse' with the minimum fields required to make a request.
+--
+changeMessageVisibilityResponse
+    :: ChangeMessageVisibilityResponse
+changeMessageVisibilityResponse = ChangeMessageVisibilityResponse'
diff --git a/gen/Network/AWS/SQS/ChangeMessageVisibilityBatch.hs b/gen/Network/AWS/SQS/ChangeMessageVisibilityBatch.hs
--- a/gen/Network/AWS/SQS/ChangeMessageVisibilityBatch.hs
+++ b/gen/Network/AWS/SQS/ChangeMessageVisibilityBatch.hs
@@ -1,140 +1,169 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.ChangeMessageVisibilityBatch
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Changes the visibility timeout of multiple messages. This is a batch version
--- of 'ChangeMessageVisibility'. The result of the action on each message is
--- reported individually in the response. You can send up to 10 'ChangeMessageVisibility' requests with each 'ChangeMessageVisibilityBatch' action.
+-- Changes the visibility timeout of multiple messages. This is a batch
+-- version of ChangeMessageVisibility. The result of the action on each
+-- message is reported individually in the response. You can send up to 10
+-- ChangeMessageVisibility requests with each
+-- 'ChangeMessageVisibilityBatch' action.
 --
 -- Because the batch request can result in a combination of successful and
--- unsuccessful actions, you should check for batch errors even when the call
--- returns an HTTP status code of 200. Some API actions take lists of
--- parameters. These lists are specified using the 'param.n' notation. Values of 'n'
--- are integers starting from 1. For example, a parameter list with two elements
--- looks like this:  '&Attribute.1=this'
+-- unsuccessful actions, you should check for batch errors even when the
+-- call returns an HTTP status code of 200.
 --
+-- Some API actions take lists of parameters. These lists are specified
+-- using the 'param.n' notation. Values of 'n' are integers starting from
+-- 1. For example, a parameter list with two elements looks like this:
+--
+-- '&Attribute.1=this'
+--
 -- '&Attribute.2=that'
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibilityBatch.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibilityBatch.html AWS API Reference> for ChangeMessageVisibilityBatch.
 module Network.AWS.SQS.ChangeMessageVisibilityBatch
     (
-    -- * Request
-      ChangeMessageVisibilityBatch
-    -- ** Request constructor
-    , changeMessageVisibilityBatch
-    -- ** Request lenses
+    -- * Creating a Request
+      changeMessageVisibilityBatch
+    , ChangeMessageVisibilityBatch
+    -- * Request Lenses
+    , cmvbQueueURL
     , cmvbEntries
-    , cmvbQueueUrl
 
-    -- * Response
-    , ChangeMessageVisibilityBatchResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , changeMessageVisibilityBatchResponse
-    -- ** Response lenses
-    , cmvbrFailed
-    , cmvbrSuccessful
+    , ChangeMessageVisibilityBatchResponse
+    -- * Response Lenses
+    , cmvbrsStatus
+    , cmvbrsSuccessful
+    , cmvbrsFailed
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data ChangeMessageVisibilityBatch = ChangeMessageVisibilityBatch
-    { _cmvbEntries  :: List "member" ChangeMessageVisibilityBatchRequestEntry
-    , _cmvbQueueUrl :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'changeMessageVisibilityBatch' smart constructor.
+data ChangeMessageVisibilityBatch = ChangeMessageVisibilityBatch'
+    { _cmvbQueueURL :: !Text
+    , _cmvbEntries  :: ![ChangeMessageVisibilityBatchRequestEntry]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ChangeMessageVisibilityBatch' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ChangeMessageVisibilityBatch' with the minimum fields required to make a request.
 --
--- * 'cmvbEntries' @::@ ['ChangeMessageVisibilityBatchRequestEntry']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cmvbQueueUrl' @::@ 'Text'
+-- * 'cmvbQueueURL'
 --
-changeMessageVisibilityBatch :: Text -- ^ 'cmvbQueueUrl'
-                             -> ChangeMessageVisibilityBatch
-changeMessageVisibilityBatch p1 = ChangeMessageVisibilityBatch
-    { _cmvbQueueUrl = p1
-    , _cmvbEntries  = mempty
+-- * 'cmvbEntries'
+changeMessageVisibilityBatch
+    :: Text -- ^ 'cmvbQueueURL'
+    -> ChangeMessageVisibilityBatch
+changeMessageVisibilityBatch pQueueURL_ =
+    ChangeMessageVisibilityBatch'
+    { _cmvbQueueURL = pQueueURL_
+    , _cmvbEntries = mempty
     }
 
--- | A list of receipt handles of the messages for which the visibility timeout
--- must be changed.
-cmvbEntries :: Lens' ChangeMessageVisibilityBatch [ChangeMessageVisibilityBatchRequestEntry]
-cmvbEntries = lens _cmvbEntries (\s a -> s { _cmvbEntries = a }) . _List
-
 -- | The URL of the Amazon SQS queue to take action on.
-cmvbQueueUrl :: Lens' ChangeMessageVisibilityBatch Text
-cmvbQueueUrl = lens _cmvbQueueUrl (\s a -> s { _cmvbQueueUrl = a })
-
-data ChangeMessageVisibilityBatchResponse = ChangeMessageVisibilityBatchResponse
-    { _cmvbrFailed     :: List "member" BatchResultErrorEntry
-    , _cmvbrSuccessful :: List "member" ChangeMessageVisibilityBatchResultEntry
-    } deriving (Eq, Read, Show)
+cmvbQueueURL :: Lens' ChangeMessageVisibilityBatch Text
+cmvbQueueURL = lens _cmvbQueueURL (\ s a -> s{_cmvbQueueURL = a});
 
--- | 'ChangeMessageVisibilityBatchResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cmvbrFailed' @::@ ['BatchResultErrorEntry']
---
--- * 'cmvbrSuccessful' @::@ ['ChangeMessageVisibilityBatchResultEntry']
---
-changeMessageVisibilityBatchResponse :: ChangeMessageVisibilityBatchResponse
-changeMessageVisibilityBatchResponse = ChangeMessageVisibilityBatchResponse
-    { _cmvbrSuccessful = mempty
-    , _cmvbrFailed     = mempty
-    }
+-- | A list of receipt handles of the messages for which the visibility
+-- timeout must be changed.
+cmvbEntries :: Lens' ChangeMessageVisibilityBatch [ChangeMessageVisibilityBatchRequestEntry]
+cmvbEntries = lens _cmvbEntries (\ s a -> s{_cmvbEntries = a}) . _Coerce;
 
--- | A list of 'BatchResultErrorEntry' items.
-cmvbrFailed :: Lens' ChangeMessageVisibilityBatchResponse [BatchResultErrorEntry]
-cmvbrFailed = lens _cmvbrFailed (\s a -> s { _cmvbrFailed = a }) . _List
+instance AWSRequest ChangeMessageVisibilityBatch
+         where
+        type Sv ChangeMessageVisibilityBatch = SQS
+        type Rs ChangeMessageVisibilityBatch =
+             ChangeMessageVisibilityBatchResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper
+              "ChangeMessageVisibilityBatchResult"
+              (\ s h x ->
+                 ChangeMessageVisibilityBatchResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (parseXMLList
+                        "ChangeMessageVisibilityBatchResultEntry"
+                        x)
+                     <*> (parseXMLList "BatchResultErrorEntry" x))
 
--- | A list of 'ChangeMessageVisibilityBatchResultEntry' items.
-cmvbrSuccessful :: Lens' ChangeMessageVisibilityBatchResponse [ChangeMessageVisibilityBatchResultEntry]
-cmvbrSuccessful = lens _cmvbrSuccessful (\s a -> s { _cmvbrSuccessful = a }) . _List
+instance ToHeaders ChangeMessageVisibilityBatch where
+        toHeaders = const mempty
 
 instance ToPath ChangeMessageVisibilityBatch where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ChangeMessageVisibilityBatch where
-    toQuery ChangeMessageVisibilityBatch{..} = mconcat
-        [ toQuery   _cmvbEntries
-        , "QueueUrl" =? _cmvbQueueUrl
-        ]
+        toQuery ChangeMessageVisibilityBatch'{..}
+          = mconcat
+              ["Action" =:
+                 ("ChangeMessageVisibilityBatch" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _cmvbQueueURL,
+               toQueryList
+                 "ChangeMessageVisibilityBatchRequestEntry"
+                 _cmvbEntries]
 
-instance ToHeaders ChangeMessageVisibilityBatch
+-- | For each message in the batch, the response contains a
+-- ChangeMessageVisibilityBatchResultEntry tag if the message succeeds or a
+-- BatchResultErrorEntry tag if the message fails.
+--
+-- /See:/ 'changeMessageVisibilityBatchResponse' smart constructor.
+data ChangeMessageVisibilityBatchResponse = ChangeMessageVisibilityBatchResponse'
+    { _cmvbrsStatus     :: !Int
+    , _cmvbrsSuccessful :: ![ChangeMessageVisibilityBatchResultEntry]
+    , _cmvbrsFailed     :: ![BatchResultErrorEntry]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ChangeMessageVisibilityBatch where
-    type Sv ChangeMessageVisibilityBatch = SQS
-    type Rs ChangeMessageVisibilityBatch = ChangeMessageVisibilityBatchResponse
+-- | Creates a value of 'ChangeMessageVisibilityBatchResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmvbrsStatus'
+--
+-- * 'cmvbrsSuccessful'
+--
+-- * 'cmvbrsFailed'
+changeMessageVisibilityBatchResponse
+    :: Int -- ^ 'cmvbrsStatus'
+    -> ChangeMessageVisibilityBatchResponse
+changeMessageVisibilityBatchResponse pStatus_ =
+    ChangeMessageVisibilityBatchResponse'
+    { _cmvbrsStatus = pStatus_
+    , _cmvbrsSuccessful = mempty
+    , _cmvbrsFailed = mempty
+    }
 
-    request  = post "ChangeMessageVisibilityBatch"
-    response = xmlResponse
+-- | The response status code.
+cmvbrsStatus :: Lens' ChangeMessageVisibilityBatchResponse Int
+cmvbrsStatus = lens _cmvbrsStatus (\ s a -> s{_cmvbrsStatus = a});
 
-instance FromXML ChangeMessageVisibilityBatchResponse where
-    parseXML = withElement "ChangeMessageVisibilityBatchResult" $ \x -> ChangeMessageVisibilityBatchResponse
-        <$> parseXML x
-        <*> parseXML x
+-- | A list of ChangeMessageVisibilityBatchResultEntry items.
+cmvbrsSuccessful :: Lens' ChangeMessageVisibilityBatchResponse [ChangeMessageVisibilityBatchResultEntry]
+cmvbrsSuccessful = lens _cmvbrsSuccessful (\ s a -> s{_cmvbrsSuccessful = a}) . _Coerce;
+
+-- | A list of BatchResultErrorEntry items.
+cmvbrsFailed :: Lens' ChangeMessageVisibilityBatchResponse [BatchResultErrorEntry]
+cmvbrsFailed = lens _cmvbrsFailed (\ s a -> s{_cmvbrsFailed = a}) . _Coerce;
diff --git a/gen/Network/AWS/SQS/CreateQueue.hs b/gen/Network/AWS/SQS/CreateQueue.hs
--- a/gen/Network/AWS/SQS/CreateQueue.hs
+++ b/gen/Network/AWS/SQS/CreateQueue.hs
@@ -1,93 +1,97 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.CreateQueue
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a new queue, or returns the URL of an existing one. When you request 'CreateQueue', you provide a name for the queue. To successfully create a new queue, you
--- must provide a name that is unique within the scope of your own queues.
+-- Creates a new queue, or returns the URL of an existing one. When you
+-- request 'CreateQueue', you provide a name for the queue. To successfully
+-- create a new queue, you must provide a name that is unique within the
+-- scope of your own queues.
 --
--- If you delete a queue, you must wait at least 60 seconds before creating a
--- queue with the same name.
+-- If you delete a queue, you must wait at least 60 seconds before creating
+-- a queue with the same name.
 --
--- You may pass one or more attributes in the request. If you do not provide a
--- value for any attribute, the queue will have the default value for that
--- attribute. Permitted attributes are the same that can be set using 'SetQueueAttributes'.
+-- You may pass one or more attributes in the request. If you do not
+-- provide a value for any attribute, the queue will have the default value
+-- for that attribute. Permitted attributes are the same that can be set
+-- using SetQueueAttributes.
 --
--- Use 'GetQueueUrl' to get a queue's URL. 'GetQueueUrl' requires only the 'QueueName'
--- parameter.
+-- Use GetQueueUrl to get a queue\'s URL. GetQueueUrl requires only the
+-- 'QueueName' parameter.
 --
--- If you provide the name of an existing queue, along with the exact names and
--- values of all the queue's attributes, 'CreateQueue' returns the queue URL for
--- the existing queue. If the queue name, attribute names, or attribute values
--- do not match an existing queue, 'CreateQueue' returns an error.
+-- If you provide the name of an existing queue, along with the exact names
+-- and values of all the queue\'s attributes, 'CreateQueue' returns the
+-- queue URL for the existing queue. If the queue name, attribute names, or
+-- attribute values do not match an existing queue, 'CreateQueue' returns
+-- an error.
 --
--- Some API actions take lists of parameters. These lists are specified using
--- the 'param.n' notation. Values of 'n' are integers starting from 1. For example,
--- a parameter list with two elements looks like this:  '&Attribute.1=this'
+-- Some API actions take lists of parameters. These lists are specified
+-- using the 'param.n' notation. Values of 'n' are integers starting from
+-- 1. For example, a parameter list with two elements looks like this:
 --
+-- '&Attribute.1=this'
+--
 -- '&Attribute.2=that'
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html AWS API Reference> for CreateQueue.
 module Network.AWS.SQS.CreateQueue
     (
-    -- * Request
-      CreateQueue
-    -- ** Request constructor
-    , createQueue
-    -- ** Request lenses
+    -- * Creating a Request
+      createQueue
+    , CreateQueue
+    -- * Request Lenses
     , cqAttributes
     , cqQueueName
 
-    -- * Response
-    , CreateQueueResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createQueueResponse
-    -- ** Response lenses
-    , cqrQueueUrl
+    , CreateQueueResponse
+    -- * Response Lenses
+    , cqrsQueueURL
+    , cqrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data CreateQueue = CreateQueue
-    { _cqAttributes :: EMap "entry" "Name" "Value" Text Text
-    , _cqQueueName  :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'createQueue' smart constructor.
+data CreateQueue = CreateQueue'
+    { _cqAttributes :: !(Maybe (Map QueueAttributeName Text))
+    , _cqQueueName  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateQueue' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateQueue' with the minimum fields required to make a request.
 --
--- * 'cqAttributes' @::@ 'HashMap' 'Text' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cqQueueName' @::@ 'Text'
+-- * 'cqAttributes'
 --
-createQueue :: Text -- ^ 'cqQueueName'
-            -> CreateQueue
-createQueue p1 = CreateQueue
-    { _cqQueueName  = p1
-    , _cqAttributes = mempty
+-- * 'cqQueueName'
+createQueue
+    :: Text -- ^ 'cqQueueName'
+    -> CreateQueue
+createQueue pQueueName_ =
+    CreateQueue'
+    { _cqAttributes = Nothing
+    , _cqQueueName = pQueueName_
     }
 
 -- | A map of attributes with their corresponding values.
@@ -95,63 +99,90 @@
 -- The following lists the names, descriptions, and values of the special
 -- request parameters the 'CreateQueue' action uses:
 --
--- 'DelaySeconds' - The time in seconds that the delivery of all messages in
--- the queue will be delayed. An integer from 0 to 900 (15 minutes). The default
--- for this attribute is 0 (zero).  'MaximumMessageSize' - The limit of how many
--- bytes a message can contain before Amazon SQS rejects it. An integer from
--- 1024 bytes (1 KiB) up to 262144 bytes (256 KiB). The default for this
--- attribute is 262144 (256 KiB).  'MessageRetentionPeriod' - The number of
--- seconds Amazon SQS retains a message. Integer representing seconds, from 60
--- (1 minute) to 1209600 (14 days). The default for this attribute is 345600 (4
--- days).  'Policy' - The queue's policy. A valid AWS policy. For more information
--- about policy structure, see <http://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html Overview of AWS IAM Policies> in the /Amazon IAMUser Guide/.  'ReceiveMessageWaitTimeSeconds' - The time for which a 'ReceiveMessage' call will wait for a message to arrive. An integer from 0 to 20 (seconds).
--- The default for this attribute is 0.   'VisibilityTimeout' - The visibility
--- timeout for the queue. An integer from 0 to 43200 (12 hours). The default for
--- this attribute is 30. For more information about visibility timeout, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html Visibility Timeout> in the /Amazon SQS Developer Guide/.
-cqAttributes :: Lens' CreateQueue (HashMap Text Text)
-cqAttributes = lens _cqAttributes (\s a -> s { _cqAttributes = a }) . _EMap
+-- -   'DelaySeconds' - The time in seconds that the delivery of all
+--     messages in the queue will be delayed. An integer from 0 to 900 (15
+--     minutes). The default for this attribute is 0 (zero).
+-- -   'MaximumMessageSize' - The limit of how many bytes a message can
+--     contain before Amazon SQS rejects it. An integer from 1024 bytes (1
+--     KiB) up to 262144 bytes (256 KiB). The default for this attribute is
+--     262144 (256 KiB).
+-- -   'MessageRetentionPeriod' - The number of seconds Amazon SQS retains
+--     a message. Integer representing seconds, from 60 (1 minute) to
+--     1209600 (14 days). The default for this attribute is 345600 (4
+--     days).
+-- -   'Policy' - The queue\'s policy. A valid AWS policy. For more
+--     information about policy structure, see
+--     <http://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html Overview of AWS IAM Policies>
+--     in the /Amazon IAM User Guide/.
+-- -   'ReceiveMessageWaitTimeSeconds' - The time for which a
+--     ReceiveMessage call will wait for a message to arrive. An integer
+--     from 0 to 20 (seconds). The default for this attribute is 0.
+-- -   'VisibilityTimeout' - The visibility timeout for the queue. An
+--     integer from 0 to 43200 (12 hours). The default for this attribute
+--     is 30. For more information about visibility timeout, see
+--     <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html Visibility Timeout>
+--     in the /Amazon SQS Developer Guide/.
+cqAttributes :: Lens' CreateQueue (HashMap QueueAttributeName Text)
+cqAttributes = lens _cqAttributes (\ s a -> s{_cqAttributes = a}) . _Default . _Map;
 
 -- | The name for the queue to be created.
 cqQueueName :: Lens' CreateQueue Text
-cqQueueName = lens _cqQueueName (\s a -> s { _cqQueueName = a })
-
-newtype CreateQueueResponse = CreateQueueResponse
-    { _cqrQueueUrl :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+cqQueueName = lens _cqQueueName (\ s a -> s{_cqQueueName = a});
 
--- | 'CreateQueueResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cqrQueueUrl' @::@ 'Maybe' 'Text'
---
-createQueueResponse :: CreateQueueResponse
-createQueueResponse = CreateQueueResponse
-    { _cqrQueueUrl = Nothing
-    }
+instance AWSRequest CreateQueue where
+        type Sv CreateQueue = SQS
+        type Rs CreateQueue = CreateQueueResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "CreateQueueResult"
+              (\ s h x ->
+                 CreateQueueResponse' <$>
+                   (x .@? "QueueUrl") <*> (pure (fromEnum s)))
 
--- | The URL for the created Amazon SQS queue.
-cqrQueueUrl :: Lens' CreateQueueResponse (Maybe Text)
-cqrQueueUrl = lens _cqrQueueUrl (\s a -> s { _cqrQueueUrl = a })
+instance ToHeaders CreateQueue where
+        toHeaders = const mempty
 
 instance ToPath CreateQueue where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateQueue where
-    toQuery CreateQueue{..} = mconcat
-        [ toQuery    _cqAttributes
-        , "QueueName" =? _cqQueueName
-        ]
+        toQuery CreateQueue'{..}
+          = mconcat
+              ["Action" =: ("CreateQueue" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               toQuery
+                 (toQueryMap "Attribute" "Name" "Value" <$>
+                    _cqAttributes),
+               "QueueName" =: _cqQueueName]
 
-instance ToHeaders CreateQueue
+-- | Returns the QueueUrl element of the created queue.
+--
+-- /See:/ 'createQueueResponse' smart constructor.
+data CreateQueueResponse = CreateQueueResponse'
+    { _cqrsQueueURL :: !(Maybe Text)
+    , _cqrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest CreateQueue where
-    type Sv CreateQueue = SQS
-    type Rs CreateQueue = CreateQueueResponse
+-- | Creates a value of 'CreateQueueResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cqrsQueueURL'
+--
+-- * 'cqrsStatus'
+createQueueResponse
+    :: Int -- ^ 'cqrsStatus'
+    -> CreateQueueResponse
+createQueueResponse pStatus_ =
+    CreateQueueResponse'
+    { _cqrsQueueURL = Nothing
+    , _cqrsStatus = pStatus_
+    }
 
-    request  = post "CreateQueue"
-    response = xmlResponse
+-- | The URL for the created Amazon SQS queue.
+cqrsQueueURL :: Lens' CreateQueueResponse (Maybe Text)
+cqrsQueueURL = lens _cqrsQueueURL (\ s a -> s{_cqrsQueueURL = a});
 
-instance FromXML CreateQueueResponse where
-    parseXML = withElement "CreateQueueResult" $ \x -> CreateQueueResponse
-        <$> x .@? "QueueUrl"
+-- | The response status code.
+cqrsStatus :: Lens' CreateQueueResponse Int
+cqrsStatus = lens _cqrsStatus (\ s a -> s{_cqrsStatus = a});
diff --git a/gen/Network/AWS/SQS/DeleteMessage.hs b/gen/Network/AWS/SQS/DeleteMessage.hs
--- a/gen/Network/AWS/SQS/DeleteMessage.hs
+++ b/gen/Network/AWS/SQS/DeleteMessage.hs
@@ -1,122 +1,125 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.DeleteMessage
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the specified message from the specified queue. You specify the
--- message by using the message's 'receipt handle' and not the 'message ID' you
--- received when you sent the message. Even if the message is locked by another
--- reader due to the visibility timeout setting, it is still deleted from the
--- queue. If you leave a message in the queue for longer than the queue's
--- configured retention period, Amazon SQS automatically deletes it.
---
--- The receipt handle is associated with a specific instance of receiving the
--- message. If you receive a message more than once, the receipt handle you get
--- each time you receive the message is different. When you request 'DeleteMessage'
--- , if you don't provide the most recently received receipt handle for the
--- message, the request will still succeed, but the message might not be
--- deleted.
---
--- It is possible you will receive a message even after you have deleted it.
--- This might happen on rare occasions if one of the servers storing a copy of
--- the message is unavailable when you request to delete the message. The copy
--- remains on the server and might be returned to you again on a subsequent
--- receive request. You should create your system to be idempotent so that
--- receiving a particular message more than once is not a problem.
+-- Deletes the specified message from the specified queue. You specify the
+-- message by using the message\'s 'receipt handle' and not the
+-- 'message ID' you received when you sent the message. Even if the message
+-- is locked by another reader due to the visibility timeout setting, it is
+-- still deleted from the queue. If you leave a message in the queue for
+-- longer than the queue\'s configured retention period, Amazon SQS
+-- automatically deletes it.
 --
+-- The receipt handle is associated with a specific instance of receiving
+-- the message. If you receive a message more than once, the receipt handle
+-- you get each time you receive the message is different. When you request
+-- 'DeleteMessage', if you don\'t provide the most recently received
+-- receipt handle for the message, the request will still succeed, but the
+-- message might not be deleted.
 --
+-- It is possible you will receive a message even after you have deleted
+-- it. This might happen on rare occasions if one of the servers storing a
+-- copy of the message is unavailable when you request to delete the
+-- message. The copy remains on the server and might be returned to you
+-- again on a subsequent receive request. You should create your system to
+-- be idempotent so that receiving a particular message more than once is
+-- not a problem.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html AWS API Reference> for DeleteMessage.
 module Network.AWS.SQS.DeleteMessage
     (
-    -- * Request
-      DeleteMessage
-    -- ** Request constructor
-    , deleteMessage
-    -- ** Request lenses
-    , dmQueueUrl
+    -- * Creating a Request
+      deleteMessage
+    , DeleteMessage
+    -- * Request Lenses
+    , dmQueueURL
     , dmReceiptHandle
 
-    -- * Response
-    , DeleteMessageResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteMessageResponse
+    , DeleteMessageResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data DeleteMessage = DeleteMessage
-    { _dmQueueUrl      :: Text
-    , _dmReceiptHandle :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'deleteMessage' smart constructor.
+data DeleteMessage = DeleteMessage'
+    { _dmQueueURL      :: !Text
+    , _dmReceiptHandle :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteMessage' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteMessage' with the minimum fields required to make a request.
 --
--- * 'dmQueueUrl' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dmReceiptHandle' @::@ 'Text'
+-- * 'dmQueueURL'
 --
-deleteMessage :: Text -- ^ 'dmQueueUrl'
-              -> Text -- ^ 'dmReceiptHandle'
-              -> DeleteMessage
-deleteMessage p1 p2 = DeleteMessage
-    { _dmQueueUrl      = p1
-    , _dmReceiptHandle = p2
+-- * 'dmReceiptHandle'
+deleteMessage
+    :: Text -- ^ 'dmQueueURL'
+    -> Text -- ^ 'dmReceiptHandle'
+    -> DeleteMessage
+deleteMessage pQueueURL_ pReceiptHandle_ =
+    DeleteMessage'
+    { _dmQueueURL = pQueueURL_
+    , _dmReceiptHandle = pReceiptHandle_
     }
 
 -- | The URL of the Amazon SQS queue to take action on.
-dmQueueUrl :: Lens' DeleteMessage Text
-dmQueueUrl = lens _dmQueueUrl (\s a -> s { _dmQueueUrl = a })
+dmQueueURL :: Lens' DeleteMessage Text
+dmQueueURL = lens _dmQueueURL (\ s a -> s{_dmQueueURL = a});
 
 -- | The receipt handle associated with the message to delete.
 dmReceiptHandle :: Lens' DeleteMessage Text
-dmReceiptHandle = lens _dmReceiptHandle (\s a -> s { _dmReceiptHandle = a })
+dmReceiptHandle = lens _dmReceiptHandle (\ s a -> s{_dmReceiptHandle = a});
 
-data DeleteMessageResponse = DeleteMessageResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteMessage where
+        type Sv DeleteMessage = SQS
+        type Rs DeleteMessage = DeleteMessageResponse
+        request = postQuery
+        response = receiveNull DeleteMessageResponse'
 
--- | 'DeleteMessageResponse' constructor.
-deleteMessageResponse :: DeleteMessageResponse
-deleteMessageResponse = DeleteMessageResponse
+instance ToHeaders DeleteMessage where
+        toHeaders = const mempty
 
 instance ToPath DeleteMessage where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteMessage where
-    toQuery DeleteMessage{..} = mconcat
-        [ "QueueUrl"      =? _dmQueueUrl
-        , "ReceiptHandle" =? _dmReceiptHandle
-        ]
-
-instance ToHeaders DeleteMessage
+        toQuery DeleteMessage'{..}
+          = mconcat
+              ["Action" =: ("DeleteMessage" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _dmQueueURL,
+               "ReceiptHandle" =: _dmReceiptHandle]
 
-instance AWSRequest DeleteMessage where
-    type Sv DeleteMessage = SQS
-    type Rs DeleteMessage = DeleteMessageResponse
+-- | /See:/ 'deleteMessageResponse' smart constructor.
+data DeleteMessageResponse =
+    DeleteMessageResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteMessage"
-    response = nullResponse DeleteMessageResponse
+-- | Creates a value of 'DeleteMessageResponse' with the minimum fields required to make a request.
+--
+deleteMessageResponse
+    :: DeleteMessageResponse
+deleteMessageResponse = DeleteMessageResponse'
diff --git a/gen/Network/AWS/SQS/DeleteMessageBatch.hs b/gen/Network/AWS/SQS/DeleteMessageBatch.hs
--- a/gen/Network/AWS/SQS/DeleteMessageBatch.hs
+++ b/gen/Network/AWS/SQS/DeleteMessageBatch.hs
@@ -1,140 +1,160 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.DeleteMessageBatch
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes up to ten messages from the specified queue. This is a batch version
--- of 'DeleteMessage'. The result of the delete action on each message is reported
--- individually in the response.
+-- Deletes up to ten messages from the specified queue. This is a batch
+-- version of DeleteMessage. The result of the delete action on each
+-- message is reported individually in the response.
 --
 -- Because the batch request can result in a combination of successful and
--- unsuccessful actions, you should check for batch errors even when the call
--- returns an HTTP status code of 200.
+-- unsuccessful actions, you should check for batch errors even when the
+-- call returns an HTTP status code of 200.
 --
--- Some API actions take lists of parameters. These lists are specified using
--- the 'param.n' notation. Values of 'n' are integers starting from 1. For example,
--- a parameter list with two elements looks like this:  '&Attribute.1=this'
+-- Some API actions take lists of parameters. These lists are specified
+-- using the 'param.n' notation. Values of 'n' are integers starting from
+-- 1. For example, a parameter list with two elements looks like this:
 --
+-- '&Attribute.1=this'
+--
 -- '&Attribute.2=that'
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessageBatch.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessageBatch.html AWS API Reference> for DeleteMessageBatch.
 module Network.AWS.SQS.DeleteMessageBatch
     (
-    -- * Request
-      DeleteMessageBatch
-    -- ** Request constructor
-    , deleteMessageBatch
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteMessageBatch
+    , DeleteMessageBatch
+    -- * Request Lenses
+    , dmbQueueURL
     , dmbEntries
-    , dmbQueueUrl
 
-    -- * Response
-    , DeleteMessageBatchResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteMessageBatchResponse
-    -- ** Response lenses
-    , dmbrFailed
-    , dmbrSuccessful
+    , DeleteMessageBatchResponse
+    -- * Response Lenses
+    , dmbrsStatus
+    , dmbrsSuccessful
+    , dmbrsFailed
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data DeleteMessageBatch = DeleteMessageBatch
-    { _dmbEntries  :: List "member" DeleteMessageBatchRequestEntry
-    , _dmbQueueUrl :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'deleteMessageBatch' smart constructor.
+data DeleteMessageBatch = DeleteMessageBatch'
+    { _dmbQueueURL :: !Text
+    , _dmbEntries  :: ![DeleteMessageBatchRequestEntry]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteMessageBatch' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteMessageBatch' with the minimum fields required to make a request.
 --
--- * 'dmbEntries' @::@ ['DeleteMessageBatchRequestEntry']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dmbQueueUrl' @::@ 'Text'
+-- * 'dmbQueueURL'
 --
-deleteMessageBatch :: Text -- ^ 'dmbQueueUrl'
-                   -> DeleteMessageBatch
-deleteMessageBatch p1 = DeleteMessageBatch
-    { _dmbQueueUrl = p1
-    , _dmbEntries  = mempty
+-- * 'dmbEntries'
+deleteMessageBatch
+    :: Text -- ^ 'dmbQueueURL'
+    -> DeleteMessageBatch
+deleteMessageBatch pQueueURL_ =
+    DeleteMessageBatch'
+    { _dmbQueueURL = pQueueURL_
+    , _dmbEntries = mempty
     }
 
+-- | The URL of the Amazon SQS queue to take action on.
+dmbQueueURL :: Lens' DeleteMessageBatch Text
+dmbQueueURL = lens _dmbQueueURL (\ s a -> s{_dmbQueueURL = a});
+
 -- | A list of receipt handles for the messages to be deleted.
 dmbEntries :: Lens' DeleteMessageBatch [DeleteMessageBatchRequestEntry]
-dmbEntries = lens _dmbEntries (\s a -> s { _dmbEntries = a }) . _List
+dmbEntries = lens _dmbEntries (\ s a -> s{_dmbEntries = a}) . _Coerce;
 
--- | The URL of the Amazon SQS queue to take action on.
-dmbQueueUrl :: Lens' DeleteMessageBatch Text
-dmbQueueUrl = lens _dmbQueueUrl (\s a -> s { _dmbQueueUrl = a })
+instance AWSRequest DeleteMessageBatch where
+        type Sv DeleteMessageBatch = SQS
+        type Rs DeleteMessageBatch =
+             DeleteMessageBatchResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "DeleteMessageBatchResult"
+              (\ s h x ->
+                 DeleteMessageBatchResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (parseXMLList "DeleteMessageBatchResultEntry" x)
+                     <*> (parseXMLList "BatchResultErrorEntry" x))
 
-data DeleteMessageBatchResponse = DeleteMessageBatchResponse
-    { _dmbrFailed     :: List "member" BatchResultErrorEntry
-    , _dmbrSuccessful :: List "member" DeleteMessageBatchResultEntry
-    } deriving (Eq, Read, Show)
+instance ToHeaders DeleteMessageBatch where
+        toHeaders = const mempty
 
--- | 'DeleteMessageBatchResponse' constructor.
+instance ToPath DeleteMessageBatch where
+        toPath = const "/"
+
+instance ToQuery DeleteMessageBatch where
+        toQuery DeleteMessageBatch'{..}
+          = mconcat
+              ["Action" =: ("DeleteMessageBatch" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _dmbQueueURL,
+               toQueryList "DeleteMessageBatchRequestEntry"
+                 _dmbEntries]
+
+-- | For each message in the batch, the response contains a
+-- DeleteMessageBatchResultEntry tag if the message is deleted or a
+-- BatchResultErrorEntry tag if the message cannot be deleted.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteMessageBatchResponse' smart constructor.
+data DeleteMessageBatchResponse = DeleteMessageBatchResponse'
+    { _dmbrsStatus     :: !Int
+    , _dmbrsSuccessful :: ![DeleteMessageBatchResultEntry]
+    , _dmbrsFailed     :: ![BatchResultErrorEntry]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteMessageBatchResponse' with the minimum fields required to make a request.
 --
--- * 'dmbrFailed' @::@ ['BatchResultErrorEntry']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dmbrSuccessful' @::@ ['DeleteMessageBatchResultEntry']
+-- * 'dmbrsStatus'
 --
-deleteMessageBatchResponse :: DeleteMessageBatchResponse
-deleteMessageBatchResponse = DeleteMessageBatchResponse
-    { _dmbrSuccessful = mempty
-    , _dmbrFailed     = mempty
+-- * 'dmbrsSuccessful'
+--
+-- * 'dmbrsFailed'
+deleteMessageBatchResponse
+    :: Int -- ^ 'dmbrsStatus'
+    -> DeleteMessageBatchResponse
+deleteMessageBatchResponse pStatus_ =
+    DeleteMessageBatchResponse'
+    { _dmbrsStatus = pStatus_
+    , _dmbrsSuccessful = mempty
+    , _dmbrsFailed = mempty
     }
 
--- | A list of 'BatchResultErrorEntry' items.
-dmbrFailed :: Lens' DeleteMessageBatchResponse [BatchResultErrorEntry]
-dmbrFailed = lens _dmbrFailed (\s a -> s { _dmbrFailed = a }) . _List
-
--- | A list of 'DeleteMessageBatchResultEntry' items.
-dmbrSuccessful :: Lens' DeleteMessageBatchResponse [DeleteMessageBatchResultEntry]
-dmbrSuccessful = lens _dmbrSuccessful (\s a -> s { _dmbrSuccessful = a }) . _List
-
-instance ToPath DeleteMessageBatch where
-    toPath = const "/"
-
-instance ToQuery DeleteMessageBatch where
-    toQuery DeleteMessageBatch{..} = mconcat
-        [ toQuery   _dmbEntries
-        , "QueueUrl" =? _dmbQueueUrl
-        ]
-
-instance ToHeaders DeleteMessageBatch
-
-instance AWSRequest DeleteMessageBatch where
-    type Sv DeleteMessageBatch = SQS
-    type Rs DeleteMessageBatch = DeleteMessageBatchResponse
+-- | The response status code.
+dmbrsStatus :: Lens' DeleteMessageBatchResponse Int
+dmbrsStatus = lens _dmbrsStatus (\ s a -> s{_dmbrsStatus = a});
 
-    request  = post "DeleteMessageBatch"
-    response = xmlResponse
+-- | A list of DeleteMessageBatchResultEntry items.
+dmbrsSuccessful :: Lens' DeleteMessageBatchResponse [DeleteMessageBatchResultEntry]
+dmbrsSuccessful = lens _dmbrsSuccessful (\ s a -> s{_dmbrsSuccessful = a}) . _Coerce;
 
-instance FromXML DeleteMessageBatchResponse where
-    parseXML = withElement "DeleteMessageBatchResult" $ \x -> DeleteMessageBatchResponse
-        <$> parseXML x
-        <*> parseXML x
+-- | A list of BatchResultErrorEntry items.
+dmbrsFailed :: Lens' DeleteMessageBatchResponse [BatchResultErrorEntry]
+dmbrsFailed = lens _dmbrsFailed (\ s a -> s{_dmbrsFailed = a}) . _Coerce;
diff --git a/gen/Network/AWS/SQS/DeleteQueue.hs b/gen/Network/AWS/SQS/DeleteQueue.hs
--- a/gen/Network/AWS/SQS/DeleteQueue.hs
+++ b/gen/Network/AWS/SQS/DeleteQueue.hs
@@ -1,105 +1,110 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.DeleteQueue
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the queue specified by the queue URL, regardless of whether the
--- queue is empty. If the specified queue does not exist, Amazon SQS returns a
--- successful response.
+-- Deletes the queue specified by the __queue URL__, regardless of whether
+-- the queue is empty. If the specified queue does not exist, Amazon SQS
+-- returns a successful response.
 --
--- Use 'DeleteQueue' with care; once you delete your queue, any messages in the
--- queue are no longer available.
+-- Use 'DeleteQueue' with care; once you delete your queue, any messages in
+-- the queue are no longer available.
 --
 -- When you delete a queue, the deletion process takes up to 60 seconds.
--- Requests you send involving that queue during the 60 seconds might succeed.
--- For example, a 'SendMessage' request might succeed, but after the 60 seconds,
--- the queue and that message you sent no longer exist. Also, when you delete a
--- queue, you must wait at least 60 seconds before creating a queue with the
--- same name.
+-- Requests you send involving that queue during the 60 seconds might
+-- succeed. For example, a SendMessage request might succeed, but after the
+-- 60 seconds, the queue and that message you sent no longer exist. Also,
+-- when you delete a queue, you must wait at least 60 seconds before
+-- creating a queue with the same name.
 --
 -- We reserve the right to delete queues that have had no activity for more
--- than 30 days. For more information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSConcepts.html How Amazon SQS Queues Work> in the /Amazon SQS Developer Guide/.
+-- than 30 days. For more information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSConcepts.html How Amazon SQS Queues Work>
+-- in the /Amazon SQS Developer Guide/.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteQueue.html AWS API Reference> for DeleteQueue.
 module Network.AWS.SQS.DeleteQueue
     (
-    -- * Request
-      DeleteQueue
-    -- ** Request constructor
-    , deleteQueue
-    -- ** Request lenses
-    , dqQueueUrl
+    -- * Creating a Request
+      deleteQueue
+    , DeleteQueue
+    -- * Request Lenses
+    , dqQueueURL
 
-    -- * Response
-    , DeleteQueueResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteQueueResponse
+    , DeleteQueueResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-newtype DeleteQueue = DeleteQueue
-    { _dqQueueUrl :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'deleteQueue' smart constructor.
+newtype DeleteQueue = DeleteQueue'
+    { _dqQueueURL :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteQueue' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteQueue' with the minimum fields required to make a request.
 --
--- * 'dqQueueUrl' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteQueue :: Text -- ^ 'dqQueueUrl'
-            -> DeleteQueue
-deleteQueue p1 = DeleteQueue
-    { _dqQueueUrl = p1
+-- * 'dqQueueURL'
+deleteQueue
+    :: Text -- ^ 'dqQueueURL'
+    -> DeleteQueue
+deleteQueue pQueueURL_ =
+    DeleteQueue'
+    { _dqQueueURL = pQueueURL_
     }
 
 -- | The URL of the Amazon SQS queue to take action on.
-dqQueueUrl :: Lens' DeleteQueue Text
-dqQueueUrl = lens _dqQueueUrl (\s a -> s { _dqQueueUrl = a })
+dqQueueURL :: Lens' DeleteQueue Text
+dqQueueURL = lens _dqQueueURL (\ s a -> s{_dqQueueURL = a});
 
-data DeleteQueueResponse = DeleteQueueResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteQueue where
+        type Sv DeleteQueue = SQS
+        type Rs DeleteQueue = DeleteQueueResponse
+        request = postQuery
+        response = receiveNull DeleteQueueResponse'
 
--- | 'DeleteQueueResponse' constructor.
-deleteQueueResponse :: DeleteQueueResponse
-deleteQueueResponse = DeleteQueueResponse
+instance ToHeaders DeleteQueue where
+        toHeaders = const mempty
 
 instance ToPath DeleteQueue where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteQueue where
-    toQuery DeleteQueue{..} = mconcat
-        [ "QueueUrl" =? _dqQueueUrl
-        ]
-
-instance ToHeaders DeleteQueue
+        toQuery DeleteQueue'{..}
+          = mconcat
+              ["Action" =: ("DeleteQueue" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _dqQueueURL]
 
-instance AWSRequest DeleteQueue where
-    type Sv DeleteQueue = SQS
-    type Rs DeleteQueue = DeleteQueueResponse
+-- | /See:/ 'deleteQueueResponse' smart constructor.
+data DeleteQueueResponse =
+    DeleteQueueResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteQueue"
-    response = nullResponse DeleteQueueResponse
+-- | Creates a value of 'DeleteQueueResponse' with the minimum fields required to make a request.
+--
+deleteQueueResponse
+    :: DeleteQueueResponse
+deleteQueueResponse = DeleteQueueResponse'
diff --git a/gen/Network/AWS/SQS/GetQueueAttributes.hs b/gen/Network/AWS/SQS/GetQueueAttributes.hs
--- a/gen/Network/AWS/SQS/GetQueueAttributes.hs
+++ b/gen/Network/AWS/SQS/GetQueueAttributes.hs
@@ -1,143 +1,182 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.GetQueueAttributes
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Gets attributes for the specified queue. The following attributes are
--- supported:   'All' - returns all values.  'ApproximateNumberOfMessages' - returns
--- the approximate number of visible messages in a queue. For more information,
--- see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ApproximateNumber.html Resources Required to Process Messages> in the /Amazon SQS Developer Guide/.
--- 'ApproximateNumberOfMessagesNotVisible' - returns the approximate number of
--- messages that are not timed-out and not deleted. For more information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ApproximateNumber.html Resources Required to Process Messages> in the /Amazon SQS Developer Guide/.  'VisibilityTimeout' - returns the
--- visibility timeout for the queue. For more information about visibility
--- timeout, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html Visibility Timeout> in the /Amazon SQS Developer Guide/.  'CreatedTimestamp' - returns the time when the queue was created (epoch time in seconds).  'LastModifiedTimestamp' - returns the time when the queue was last changed (epoch time in seconds).  'Policy' - returns the queue's policy.  'MaximumMessageSize' - returns the limit
--- of how many bytes a message can contain before Amazon SQS rejects it.  'MessageRetentionPeriod' - returns the number of seconds Amazon SQS retains a message.  'QueueArn' -
--- returns the queue's Amazon resource name (ARN).  'ApproximateNumberOfMessagesDelayed' - returns the approximate number of messages that are pending to be added to
--- the queue.  'DelaySeconds' - returns the default delay on the queue in seconds.
--- 'ReceiveMessageWaitTimeSeconds' - returns the time for which a ReceiveMessage
--- call will wait for a message to arrive.  'RedrivePolicy' - returns the
--- parameters for dead letter queue functionality of the source queue. For more
--- information about RedrivePolicy and dead letter queues, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html Using Amazon SQSDead Letter Queues> in the /Amazon SQS Developer Guide/.
+-- Gets attributes for the specified queue. The following attributes are
+-- supported:
 --
--- Going forward, new attributes might be added. If you are writing code that
--- calls this action, we recommend that you structure your code so that it can
--- handle new attributes gracefully. Some API actions take lists of parameters.
--- These lists are specified using the 'param.n' notation. Values of 'n' are
--- integers starting from 1. For example, a parameter list with two elements
--- looks like this:  '&Attribute.1=this'
+-- -   'All' - returns all values.
+-- -   'ApproximateNumberOfMessages' - returns the approximate number of
+--     visible messages in a queue. For more information, see
+--     <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ApproximateNumber.html Resources Required to Process Messages>
+--     in the /Amazon SQS Developer Guide/.
+-- -   'ApproximateNumberOfMessagesNotVisible' - returns the approximate
+--     number of messages that are not timed-out and not deleted. For more
+--     information, see
+--     <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ApproximateNumber.html Resources Required to Process Messages>
+--     in the /Amazon SQS Developer Guide/.
+-- -   'VisibilityTimeout' - returns the visibility timeout for the queue.
+--     For more information about visibility timeout, see
+--     <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html Visibility Timeout>
+--     in the /Amazon SQS Developer Guide/.
+-- -   'CreatedTimestamp' - returns the time when the queue was created
+--     (epoch time in seconds).
+-- -   'LastModifiedTimestamp' - returns the time when the queue was last
+--     changed (epoch time in seconds).
+-- -   'Policy' - returns the queue\'s policy.
+-- -   'MaximumMessageSize' - returns the limit of how many bytes a message
+--     can contain before Amazon SQS rejects it.
+-- -   'MessageRetentionPeriod' - returns the number of seconds Amazon SQS
+--     retains a message.
+-- -   'QueueArn' - returns the queue\'s Amazon resource name (ARN).
+-- -   'ApproximateNumberOfMessagesDelayed' - returns the approximate
+--     number of messages that are pending to be added to the queue.
+-- -   'DelaySeconds' - returns the default delay on the queue in seconds.
+-- -   'ReceiveMessageWaitTimeSeconds' - returns the time for which a
+--     ReceiveMessage call will wait for a message to arrive.
+-- -   'RedrivePolicy' - returns the parameters for dead letter queue
+--     functionality of the source queue. For more information about
+--     RedrivePolicy and dead letter queues, see
+--     <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html Using Amazon SQS Dead Letter Queues>
+--     in the /Amazon SQS Developer Guide/.
 --
+-- Going forward, new attributes might be added. If you are writing code
+-- that calls this action, we recommend that you structure your code so
+-- that it can handle new attributes gracefully.
+--
+-- Some API actions take lists of parameters. These lists are specified
+-- using the 'param.n' notation. Values of 'n' are integers starting from
+-- 1. For example, a parameter list with two elements looks like this:
+--
+-- '&Attribute.1=this'
+--
 -- '&Attribute.2=that'
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html AWS API Reference> for GetQueueAttributes.
 module Network.AWS.SQS.GetQueueAttributes
     (
-    -- * Request
-      GetQueueAttributes
-    -- ** Request constructor
-    , getQueueAttributes
-    -- ** Request lenses
+    -- * Creating a Request
+      getQueueAttributes
+    , GetQueueAttributes
+    -- * Request Lenses
     , gqaAttributeNames
-    , gqaQueueUrl
+    , gqaQueueURL
 
-    -- * Response
-    , GetQueueAttributesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getQueueAttributesResponse
-    -- ** Response lenses
-    , gqarAttributes
+    , GetQueueAttributesResponse
+    -- * Response Lenses
+    , gqarsAttributes
+    , gqarsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data GetQueueAttributes = GetQueueAttributes
-    { _gqaAttributeNames :: List "member" Text
-    , _gqaQueueUrl       :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'getQueueAttributes' smart constructor.
+data GetQueueAttributes = GetQueueAttributes'
+    { _gqaAttributeNames :: !(Maybe [QueueAttributeName])
+    , _gqaQueueURL       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetQueueAttributes' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetQueueAttributes' with the minimum fields required to make a request.
 --
--- * 'gqaAttributeNames' @::@ ['Text']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gqaQueueUrl' @::@ 'Text'
+-- * 'gqaAttributeNames'
 --
-getQueueAttributes :: Text -- ^ 'gqaQueueUrl'
-                   -> GetQueueAttributes
-getQueueAttributes p1 = GetQueueAttributes
-    { _gqaQueueUrl       = p1
-    , _gqaAttributeNames = mempty
+-- * 'gqaQueueURL'
+getQueueAttributes
+    :: Text -- ^ 'gqaQueueURL'
+    -> GetQueueAttributes
+getQueueAttributes pQueueURL_ =
+    GetQueueAttributes'
+    { _gqaAttributeNames = Nothing
+    , _gqaQueueURL = pQueueURL_
     }
 
 -- | A list of attributes to retrieve information for.
-gqaAttributeNames :: Lens' GetQueueAttributes [Text]
-gqaAttributeNames =
-    lens _gqaAttributeNames (\s a -> s { _gqaAttributeNames = a })
-        . _List
+gqaAttributeNames :: Lens' GetQueueAttributes [QueueAttributeName]
+gqaAttributeNames = lens _gqaAttributeNames (\ s a -> s{_gqaAttributeNames = a}) . _Default . _Coerce;
 
 -- | The URL of the Amazon SQS queue to take action on.
-gqaQueueUrl :: Lens' GetQueueAttributes Text
-gqaQueueUrl = lens _gqaQueueUrl (\s a -> s { _gqaQueueUrl = a })
-
-newtype GetQueueAttributesResponse = GetQueueAttributesResponse
-    { _gqarAttributes :: EMap "entry" "Name" "Value" Text Text
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+gqaQueueURL :: Lens' GetQueueAttributes Text
+gqaQueueURL = lens _gqaQueueURL (\ s a -> s{_gqaQueueURL = a});
 
--- | 'GetQueueAttributesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gqarAttributes' @::@ 'HashMap' 'Text' 'Text'
---
-getQueueAttributesResponse :: GetQueueAttributesResponse
-getQueueAttributesResponse = GetQueueAttributesResponse
-    { _gqarAttributes = mempty
-    }
+instance AWSRequest GetQueueAttributes where
+        type Sv GetQueueAttributes = SQS
+        type Rs GetQueueAttributes =
+             GetQueueAttributesResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "GetQueueAttributesResult"
+              (\ s h x ->
+                 GetQueueAttributesResponse' <$>
+                   (may (parseXMLMap "Attribute" "Name" "Value") x) <*>
+                     (pure (fromEnum s)))
 
--- | A map of attributes to the respective values.
-gqarAttributes :: Lens' GetQueueAttributesResponse (HashMap Text Text)
-gqarAttributes = lens _gqarAttributes (\s a -> s { _gqarAttributes = a }) . _EMap
+instance ToHeaders GetQueueAttributes where
+        toHeaders = const mempty
 
 instance ToPath GetQueueAttributes where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GetQueueAttributes where
-    toQuery GetQueueAttributes{..} = mconcat
-        [ toQuery         _gqaAttributeNames
-        , "QueueUrl"       =? _gqaQueueUrl
-        ]
+        toQuery GetQueueAttributes'{..}
+          = mconcat
+              ["Action" =: ("GetQueueAttributes" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               toQuery
+                 (toQueryList "AttributeName" <$> _gqaAttributeNames),
+               "QueueUrl" =: _gqaQueueURL]
 
-instance ToHeaders GetQueueAttributes
+-- | A list of returned queue attributes.
+--
+-- /See:/ 'getQueueAttributesResponse' smart constructor.
+data GetQueueAttributesResponse = GetQueueAttributesResponse'
+    { _gqarsAttributes :: !(Maybe (Map QueueAttributeName Text))
+    , _gqarsStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetQueueAttributes where
-    type Sv GetQueueAttributes = SQS
-    type Rs GetQueueAttributes = GetQueueAttributesResponse
+-- | Creates a value of 'GetQueueAttributesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gqarsAttributes'
+--
+-- * 'gqarsStatus'
+getQueueAttributesResponse
+    :: Int -- ^ 'gqarsStatus'
+    -> GetQueueAttributesResponse
+getQueueAttributesResponse pStatus_ =
+    GetQueueAttributesResponse'
+    { _gqarsAttributes = Nothing
+    , _gqarsStatus = pStatus_
+    }
 
-    request  = post "GetQueueAttributes"
-    response = xmlResponse
+-- | A map of attributes to the respective values.
+gqarsAttributes :: Lens' GetQueueAttributesResponse (HashMap QueueAttributeName Text)
+gqarsAttributes = lens _gqarsAttributes (\ s a -> s{_gqarsAttributes = a}) . _Default . _Map;
 
-instance FromXML GetQueueAttributesResponse where
-    parseXML = withElement "GetQueueAttributesResult" $ \x -> GetQueueAttributesResponse
-        <$> parseXML x
+-- | The response status code.
+gqarsStatus :: Lens' GetQueueAttributesResponse Int
+gqarsStatus = lens _gqarsStatus (\ s a -> s{_gqarsStatus = a});
diff --git a/gen/Network/AWS/SQS/GetQueueURL.hs b/gen/Network/AWS/SQS/GetQueueURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SQS/GetQueueURL.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SQS.GetQueueURL
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the URL of an existing queue. This action provides a simple way
+-- to retrieve the URL of an Amazon SQS queue.
+--
+-- To access a queue that belongs to another AWS account, use the
+-- 'QueueOwnerAWSAccountId' parameter to specify the account ID of the
+-- queue\'s owner. The queue\'s owner must grant you permission to access
+-- the queue. For more information about shared queue access, see
+-- AddPermission or go to
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/acp-overview.html Shared Queues>
+-- in the /Amazon SQS Developer Guide/.
+--
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueURL.html AWS API Reference> for GetQueueURL.
+module Network.AWS.SQS.GetQueueURL
+    (
+    -- * Creating a Request
+      getQueueURL
+    , GetQueueURL
+    -- * Request Lenses
+    , gquQueueOwnerAWSAccountId
+    , gquQueueName
+
+    -- * Destructuring the Response
+    , getQueueURLResponse
+    , GetQueueURLResponse
+    -- * Response Lenses
+    , gqursStatus
+    , gqursQueueURL
+    ) where
+
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
+
+-- | /See:/ 'getQueueURL' smart constructor.
+data GetQueueURL = GetQueueURL'
+    { _gquQueueOwnerAWSAccountId :: !(Maybe Text)
+    , _gquQueueName              :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetQueueURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gquQueueOwnerAWSAccountId'
+--
+-- * 'gquQueueName'
+getQueueURL
+    :: Text -- ^ 'gquQueueName'
+    -> GetQueueURL
+getQueueURL pQueueName_ =
+    GetQueueURL'
+    { _gquQueueOwnerAWSAccountId = Nothing
+    , _gquQueueName = pQueueName_
+    }
+
+-- | The AWS account ID of the account that created the queue.
+gquQueueOwnerAWSAccountId :: Lens' GetQueueURL (Maybe Text)
+gquQueueOwnerAWSAccountId = lens _gquQueueOwnerAWSAccountId (\ s a -> s{_gquQueueOwnerAWSAccountId = a});
+
+-- | The name of the queue whose URL must be fetched. Maximum 80 characters;
+-- alphanumeric characters, hyphens (-), and underscores (_) are allowed.
+gquQueueName :: Lens' GetQueueURL Text
+gquQueueName = lens _gquQueueName (\ s a -> s{_gquQueueName = a});
+
+instance AWSRequest GetQueueURL where
+        type Sv GetQueueURL = SQS
+        type Rs GetQueueURL = GetQueueURLResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "GetQueueUrlResult"
+              (\ s h x ->
+                 GetQueueURLResponse' <$>
+                   (pure (fromEnum s)) <*> (x .@ "QueueUrl"))
+
+instance ToHeaders GetQueueURL where
+        toHeaders = const mempty
+
+instance ToPath GetQueueURL where
+        toPath = const "/"
+
+instance ToQuery GetQueueURL where
+        toQuery GetQueueURL'{..}
+          = mconcat
+              ["Action" =: ("GetQueueUrl" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueOwnerAWSAccountId" =:
+                 _gquQueueOwnerAWSAccountId,
+               "QueueName" =: _gquQueueName]
+
+-- | For more information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UnderstandingResponses.html Responses>
+-- in the /Amazon SQS Developer Guide/.
+--
+-- /See:/ 'getQueueURLResponse' smart constructor.
+data GetQueueURLResponse = GetQueueURLResponse'
+    { _gqursStatus   :: !Int
+    , _gqursQueueURL :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetQueueURLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gqursStatus'
+--
+-- * 'gqursQueueURL'
+getQueueURLResponse
+    :: Int -- ^ 'gqursStatus'
+    -> Text -- ^ 'gqursQueueURL'
+    -> GetQueueURLResponse
+getQueueURLResponse pStatus_ pQueueURL_ =
+    GetQueueURLResponse'
+    { _gqursStatus = pStatus_
+    , _gqursQueueURL = pQueueURL_
+    }
+
+-- | The response status code.
+gqursStatus :: Lens' GetQueueURLResponse Int
+gqursStatus = lens _gqursStatus (\ s a -> s{_gqursStatus = a});
+
+-- | The URL for the queue.
+gqursQueueURL :: Lens' GetQueueURLResponse Text
+gqursQueueURL = lens _gqursQueueURL (\ s a -> s{_gqursQueueURL = a});
diff --git a/gen/Network/AWS/SQS/GetQueueUrl.hs b/gen/Network/AWS/SQS/GetQueueUrl.hs
deleted file mode 100644
--- a/gen/Network/AWS/SQS/GetQueueUrl.hs
+++ /dev/null
@@ -1,127 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.SQS.GetQueueUrl
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns the URL of an existing queue. This action provides a simple way to
--- retrieve the URL of an Amazon SQS queue.
---
--- To access a queue that belongs to another AWS account, use the 'QueueOwnerAWSAccountId' parameter to specify the account ID of the queue's owner. The queue's owner
--- must grant you permission to access the queue. For more information about
--- shared queue access, see 'AddPermission' or go to <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/acp-overview.html Shared Queues> in the /AmazonSQS Developer Guide/.
---
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueUrl.html>
-module Network.AWS.SQS.GetQueueUrl
-    (
-    -- * Request
-      GetQueueUrl
-    -- ** Request constructor
-    , getQueueUrl
-    -- ** Request lenses
-    , gquQueueName
-    , gquQueueOwnerAWSAccountId
-
-    -- * Response
-    , GetQueueUrlResponse
-    -- ** Response constructor
-    , getQueueUrlResponse
-    -- ** Response lenses
-    , gqurQueueUrl
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
-
-data GetQueueUrl = GetQueueUrl
-    { _gquQueueName              :: Text
-    , _gquQueueOwnerAWSAccountId :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'GetQueueUrl' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gquQueueName' @::@ 'Text'
---
--- * 'gquQueueOwnerAWSAccountId' @::@ 'Maybe' 'Text'
---
-getQueueUrl :: Text -- ^ 'gquQueueName'
-            -> GetQueueUrl
-getQueueUrl p1 = GetQueueUrl
-    { _gquQueueName              = p1
-    , _gquQueueOwnerAWSAccountId = Nothing
-    }
-
--- | The name of the queue whose URL must be fetched. Maximum 80 characters;
--- alphanumeric characters, hyphens (-), and underscores (_) are allowed.
-gquQueueName :: Lens' GetQueueUrl Text
-gquQueueName = lens _gquQueueName (\s a -> s { _gquQueueName = a })
-
--- | The AWS account ID of the account that created the queue.
-gquQueueOwnerAWSAccountId :: Lens' GetQueueUrl (Maybe Text)
-gquQueueOwnerAWSAccountId =
-    lens _gquQueueOwnerAWSAccountId
-        (\s a -> s { _gquQueueOwnerAWSAccountId = a })
-
-newtype GetQueueUrlResponse = GetQueueUrlResponse
-    { _gqurQueueUrl :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'GetQueueUrlResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gqurQueueUrl' @::@ 'Text'
---
-getQueueUrlResponse :: Text -- ^ 'gqurQueueUrl'
-                    -> GetQueueUrlResponse
-getQueueUrlResponse p1 = GetQueueUrlResponse
-    { _gqurQueueUrl = p1
-    }
-
--- | The URL for the queue.
-gqurQueueUrl :: Lens' GetQueueUrlResponse Text
-gqurQueueUrl = lens _gqurQueueUrl (\s a -> s { _gqurQueueUrl = a })
-
-instance ToPath GetQueueUrl where
-    toPath = const "/"
-
-instance ToQuery GetQueueUrl where
-    toQuery GetQueueUrl{..} = mconcat
-        [ "QueueName"              =? _gquQueueName
-        , "QueueOwnerAWSAccountId" =? _gquQueueOwnerAWSAccountId
-        ]
-
-instance ToHeaders GetQueueUrl
-
-instance AWSRequest GetQueueUrl where
-    type Sv GetQueueUrl = SQS
-    type Rs GetQueueUrl = GetQueueUrlResponse
-
-    request  = post "GetQueueUrl"
-    response = xmlResponse
-
-instance FromXML GetQueueUrlResponse where
-    parseXML = withElement "GetQueueUrlResult" $ \x -> GetQueueUrlResponse
-        <$> x .@  "QueueUrl"
diff --git a/gen/Network/AWS/SQS/ListDeadLetterSourceQueues.hs b/gen/Network/AWS/SQS/ListDeadLetterSourceQueues.hs
--- a/gen/Network/AWS/SQS/ListDeadLetterSourceQueues.hs
+++ b/gen/Network/AWS/SQS/ListDeadLetterSourceQueues.hs
@@ -1,112 +1,129 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.ListDeadLetterSourceQueues
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of your queues that have the RedrivePolicy queue attribute
--- configured with a dead letter queue.
+-- Returns a list of your queues that have the RedrivePolicy queue
+-- attribute configured with a dead letter queue.
 --
--- For more information about using dead letter queues, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html Using Amazon SQSDead Letter Queues>.
+-- For more information about using dead letter queues, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSDeadLetterQueue.html Using Amazon SQS Dead Letter Queues>.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListDeadLetterSourceQueues.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListDeadLetterSourceQueues.html AWS API Reference> for ListDeadLetterSourceQueues.
 module Network.AWS.SQS.ListDeadLetterSourceQueues
     (
-    -- * Request
-      ListDeadLetterSourceQueues
-    -- ** Request constructor
-    , listDeadLetterSourceQueues
-    -- ** Request lenses
-    , ldlsqQueueUrl
+    -- * Creating a Request
+      listDeadLetterSourceQueues
+    , ListDeadLetterSourceQueues
+    -- * Request Lenses
+    , ldlsqQueueURL
 
-    -- * Response
-    , ListDeadLetterSourceQueuesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listDeadLetterSourceQueuesResponse
-    -- ** Response lenses
-    , ldlsqrQueueUrls
+    , ListDeadLetterSourceQueuesResponse
+    -- * Response Lenses
+    , ldlsqrsStatus
+    , ldlsqrsQueueURLs
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-newtype ListDeadLetterSourceQueues = ListDeadLetterSourceQueues
-    { _ldlsqQueueUrl :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'listDeadLetterSourceQueues' smart constructor.
+newtype ListDeadLetterSourceQueues = ListDeadLetterSourceQueues'
+    { _ldlsqQueueURL :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListDeadLetterSourceQueues' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListDeadLetterSourceQueues' with the minimum fields required to make a request.
 --
--- * 'ldlsqQueueUrl' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-listDeadLetterSourceQueues :: Text -- ^ 'ldlsqQueueUrl'
-                           -> ListDeadLetterSourceQueues
-listDeadLetterSourceQueues p1 = ListDeadLetterSourceQueues
-    { _ldlsqQueueUrl = p1
+-- * 'ldlsqQueueURL'
+listDeadLetterSourceQueues
+    :: Text -- ^ 'ldlsqQueueURL'
+    -> ListDeadLetterSourceQueues
+listDeadLetterSourceQueues pQueueURL_ =
+    ListDeadLetterSourceQueues'
+    { _ldlsqQueueURL = pQueueURL_
     }
 
 -- | The queue URL of a dead letter queue.
-ldlsqQueueUrl :: Lens' ListDeadLetterSourceQueues Text
-ldlsqQueueUrl = lens _ldlsqQueueUrl (\s a -> s { _ldlsqQueueUrl = a })
-
-newtype ListDeadLetterSourceQueuesResponse = ListDeadLetterSourceQueuesResponse
-    { _ldlsqrQueueUrls :: List "member" Text
-    } deriving (Eq, Ord, Read, Show, Monoid, Semigroup)
+ldlsqQueueURL :: Lens' ListDeadLetterSourceQueues Text
+ldlsqQueueURL = lens _ldlsqQueueURL (\ s a -> s{_ldlsqQueueURL = a});
 
--- | 'ListDeadLetterSourceQueuesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ldlsqrQueueUrls' @::@ ['Text']
---
-listDeadLetterSourceQueuesResponse :: ListDeadLetterSourceQueuesResponse
-listDeadLetterSourceQueuesResponse = ListDeadLetterSourceQueuesResponse
-    { _ldlsqrQueueUrls = mempty
-    }
+instance AWSRequest ListDeadLetterSourceQueues where
+        type Sv ListDeadLetterSourceQueues = SQS
+        type Rs ListDeadLetterSourceQueues =
+             ListDeadLetterSourceQueuesResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper
+              "ListDeadLetterSourceQueuesResult"
+              (\ s h x ->
+                 ListDeadLetterSourceQueuesResponse' <$>
+                   (pure (fromEnum s)) <*> (parseXMLList "QueueUrl" x))
 
--- | A list of source queue URLs that have the RedrivePolicy queue attribute
--- configured with a dead letter queue.
-ldlsqrQueueUrls :: Lens' ListDeadLetterSourceQueuesResponse [Text]
-ldlsqrQueueUrls = lens _ldlsqrQueueUrls (\s a -> s { _ldlsqrQueueUrls = a }) . _List
+instance ToHeaders ListDeadLetterSourceQueues where
+        toHeaders = const mempty
 
 instance ToPath ListDeadLetterSourceQueues where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListDeadLetterSourceQueues where
-    toQuery ListDeadLetterSourceQueues{..} = mconcat
-        [ "QueueUrl" =? _ldlsqQueueUrl
-        ]
+        toQuery ListDeadLetterSourceQueues'{..}
+          = mconcat
+              ["Action" =:
+                 ("ListDeadLetterSourceQueues" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _ldlsqQueueURL]
 
-instance ToHeaders ListDeadLetterSourceQueues
+-- | A list of your dead letter source queues.
+--
+-- /See:/ 'listDeadLetterSourceQueuesResponse' smart constructor.
+data ListDeadLetterSourceQueuesResponse = ListDeadLetterSourceQueuesResponse'
+    { _ldlsqrsStatus    :: !Int
+    , _ldlsqrsQueueURLs :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ListDeadLetterSourceQueues where
-    type Sv ListDeadLetterSourceQueues = SQS
-    type Rs ListDeadLetterSourceQueues = ListDeadLetterSourceQueuesResponse
+-- | Creates a value of 'ListDeadLetterSourceQueuesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldlsqrsStatus'
+--
+-- * 'ldlsqrsQueueURLs'
+listDeadLetterSourceQueuesResponse
+    :: Int -- ^ 'ldlsqrsStatus'
+    -> ListDeadLetterSourceQueuesResponse
+listDeadLetterSourceQueuesResponse pStatus_ =
+    ListDeadLetterSourceQueuesResponse'
+    { _ldlsqrsStatus = pStatus_
+    , _ldlsqrsQueueURLs = mempty
+    }
 
-    request  = post "ListDeadLetterSourceQueues"
-    response = xmlResponse
+-- | The response status code.
+ldlsqrsStatus :: Lens' ListDeadLetterSourceQueuesResponse Int
+ldlsqrsStatus = lens _ldlsqrsStatus (\ s a -> s{_ldlsqrsStatus = a});
 
-instance FromXML ListDeadLetterSourceQueuesResponse where
-    parseXML = withElement "ListDeadLetterSourceQueuesResult" $ \x -> ListDeadLetterSourceQueuesResponse
-        <$> parseXML x
+-- | A list of source queue URLs that have the RedrivePolicy queue attribute
+-- configured with a dead letter queue.
+ldlsqrsQueueURLs :: Lens' ListDeadLetterSourceQueuesResponse [Text]
+ldlsqrsQueueURLs = lens _ldlsqrsQueueURLs (\ s a -> s{_ldlsqrsQueueURLs = a}) . _Coerce;
diff --git a/gen/Network/AWS/SQS/ListQueues.hs b/gen/Network/AWS/SQS/ListQueues.hs
--- a/gen/Network/AWS/SQS/ListQueues.hs
+++ b/gen/Network/AWS/SQS/ListQueues.hs
@@ -1,112 +1,125 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.ListQueues
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of your queues. The maximum number of queues that can be
--- returned is 1000. If you specify a value for the optional 'QueueNamePrefix'
--- parameter, only queues with a name beginning with the specified value are
--- returned.
+-- Returns a list of your queues. The maximum number of queues that can be
+-- returned is 1000. If you specify a value for the optional
+-- 'QueueNamePrefix' parameter, only queues with a name beginning with the
+-- specified value are returned.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ListQueues.html AWS API Reference> for ListQueues.
 module Network.AWS.SQS.ListQueues
     (
-    -- * Request
-      ListQueues
-    -- ** Request constructor
-    , listQueues
-    -- ** Request lenses
+    -- * Creating a Request
+      listQueues
+    , ListQueues
+    -- * Request Lenses
     , lqQueueNamePrefix
 
-    -- * Response
-    , ListQueuesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listQueuesResponse
-    -- ** Response lenses
-    , lqrQueueUrls
+    , ListQueuesResponse
+    -- * Response Lenses
+    , lqrsQueueURLs
+    , lqrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-newtype ListQueues = ListQueues
+-- | /See:/ 'listQueues' smart constructor.
+newtype ListQueues = ListQueues'
     { _lqQueueNamePrefix :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListQueues' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ListQueues' with the minimum fields required to make a request.
 --
--- * 'lqQueueNamePrefix' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-listQueues :: ListQueues
-listQueues = ListQueues
+-- * 'lqQueueNamePrefix'
+listQueues
+    :: ListQueues
+listQueues =
+    ListQueues'
     { _lqQueueNamePrefix = Nothing
     }
 
--- | A string to use for filtering the list results. Only those queues whose name
--- begins with the specified string are returned.
+-- | A string to use for filtering the list results. Only those queues whose
+-- name begins with the specified string are returned.
 lqQueueNamePrefix :: Lens' ListQueues (Maybe Text)
-lqQueueNamePrefix =
-    lens _lqQueueNamePrefix (\s a -> s { _lqQueueNamePrefix = a })
-
-newtype ListQueuesResponse = ListQueuesResponse
-    { _lqrQueueUrls :: List "member" Text
-    } deriving (Eq, Ord, Read, Show, Monoid, Semigroup)
+lqQueueNamePrefix = lens _lqQueueNamePrefix (\ s a -> s{_lqQueueNamePrefix = a});
 
--- | 'ListQueuesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lqrQueueUrls' @::@ ['Text']
---
-listQueuesResponse :: ListQueuesResponse
-listQueuesResponse = ListQueuesResponse
-    { _lqrQueueUrls = mempty
-    }
+instance AWSRequest ListQueues where
+        type Sv ListQueues = SQS
+        type Rs ListQueues = ListQueuesResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "ListQueuesResult"
+              (\ s h x ->
+                 ListQueuesResponse' <$>
+                   (may (parseXMLList "QueueUrl") x) <*>
+                     (pure (fromEnum s)))
 
--- | A list of queue URLs, up to 1000 entries.
-lqrQueueUrls :: Lens' ListQueuesResponse [Text]
-lqrQueueUrls = lens _lqrQueueUrls (\s a -> s { _lqrQueueUrls = a }) . _List
+instance ToHeaders ListQueues where
+        toHeaders = const mempty
 
 instance ToPath ListQueues where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListQueues where
-    toQuery ListQueues{..} = mconcat
-        [ "QueueNamePrefix" =? _lqQueueNamePrefix
-        ]
+        toQuery ListQueues'{..}
+          = mconcat
+              ["Action" =: ("ListQueues" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueNamePrefix" =: _lqQueueNamePrefix]
 
-instance ToHeaders ListQueues
+-- | A list of your queues.
+--
+-- /See:/ 'listQueuesResponse' smart constructor.
+data ListQueuesResponse = ListQueuesResponse'
+    { _lqrsQueueURLs :: !(Maybe [Text])
+    , _lqrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ListQueues where
-    type Sv ListQueues = SQS
-    type Rs ListQueues = ListQueuesResponse
+-- | Creates a value of 'ListQueuesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lqrsQueueURLs'
+--
+-- * 'lqrsStatus'
+listQueuesResponse
+    :: Int -- ^ 'lqrsStatus'
+    -> ListQueuesResponse
+listQueuesResponse pStatus_ =
+    ListQueuesResponse'
+    { _lqrsQueueURLs = Nothing
+    , _lqrsStatus = pStatus_
+    }
 
-    request  = post "ListQueues"
-    response = xmlResponse
+-- | A list of queue URLs, up to 1000 entries.
+lqrsQueueURLs :: Lens' ListQueuesResponse [Text]
+lqrsQueueURLs = lens _lqrsQueueURLs (\ s a -> s{_lqrsQueueURLs = a}) . _Default . _Coerce;
 
-instance FromXML ListQueuesResponse where
-    parseXML = withElement "ListQueuesResult" $ \x -> ListQueuesResponse
-        <$> parseXML x
+-- | The response status code.
+lqrsStatus :: Lens' ListQueuesResponse Int
+lqrsStatus = lens _lqrsStatus (\ s a -> s{_lqrsStatus = a});
diff --git a/gen/Network/AWS/SQS/PurgeQueue.hs b/gen/Network/AWS/SQS/PurgeQueue.hs
--- a/gen/Network/AWS/SQS/PurgeQueue.hs
+++ b/gen/Network/AWS/SQS/PurgeQueue.hs
@@ -1,97 +1,104 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.PurgeQueue
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Deletes the messages in a queue specified by the queue URL.
+-- Deletes the messages in a queue specified by the __queue URL__.
 --
--- When you use the 'PurgeQueue' API, the deleted messages in the queue cannot be
--- retrieved. When you purge a queue, the message deletion process takes up to
--- 60 seconds. All messages sent to the queue before calling 'PurgeQueue' will be
--- deleted; messages sent to the queue while it is being purged may be deleted.
--- While the queue is being purged, messages sent to the queue before 'PurgeQueue'
--- was called may be received, but will be deleted within the next minute.
+-- When you use the 'PurgeQueue' API, the deleted messages in the queue
+-- cannot be retrieved.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_PurgeQueue.html>
+-- When you purge a queue, the message deletion process takes up to 60
+-- seconds. All messages sent to the queue before calling 'PurgeQueue' will
+-- be deleted; messages sent to the queue while it is being purged may be
+-- deleted. While the queue is being purged, messages sent to the queue
+-- before 'PurgeQueue' was called may be received, but will be deleted
+-- within the next minute.
+--
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_PurgeQueue.html AWS API Reference> for PurgeQueue.
 module Network.AWS.SQS.PurgeQueue
     (
-    -- * Request
-      PurgeQueue
-    -- ** Request constructor
-    , purgeQueue
-    -- ** Request lenses
-    , pqQueueUrl
+    -- * Creating a Request
+      purgeQueue
+    , PurgeQueue
+    -- * Request Lenses
+    , pqQueueURL
 
-    -- * Response
-    , PurgeQueueResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , purgeQueueResponse
+    , PurgeQueueResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-newtype PurgeQueue = PurgeQueue
-    { _pqQueueUrl :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+-- | /See:/ 'purgeQueue' smart constructor.
+newtype PurgeQueue = PurgeQueue'
+    { _pqQueueURL :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'PurgeQueue' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'PurgeQueue' with the minimum fields required to make a request.
 --
--- * 'pqQueueUrl' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-purgeQueue :: Text -- ^ 'pqQueueUrl'
-           -> PurgeQueue
-purgeQueue p1 = PurgeQueue
-    { _pqQueueUrl = p1
+-- * 'pqQueueURL'
+purgeQueue
+    :: Text -- ^ 'pqQueueURL'
+    -> PurgeQueue
+purgeQueue pQueueURL_ =
+    PurgeQueue'
+    { _pqQueueURL = pQueueURL_
     }
 
--- | The queue URL of the queue to delete the messages from when using the 'PurgeQueue' API.
-pqQueueUrl :: Lens' PurgeQueue Text
-pqQueueUrl = lens _pqQueueUrl (\s a -> s { _pqQueueUrl = a })
+-- | The queue URL of the queue to delete the messages from when using the
+-- 'PurgeQueue' API.
+pqQueueURL :: Lens' PurgeQueue Text
+pqQueueURL = lens _pqQueueURL (\ s a -> s{_pqQueueURL = a});
 
-data PurgeQueueResponse = PurgeQueueResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest PurgeQueue where
+        type Sv PurgeQueue = SQS
+        type Rs PurgeQueue = PurgeQueueResponse
+        request = postQuery
+        response = receiveNull PurgeQueueResponse'
 
--- | 'PurgeQueueResponse' constructor.
-purgeQueueResponse :: PurgeQueueResponse
-purgeQueueResponse = PurgeQueueResponse
+instance ToHeaders PurgeQueue where
+        toHeaders = const mempty
 
 instance ToPath PurgeQueue where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery PurgeQueue where
-    toQuery PurgeQueue{..} = mconcat
-        [ "QueueUrl" =? _pqQueueUrl
-        ]
-
-instance ToHeaders PurgeQueue
+        toQuery PurgeQueue'{..}
+          = mconcat
+              ["Action" =: ("PurgeQueue" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _pqQueueURL]
 
-instance AWSRequest PurgeQueue where
-    type Sv PurgeQueue = SQS
-    type Rs PurgeQueue = PurgeQueueResponse
+-- | /See:/ 'purgeQueueResponse' smart constructor.
+data PurgeQueueResponse =
+    PurgeQueueResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "PurgeQueue"
-    response = nullResponse PurgeQueueResponse
+-- | Creates a value of 'PurgeQueueResponse' with the minimum fields required to make a request.
+--
+purgeQueueResponse
+    :: PurgeQueueResponse
+purgeQueueResponse = PurgeQueueResponse'
diff --git a/gen/Network/AWS/SQS/ReceiveMessage.hs b/gen/Network/AWS/SQS/ReceiveMessage.hs
--- a/gen/Network/AWS/SQS/ReceiveMessage.hs
+++ b/gen/Network/AWS/SQS/ReceiveMessage.hs
@@ -1,232 +1,253 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.ReceiveMessage
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Retrieves one or more messages, with a maximum limit of 10 messages, from
--- the specified queue. Long poll support is enabled by using the 'WaitTimeSeconds'
--- parameter. For more information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html Amazon SQS Long Poll> in the /Amazon SQSDeveloper Guide/.
+-- Retrieves one or more messages, with a maximum limit of 10 messages,
+-- from the specified queue. Long poll support is enabled by using the
+-- 'WaitTimeSeconds' parameter. For more information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-long-polling.html Amazon SQS Long Poll>
+-- in the /Amazon SQS Developer Guide/.
 --
--- Short poll is the default behavior where a weighted random set of machines
--- is sampled on a 'ReceiveMessage' call. This means only the messages on the
--- sampled machines are returned. If the number of messages in the queue is
--- small (less than 1000), it is likely you will get fewer messages than you
--- requested per 'ReceiveMessage' call. If the number of messages in the queue is
--- extremely small, you might not receive any messages in a particular 'ReceiveMessage' response; in which case you should repeat the request.
+-- Short poll is the default behavior where a weighted random set of
+-- machines is sampled on a 'ReceiveMessage' call. This means only the
+-- messages on the sampled machines are returned. If the number of messages
+-- in the queue is small (less than 1000), it is likely you will get fewer
+-- messages than you requested per 'ReceiveMessage' call. If the number of
+-- messages in the queue is extremely small, you might not receive any
+-- messages in a particular 'ReceiveMessage' response; in which case you
+-- should repeat the request.
 --
 -- For each message returned, the response includes the following:
 --
--- Message body
+-- -   Message body
 --
--- MD5 digest of the message body. For information about MD5, go to <http://www.faqs.org/rfcs/rfc1321.html http://www.faqs.org/rfcs/rfc1321.html>.
+-- -   MD5 digest of the message body. For information about MD5, go to
+--     <http://www.faqs.org/rfcs/rfc1321.html>.
 --
--- Message ID you received when you sent the message to the queue.
+-- -   Message ID you received when you sent the message to the queue.
 --
--- Receipt handle.
+-- -   Receipt handle.
 --
--- Message attributes.
+-- -   Message attributes.
 --
--- MD5 digest of the message attributes.
+-- -   MD5 digest of the message attributes.
 --
 -- The receipt handle is the identifier you must provide when deleting the
--- message. For more information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ImportantIdentifiers.html Queue and Message Identifiers> in the /Amazon SQS Developer Guide/.
---
--- You can provide the 'VisibilityTimeout' parameter in your request, which will
--- be applied to the messages that Amazon SQS returns in the response. If you do
--- not include the parameter, the overall visibility timeout for the queue is
--- used for the returned messages. For more information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html Visibility Timeout>
+-- message. For more information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ImportantIdentifiers.html Queue and Message Identifiers>
 -- in the /Amazon SQS Developer Guide/.
 --
--- Going forward, new attributes might be added. If you are writing code that
--- calls this action, we recommend that you structure your code so that it can
--- handle new attributes gracefully.
---
+-- You can provide the 'VisibilityTimeout' parameter in your request, which
+-- will be applied to the messages that Amazon SQS returns in the response.
+-- If you do not include the parameter, the overall visibility timeout for
+-- the queue is used for the returned messages. For more information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html Visibility Timeout>
+-- in the /Amazon SQS Developer Guide/.
 --
+-- Going forward, new attributes might be added. If you are writing code
+-- that calls this action, we recommend that you structure your code so
+-- that it can handle new attributes gracefully.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html AWS API Reference> for ReceiveMessage.
 module Network.AWS.SQS.ReceiveMessage
     (
-    -- * Request
-      ReceiveMessage
-    -- ** Request constructor
-    , receiveMessage
-    -- ** Request lenses
-    , rmAttributeNames
-    , rmMaxNumberOfMessages
-    , rmMessageAttributeNames
-    , rmQueueUrl
+    -- * Creating a Request
+      receiveMessage
+    , ReceiveMessage
+    -- * Request Lenses
     , rmVisibilityTimeout
+    , rmMessageAttributeNames
     , rmWaitTimeSeconds
+    , rmAttributeNames
+    , rmMaxNumberOfMessages
+    , rmQueueURL
 
-    -- * Response
-    , ReceiveMessageResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , receiveMessageResponse
-    -- ** Response lenses
-    , rmrMessages
+    , ReceiveMessageResponse
+    -- * Response Lenses
+    , rmrsMessages
+    , rmrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data ReceiveMessage = ReceiveMessage
-    { _rmAttributeNames        :: List "member" Text
-    , _rmMaxNumberOfMessages   :: Maybe Int
-    , _rmMessageAttributeNames :: List "member" Text
-    , _rmQueueUrl              :: Text
-    , _rmVisibilityTimeout     :: Maybe Int
-    , _rmWaitTimeSeconds       :: Maybe Int
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'receiveMessage' smart constructor.
+data ReceiveMessage = ReceiveMessage'
+    { _rmVisibilityTimeout     :: !(Maybe Int)
+    , _rmMessageAttributeNames :: !(Maybe [Text])
+    , _rmWaitTimeSeconds       :: !(Maybe Int)
+    , _rmAttributeNames        :: !(Maybe [QueueAttributeName])
+    , _rmMaxNumberOfMessages   :: !(Maybe Int)
+    , _rmQueueURL              :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ReceiveMessage' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'ReceiveMessage' with the minimum fields required to make a request.
 --
--- * 'rmAttributeNames' @::@ ['Text']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rmMaxNumberOfMessages' @::@ 'Maybe' 'Int'
+-- * 'rmVisibilityTimeout'
 --
--- * 'rmMessageAttributeNames' @::@ ['Text']
+-- * 'rmMessageAttributeNames'
 --
--- * 'rmQueueUrl' @::@ 'Text'
+-- * 'rmWaitTimeSeconds'
 --
--- * 'rmVisibilityTimeout' @::@ 'Maybe' 'Int'
+-- * 'rmAttributeNames'
 --
--- * 'rmWaitTimeSeconds' @::@ 'Maybe' 'Int'
+-- * 'rmMaxNumberOfMessages'
 --
-receiveMessage :: Text -- ^ 'rmQueueUrl'
-               -> ReceiveMessage
-receiveMessage p1 = ReceiveMessage
-    { _rmQueueUrl              = p1
-    , _rmAttributeNames        = mempty
-    , _rmMessageAttributeNames = mempty
-    , _rmMaxNumberOfMessages   = Nothing
-    , _rmVisibilityTimeout     = Nothing
-    , _rmWaitTimeSeconds       = Nothing
+-- * 'rmQueueURL'
+receiveMessage
+    :: Text -- ^ 'rmQueueURL'
+    -> ReceiveMessage
+receiveMessage pQueueURL_ =
+    ReceiveMessage'
+    { _rmVisibilityTimeout = Nothing
+    , _rmMessageAttributeNames = Nothing
+    , _rmWaitTimeSeconds = Nothing
+    , _rmAttributeNames = Nothing
+    , _rmMaxNumberOfMessages = Nothing
+    , _rmQueueURL = pQueueURL_
     }
 
--- | A list of attributes that need to be returned along with each message.
---
--- The following lists the names and descriptions of the attributes that can
--- be returned:
---
--- 'All' - returns all values.  'ApproximateFirstReceiveTimestamp' - returns the
--- time when the message was first received from the queue (epoch time in
--- milliseconds).  'ApproximateReceiveCount' - returns the number of times a
--- message has been received from the queue but not deleted.  'SenderId' - returns
--- the AWS account number (or the IP address, if anonymous access is allowed) of
--- the sender.  'SentTimestamp' - returns the time when the message was sent to
--- the queue (epoch time in milliseconds).
-rmAttributeNames :: Lens' ReceiveMessage [Text]
-rmAttributeNames = lens _rmAttributeNames (\s a -> s { _rmAttributeNames = a }) . _List
-
--- | The maximum number of messages to return. Amazon SQS never returns more
--- messages than this value but may return fewer. Values can be from 1 to 10.
--- Default is 1.
---
--- All of the messages are not necessarily returned.
-rmMaxNumberOfMessages :: Lens' ReceiveMessage (Maybe Int)
-rmMaxNumberOfMessages =
-    lens _rmMaxNumberOfMessages (\s a -> s { _rmMaxNumberOfMessages = a })
+-- | The duration (in seconds) that the received messages are hidden from
+-- subsequent retrieve requests after being retrieved by a 'ReceiveMessage'
+-- request.
+rmVisibilityTimeout :: Lens' ReceiveMessage (Maybe Int)
+rmVisibilityTimeout = lens _rmVisibilityTimeout (\ s a -> s{_rmVisibilityTimeout = a});
 
 -- | The name of the message attribute, where /N/ is the index. The message
 -- attribute name can contain the following characters: A-Z, a-z, 0-9,
--- underscore (_), hyphen (-), and period (.). The name must not start or end
--- with a period, and it should not have successive periods. The name is case
--- sensitive and must be unique among all attribute names for the message. The
--- name can be up to 256 characters long. The name cannot start with "AWS." or
--- "Amazon." (or any variations in casing), because these prefixes are reserved
--- for use by Amazon Web Services.
+-- underscore (_), hyphen (-), and period (.). The name must not start or
+-- end with a period, and it should not have successive periods. The name
+-- is case sensitive and must be unique among all attribute names for the
+-- message. The name can be up to 256 characters long. The name cannot
+-- start with \"AWS.\" or \"Amazon.\" (or any variations in casing),
+-- because these prefixes are reserved for use by Amazon Web Services.
 --
 -- When using 'ReceiveMessage', you can send a list of attribute names to
--- receive, or you can return all of the attributes by specifying "All" or ".*"
--- in your request. You can also use "foo.*" to return all message attributes
--- starting with the "foo" prefix.
+-- receive, or you can return all of the attributes by specifying \"All\"
+-- or \".*\" in your request. You can also use \"foo.*\" to return all
+-- message attributes starting with the \"foo\" prefix.
 rmMessageAttributeNames :: Lens' ReceiveMessage [Text]
-rmMessageAttributeNames =
-    lens _rmMessageAttributeNames (\s a -> s { _rmMessageAttributeNames = a })
-        . _List
-
--- | The URL of the Amazon SQS queue to take action on.
-rmQueueUrl :: Lens' ReceiveMessage Text
-rmQueueUrl = lens _rmQueueUrl (\s a -> s { _rmQueueUrl = a })
-
--- | The duration (in seconds) that the received messages are hidden from
--- subsequent retrieve requests after being retrieved by a 'ReceiveMessage'
--- request.
-rmVisibilityTimeout :: Lens' ReceiveMessage (Maybe Int)
-rmVisibilityTimeout =
-    lens _rmVisibilityTimeout (\s a -> s { _rmVisibilityTimeout = a })
+rmMessageAttributeNames = lens _rmMessageAttributeNames (\ s a -> s{_rmMessageAttributeNames = a}) . _Default . _Coerce;
 
 -- | The duration (in seconds) for which the call will wait for a message to
--- arrive in the queue before returning. If a message is available, the call
--- will return sooner than WaitTimeSeconds.
+-- arrive in the queue before returning. If a message is available, the
+-- call will return sooner than WaitTimeSeconds.
 rmWaitTimeSeconds :: Lens' ReceiveMessage (Maybe Int)
-rmWaitTimeSeconds =
-    lens _rmWaitTimeSeconds (\s a -> s { _rmWaitTimeSeconds = a })
-
-newtype ReceiveMessageResponse = ReceiveMessageResponse
-    { _rmrMessages :: List "member" Message
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+rmWaitTimeSeconds = lens _rmWaitTimeSeconds (\ s a -> s{_rmWaitTimeSeconds = a});
 
--- | 'ReceiveMessageResponse' constructor.
+-- | A list of attributes that need to be returned along with each message.
 --
--- The fields accessible through corresponding lenses are:
+-- The following lists the names and descriptions of the attributes that
+-- can be returned:
 --
--- * 'rmrMessages' @::@ ['Message']
+-- -   'All' - returns all values.
+-- -   'ApproximateFirstReceiveTimestamp' - returns the time when the
+--     message was first received from the queue (epoch time in
+--     milliseconds).
+-- -   'ApproximateReceiveCount' - returns the number of times a message
+--     has been received from the queue but not deleted.
+-- -   'SenderId' - returns the AWS account number (or the IP address, if
+--     anonymous access is allowed) of the sender.
+-- -   'SentTimestamp' - returns the time when the message was sent to the
+--     queue (epoch time in milliseconds).
+rmAttributeNames :: Lens' ReceiveMessage [QueueAttributeName]
+rmAttributeNames = lens _rmAttributeNames (\ s a -> s{_rmAttributeNames = a}) . _Default . _Coerce;
+
+-- | The maximum number of messages to return. Amazon SQS never returns more
+-- messages than this value but may return fewer. Values can be from 1 to
+-- 10. Default is 1.
 --
-receiveMessageResponse :: ReceiveMessageResponse
-receiveMessageResponse = ReceiveMessageResponse
-    { _rmrMessages = mempty
-    }
+-- All of the messages are not necessarily returned.
+rmMaxNumberOfMessages :: Lens' ReceiveMessage (Maybe Int)
+rmMaxNumberOfMessages = lens _rmMaxNumberOfMessages (\ s a -> s{_rmMaxNumberOfMessages = a});
 
--- | A list of messages.
-rmrMessages :: Lens' ReceiveMessageResponse [Message]
-rmrMessages = lens _rmrMessages (\s a -> s { _rmrMessages = a }) . _List
+-- | The URL of the Amazon SQS queue to take action on.
+rmQueueURL :: Lens' ReceiveMessage Text
+rmQueueURL = lens _rmQueueURL (\ s a -> s{_rmQueueURL = a});
 
+instance AWSRequest ReceiveMessage where
+        type Sv ReceiveMessage = SQS
+        type Rs ReceiveMessage = ReceiveMessageResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "ReceiveMessageResult"
+              (\ s h x ->
+                 ReceiveMessageResponse' <$>
+                   (may (parseXMLList "Message") x) <*>
+                     (pure (fromEnum s)))
+
+instance ToHeaders ReceiveMessage where
+        toHeaders = const mempty
+
 instance ToPath ReceiveMessage where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ReceiveMessage where
-    toQuery ReceiveMessage{..} = mconcat
-        [ toQuery                _rmAttributeNames
-        , "MaxNumberOfMessages"   =? _rmMaxNumberOfMessages
-        , toQuery                _rmMessageAttributeNames
-        , "QueueUrl"              =? _rmQueueUrl
-        , "VisibilityTimeout"     =? _rmVisibilityTimeout
-        , "WaitTimeSeconds"       =? _rmWaitTimeSeconds
-        ]
+        toQuery ReceiveMessage'{..}
+          = mconcat
+              ["Action" =: ("ReceiveMessage" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "VisibilityTimeout" =: _rmVisibilityTimeout,
+               toQuery
+                 (toQueryList "MessageAttributeName" <$>
+                    _rmMessageAttributeNames),
+               "WaitTimeSeconds" =: _rmWaitTimeSeconds,
+               toQuery
+                 (toQueryList "AttributeName" <$> _rmAttributeNames),
+               "MaxNumberOfMessages" =: _rmMaxNumberOfMessages,
+               "QueueUrl" =: _rmQueueURL]
 
-instance ToHeaders ReceiveMessage
+-- | A list of received messages.
+--
+-- /See:/ 'receiveMessageResponse' smart constructor.
+data ReceiveMessageResponse = ReceiveMessageResponse'
+    { _rmrsMessages :: !(Maybe [Message])
+    , _rmrsStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ReceiveMessage where
-    type Sv ReceiveMessage = SQS
-    type Rs ReceiveMessage = ReceiveMessageResponse
+-- | Creates a value of 'ReceiveMessageResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rmrsMessages'
+--
+-- * 'rmrsStatus'
+receiveMessageResponse
+    :: Int -- ^ 'rmrsStatus'
+    -> ReceiveMessageResponse
+receiveMessageResponse pStatus_ =
+    ReceiveMessageResponse'
+    { _rmrsMessages = Nothing
+    , _rmrsStatus = pStatus_
+    }
 
-    request  = post "ReceiveMessage"
-    response = xmlResponse
+-- | A list of messages.
+rmrsMessages :: Lens' ReceiveMessageResponse [Message]
+rmrsMessages = lens _rmrsMessages (\ s a -> s{_rmrsMessages = a}) . _Default . _Coerce;
 
-instance FromXML ReceiveMessageResponse where
-    parseXML = withElement "ReceiveMessageResult" $ \x -> ReceiveMessageResponse
-        <$> parseXML x
+-- | The response status code.
+rmrsStatus :: Lens' ReceiveMessageResponse Int
+rmrsStatus = lens _rmrsStatus (\ s a -> s{_rmrsStatus = a});
diff --git a/gen/Network/AWS/SQS/RemovePermission.hs b/gen/Network/AWS/SQS/RemovePermission.hs
--- a/gen/Network/AWS/SQS/RemovePermission.hs
+++ b/gen/Network/AWS/SQS/RemovePermission.hs
@@ -1,103 +1,105 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.RemovePermission
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Revokes any permissions in the queue policy that matches the specified 'Label'
--- parameter. Only the owner of the queue can remove permissions.
+-- Revokes any permissions in the queue policy that matches the specified
+-- 'Label' parameter. Only the owner of the queue can remove permissions.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_RemovePermission.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_RemovePermission.html AWS API Reference> for RemovePermission.
 module Network.AWS.SQS.RemovePermission
     (
-    -- * Request
-      RemovePermission
-    -- ** Request constructor
-    , removePermission
-    -- ** Request lenses
+    -- * Creating a Request
+      removePermission
+    , RemovePermission
+    -- * Request Lenses
+    , rpQueueURL
     , rpLabel
-    , rpQueueUrl
 
-    -- * Response
-    , RemovePermissionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , removePermissionResponse
+    , RemovePermissionResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data RemovePermission = RemovePermission
-    { _rpLabel    :: Text
-    , _rpQueueUrl :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | /See:/ 'removePermission' smart constructor.
+data RemovePermission = RemovePermission'
+    { _rpQueueURL :: !Text
+    , _rpLabel    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'RemovePermission' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'RemovePermission' with the minimum fields required to make a request.
 --
--- * 'rpLabel' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rpQueueUrl' @::@ 'Text'
+-- * 'rpQueueURL'
 --
-removePermission :: Text -- ^ 'rpQueueUrl'
-                 -> Text -- ^ 'rpLabel'
-                 -> RemovePermission
-removePermission p1 p2 = RemovePermission
-    { _rpQueueUrl = p1
-    , _rpLabel    = p2
+-- * 'rpLabel'
+removePermission
+    :: Text -- ^ 'rpQueueURL'
+    -> Text -- ^ 'rpLabel'
+    -> RemovePermission
+removePermission pQueueURL_ pLabel_ =
+    RemovePermission'
+    { _rpQueueURL = pQueueURL_
+    , _rpLabel = pLabel_
     }
 
--- | The identification of the permission to remove. This is the label added with
--- the 'AddPermission' action.
-rpLabel :: Lens' RemovePermission Text
-rpLabel = lens _rpLabel (\s a -> s { _rpLabel = a })
-
 -- | The URL of the Amazon SQS queue to take action on.
-rpQueueUrl :: Lens' RemovePermission Text
-rpQueueUrl = lens _rpQueueUrl (\s a -> s { _rpQueueUrl = a })
+rpQueueURL :: Lens' RemovePermission Text
+rpQueueURL = lens _rpQueueURL (\ s a -> s{_rpQueueURL = a});
 
-data RemovePermissionResponse = RemovePermissionResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | The identification of the permission to remove. This is the label added
+-- with the AddPermission action.
+rpLabel :: Lens' RemovePermission Text
+rpLabel = lens _rpLabel (\ s a -> s{_rpLabel = a});
 
--- | 'RemovePermissionResponse' constructor.
-removePermissionResponse :: RemovePermissionResponse
-removePermissionResponse = RemovePermissionResponse
+instance AWSRequest RemovePermission where
+        type Sv RemovePermission = SQS
+        type Rs RemovePermission = RemovePermissionResponse
+        request = postQuery
+        response = receiveNull RemovePermissionResponse'
 
+instance ToHeaders RemovePermission where
+        toHeaders = const mempty
+
 instance ToPath RemovePermission where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery RemovePermission where
-    toQuery RemovePermission{..} = mconcat
-        [ "Label"    =? _rpLabel
-        , "QueueUrl" =? _rpQueueUrl
-        ]
-
-instance ToHeaders RemovePermission
+        toQuery RemovePermission'{..}
+          = mconcat
+              ["Action" =: ("RemovePermission" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _rpQueueURL, "Label" =: _rpLabel]
 
-instance AWSRequest RemovePermission where
-    type Sv RemovePermission = SQS
-    type Rs RemovePermission = RemovePermissionResponse
+-- | /See:/ 'removePermissionResponse' smart constructor.
+data RemovePermissionResponse =
+    RemovePermissionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "RemovePermission"
-    response = nullResponse RemovePermissionResponse
+-- | Creates a value of 'RemovePermissionResponse' with the minimum fields required to make a request.
+--
+removePermissionResponse
+    :: RemovePermissionResponse
+removePermissionResponse = RemovePermissionResponse'
diff --git a/gen/Network/AWS/SQS/SendMessage.hs b/gen/Network/AWS/SQS/SendMessage.hs
--- a/gen/Network/AWS/SQS/SendMessage.hs
+++ b/gen/Network/AWS/SQS/SendMessage.hs
@@ -1,189 +1,201 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.SendMessage
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Delivers a message to the specified queue. With Amazon SQS, you now have the
--- ability to send large payload messages that are up to 256KB (262,144 bytes)
--- in size. To send large payloads, you must use an AWS SDK that supports SigV4
--- signing. To verify whether SigV4 is supported for an AWS SDK, check the SDK
--- release notes.
+-- Delivers a message to the specified queue. With Amazon SQS, you now have
+-- the ability to send large payload messages that are up to 256KB (262,144
+-- bytes) in size. To send large payloads, you must use an AWS SDK that
+-- supports SigV4 signing. To verify whether SigV4 is supported for an AWS
+-- SDK, check the SDK release notes.
 --
 -- The following list shows the characters (in Unicode) allowed in your
--- message, according to the W3C XML specification. For more information, go to <http://www.w3.org/TR/REC-xml/#charsets http://www.w3.org/TR/REC-xml/#charsets> If you send any characters not included in the list, your request will be
--- rejected.
+-- message, according to the W3C XML specification. For more information,
+-- go to <http://www.w3.org/TR/REC-xml/#charsets> If you send any
+-- characters not included in the list, your request will be rejected.
 --
 -- #x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to
 -- #x10FFFF]
 --
---
---
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html AWS API Reference> for SendMessage.
 module Network.AWS.SQS.SendMessage
     (
-    -- * Request
-      SendMessage
-    -- ** Request constructor
-    , sendMessage
-    -- ** Request lenses
-    , smDelaySeconds
+    -- * Creating a Request
+      sendMessage
+    , SendMessage
+    -- * Request Lenses
     , smMessageAttributes
+    , smDelaySeconds
+    , smQueueURL
     , smMessageBody
-    , smQueueUrl
 
-    -- * Response
-    , SendMessageResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , sendMessageResponse
-    -- ** Response lenses
-    , smrMD5OfMessageAttributes
-    , smrMD5OfMessageBody
-    , smrMessageId
+    , SendMessageResponse
+    -- * Response Lenses
+    , smrsMessageId
+    , smrsMD5OfMessageBody
+    , smrsMD5OfMessageAttributes
+    , smrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data SendMessage = SendMessage
-    { _smDelaySeconds      :: Maybe Int
-    , _smMessageAttributes :: EMap "entry" "Name" "Value" Text MessageAttributeValue
-    , _smMessageBody       :: Text
-    , _smQueueUrl          :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'sendMessage' smart constructor.
+data SendMessage = SendMessage'
+    { _smMessageAttributes :: !(Maybe (Map Text MessageAttributeValue))
+    , _smDelaySeconds      :: !(Maybe Int)
+    , _smQueueURL          :: !Text
+    , _smMessageBody       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'SendMessage' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'SendMessage' with the minimum fields required to make a request.
 --
--- * 'smDelaySeconds' @::@ 'Maybe' 'Int'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'smMessageAttributes' @::@ 'HashMap' 'Text' 'MessageAttributeValue'
+-- * 'smMessageAttributes'
 --
--- * 'smMessageBody' @::@ 'Text'
+-- * 'smDelaySeconds'
 --
--- * 'smQueueUrl' @::@ 'Text'
+-- * 'smQueueURL'
 --
-sendMessage :: Text -- ^ 'smQueueUrl'
-            -> Text -- ^ 'smMessageBody'
-            -> SendMessage
-sendMessage p1 p2 = SendMessage
-    { _smQueueUrl          = p1
-    , _smMessageBody       = p2
-    , _smDelaySeconds      = Nothing
-    , _smMessageAttributes = mempty
+-- * 'smMessageBody'
+sendMessage
+    :: Text -- ^ 'smQueueURL'
+    -> Text -- ^ 'smMessageBody'
+    -> SendMessage
+sendMessage pQueueURL_ pMessageBody_ =
+    SendMessage'
+    { _smMessageAttributes = Nothing
+    , _smDelaySeconds = Nothing
+    , _smQueueURL = pQueueURL_
+    , _smMessageBody = pMessageBody_
     }
 
--- | The number of seconds (0 to 900 - 15 minutes) to delay a specific message.
--- Messages with a positive 'DelaySeconds' value become available for processing
--- after the delay time is finished. If you don't specify a value, the default
--- value for the queue applies.
-smDelaySeconds :: Lens' SendMessage (Maybe Int)
-smDelaySeconds = lens _smDelaySeconds (\s a -> s { _smDelaySeconds = a })
-
 -- | Each message attribute consists of a Name, Type, and Value. For more
--- information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html#SQSMessageAttributesNTV Message Attribute Items>.
+-- information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html#SQSMessageAttributesNTV Message Attribute Items>.
 smMessageAttributes :: Lens' SendMessage (HashMap Text MessageAttributeValue)
-smMessageAttributes =
-    lens _smMessageAttributes (\s a -> s { _smMessageAttributes = a })
-        . _EMap
+smMessageAttributes = lens _smMessageAttributes (\ s a -> s{_smMessageAttributes = a}) . _Default . _Map;
 
--- | The message to send. String maximum 256 KB in size. For a list of allowed
--- characters, see the preceding important note.
-smMessageBody :: Lens' SendMessage Text
-smMessageBody = lens _smMessageBody (\s a -> s { _smMessageBody = a })
+-- | The number of seconds (0 to 900 - 15 minutes) to delay a specific
+-- message. Messages with a positive 'DelaySeconds' value become available
+-- for processing after the delay time is finished. If you don\'t specify a
+-- value, the default value for the queue applies.
+smDelaySeconds :: Lens' SendMessage (Maybe Int)
+smDelaySeconds = lens _smDelaySeconds (\ s a -> s{_smDelaySeconds = a});
 
 -- | The URL of the Amazon SQS queue to take action on.
-smQueueUrl :: Lens' SendMessage Text
-smQueueUrl = lens _smQueueUrl (\s a -> s { _smQueueUrl = a })
+smQueueURL :: Lens' SendMessage Text
+smQueueURL = lens _smQueueURL (\ s a -> s{_smQueueURL = a});
 
-data SendMessageResponse = SendMessageResponse
-    { _smrMD5OfMessageAttributes :: Maybe Text
-    , _smrMD5OfMessageBody       :: Maybe Text
-    , _smrMessageId              :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The message to send. String maximum 256 KB in size. For a list of
+-- allowed characters, see the preceding important note.
+smMessageBody :: Lens' SendMessage Text
+smMessageBody = lens _smMessageBody (\ s a -> s{_smMessageBody = a});
 
--- | 'SendMessageResponse' constructor.
+instance AWSRequest SendMessage where
+        type Sv SendMessage = SQS
+        type Rs SendMessage = SendMessageResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "SendMessageResult"
+              (\ s h x ->
+                 SendMessageResponse' <$>
+                   (x .@? "MessageId") <*> (x .@? "MD5OfMessageBody")
+                     <*> (x .@? "MD5OfMessageAttributes")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders SendMessage where
+        toHeaders = const mempty
+
+instance ToPath SendMessage where
+        toPath = const "/"
+
+instance ToQuery SendMessage where
+        toQuery SendMessage'{..}
+          = mconcat
+              ["Action" =: ("SendMessage" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               toQuery
+                 (toQueryMap "MessageAttribute" "Name" "Value" <$>
+                    _smMessageAttributes),
+               "DelaySeconds" =: _smDelaySeconds,
+               "QueueUrl" =: _smQueueURL,
+               "MessageBody" =: _smMessageBody]
+
+-- | The MD5OfMessageBody and MessageId elements.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'sendMessageResponse' smart constructor.
+data SendMessageResponse = SendMessageResponse'
+    { _smrsMessageId              :: !(Maybe Text)
+    , _smrsMD5OfMessageBody       :: !(Maybe Text)
+    , _smrsMD5OfMessageAttributes :: !(Maybe Text)
+    , _smrsStatus                 :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendMessageResponse' with the minimum fields required to make a request.
 --
--- * 'smrMD5OfMessageAttributes' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'smrMD5OfMessageBody' @::@ 'Maybe' 'Text'
+-- * 'smrsMessageId'
 --
--- * 'smrMessageId' @::@ 'Maybe' 'Text'
+-- * 'smrsMD5OfMessageBody'
 --
-sendMessageResponse :: SendMessageResponse
-sendMessageResponse = SendMessageResponse
-    { _smrMD5OfMessageBody       = Nothing
-    , _smrMD5OfMessageAttributes = Nothing
-    , _smrMessageId              = Nothing
+-- * 'smrsMD5OfMessageAttributes'
+--
+-- * 'smrsStatus'
+sendMessageResponse
+    :: Int -- ^ 'smrsStatus'
+    -> SendMessageResponse
+sendMessageResponse pStatus_ =
+    SendMessageResponse'
+    { _smrsMessageId = Nothing
+    , _smrsMD5OfMessageBody = Nothing
+    , _smrsMD5OfMessageAttributes = Nothing
+    , _smrsStatus = pStatus_
     }
 
--- | An MD5 digest of the non-URL-encoded message attribute string. This can be
--- used to verify that Amazon SQS received the message correctly. Amazon SQS
--- first URL decodes the message before creating the MD5 digest. For information
--- about MD5, go to <http://www.faqs.org/rfcs/rfc1321.html http://www.faqs.org/rfcs/rfc1321.html>.
-smrMD5OfMessageAttributes :: Lens' SendMessageResponse (Maybe Text)
-smrMD5OfMessageAttributes =
-    lens _smrMD5OfMessageAttributes
-        (\s a -> s { _smrMD5OfMessageAttributes = a })
-
--- | An MD5 digest of the non-URL-encoded message body string. This can be used to
--- verify that Amazon SQS received the message correctly. Amazon SQS first URL
--- decodes the message before creating the MD5 digest. For information about
--- MD5, go to <http://www.faqs.org/rfcs/rfc1321.html http://www.faqs.org/rfcs/rfc1321.html>.
-smrMD5OfMessageBody :: Lens' SendMessageResponse (Maybe Text)
-smrMD5OfMessageBody =
-    lens _smrMD5OfMessageBody (\s a -> s { _smrMD5OfMessageBody = a })
-
--- | An element containing the message ID of the message sent to the queue. For
--- more information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ImportantIdentifiers.html Queue and Message Identifiers> in the /Amazon SQSDeveloper Guide/.
-smrMessageId :: Lens' SendMessageResponse (Maybe Text)
-smrMessageId = lens _smrMessageId (\s a -> s { _smrMessageId = a })
-
-instance ToPath SendMessage where
-    toPath = const "/"
-
-instance ToQuery SendMessage where
-    toQuery SendMessage{..} = mconcat
-        [ "DelaySeconds"     =? _smDelaySeconds
-        , toQuery           _smMessageAttributes
-        , "MessageBody"      =? _smMessageBody
-        , "QueueUrl"         =? _smQueueUrl
-        ]
-
-instance ToHeaders SendMessage
+-- | An element containing the message ID of the message sent to the queue.
+-- For more information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/ImportantIdentifiers.html Queue and Message Identifiers>
+-- in the /Amazon SQS Developer Guide/.
+smrsMessageId :: Lens' SendMessageResponse (Maybe Text)
+smrsMessageId = lens _smrsMessageId (\ s a -> s{_smrsMessageId = a});
 
-instance AWSRequest SendMessage where
-    type Sv SendMessage = SQS
-    type Rs SendMessage = SendMessageResponse
+-- | An MD5 digest of the non-URL-encoded message body string. This can be
+-- used to verify that Amazon SQS received the message correctly. Amazon
+-- SQS first URL decodes the message before creating the MD5 digest. For
+-- information about MD5, go to <http://www.faqs.org/rfcs/rfc1321.html>.
+smrsMD5OfMessageBody :: Lens' SendMessageResponse (Maybe Text)
+smrsMD5OfMessageBody = lens _smrsMD5OfMessageBody (\ s a -> s{_smrsMD5OfMessageBody = a});
 
-    request  = post "SendMessage"
-    response = xmlResponse
+-- | An MD5 digest of the non-URL-encoded message attribute string. This can
+-- be used to verify that Amazon SQS received the message correctly. Amazon
+-- SQS first URL decodes the message before creating the MD5 digest. For
+-- information about MD5, go to <http://www.faqs.org/rfcs/rfc1321.html>.
+smrsMD5OfMessageAttributes :: Lens' SendMessageResponse (Maybe Text)
+smrsMD5OfMessageAttributes = lens _smrsMD5OfMessageAttributes (\ s a -> s{_smrsMD5OfMessageAttributes = a});
 
-instance FromXML SendMessageResponse where
-    parseXML = withElement "SendMessageResult" $ \x -> SendMessageResponse
-        <$> x .@? "MD5OfMessageAttributes"
-        <*> x .@? "MD5OfMessageBody"
-        <*> x .@? "MessageId"
+-- | The response status code.
+smrsStatus :: Lens' SendMessageResponse Int
+smrsStatus = lens _smrsStatus (\ s a -> s{_smrsStatus = a});
diff --git a/gen/Network/AWS/SQS/SendMessageBatch.hs b/gen/Network/AWS/SQS/SendMessageBatch.hs
--- a/gen/Network/AWS/SQS/SendMessageBatch.hs
+++ b/gen/Network/AWS/SQS/SendMessageBatch.hs
@@ -1,153 +1,176 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.SendMessageBatch
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Delivers up to ten messages to the specified queue. This is a batch version
--- of 'SendMessage'. The result of the send action on each message is reported
--- individually in the response. The maximum allowed individual message size is
--- 256 KB (262,144 bytes).
+-- Delivers up to ten messages to the specified queue. This is a batch
+-- version of SendMessage. The result of the send action on each message is
+-- reported individually in the response. The maximum allowed individual
+-- message size is 256 KB (262,144 bytes).
 --
--- The maximum total payload size (i.e., the sum of all a batch's individual
--- message lengths) is also 256 KB (262,144 bytes).
+-- The maximum total payload size (i.e., the sum of all a batch\'s
+-- individual message lengths) is also 256 KB (262,144 bytes).
 --
--- If the 'DelaySeconds' parameter is not specified for an entry, the default for
--- the queue is used.
+-- If the 'DelaySeconds' parameter is not specified for an entry, the
+-- default for the queue is used.
 --
 -- The following list shows the characters (in Unicode) that are allowed in
--- your message, according to the W3C XML specification. For more information,
--- go to <http://www.faqs.org/rfcs/rfc1321.html http://www.faqs.org/rfcs/rfc1321.html>. If you send any characters that
--- are not included in the list, your request will be rejected. #x9 | #xA | #xD
--- | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to #x10FFFF]
+-- your message, according to the W3C XML specification. For more
+-- information, go to <http://www.faqs.org/rfcs/rfc1321.html>. If you send
+-- any characters that are not included in the list, your request will be
+-- rejected.
 --
+-- #x9 | #xA | #xD | [#x20 to #xD7FF] | [#xE000 to #xFFFD] | [#x10000 to
+-- #x10FFFF]
+--
 -- Because the batch request can result in a combination of successful and
--- unsuccessful actions, you should check for batch errors even when the call
--- returns an HTTP status code of 200.  Some API actions take lists of
--- parameters. These lists are specified using the 'param.n' notation. Values of 'n'
--- are integers starting from 1. For example, a parameter list with two elements
--- looks like this:  '&Attribute.1=this'
+-- unsuccessful actions, you should check for batch errors even when the
+-- call returns an HTTP status code of 200.
 --
+-- Some API actions take lists of parameters. These lists are specified
+-- using the 'param.n' notation. Values of 'n' are integers starting from
+-- 1. For example, a parameter list with two elements looks like this:
+--
+-- '&Attribute.1=this'
+--
 -- '&Attribute.2=that'
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessageBatch.html AWS API Reference> for SendMessageBatch.
 module Network.AWS.SQS.SendMessageBatch
     (
-    -- * Request
-      SendMessageBatch
-    -- ** Request constructor
-    , sendMessageBatch
-    -- ** Request lenses
+    -- * Creating a Request
+      sendMessageBatch
+    , SendMessageBatch
+    -- * Request Lenses
+    , smbQueueURL
     , smbEntries
-    , smbQueueUrl
 
-    -- * Response
-    , SendMessageBatchResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , sendMessageBatchResponse
-    -- ** Response lenses
-    , smbrFailed
-    , smbrSuccessful
+    , SendMessageBatchResponse
+    -- * Response Lenses
+    , smbrsStatus
+    , smbrsSuccessful
+    , smbrsFailed
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data SendMessageBatch = SendMessageBatch
-    { _smbEntries  :: List "member" SendMessageBatchRequestEntry
-    , _smbQueueUrl :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'sendMessageBatch' smart constructor.
+data SendMessageBatch = SendMessageBatch'
+    { _smbQueueURL :: !Text
+    , _smbEntries  :: ![SendMessageBatchRequestEntry]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'SendMessageBatch' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'SendMessageBatch' with the minimum fields required to make a request.
 --
--- * 'smbEntries' @::@ ['SendMessageBatchRequestEntry']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'smbQueueUrl' @::@ 'Text'
+-- * 'smbQueueURL'
 --
-sendMessageBatch :: Text -- ^ 'smbQueueUrl'
-                 -> SendMessageBatch
-sendMessageBatch p1 = SendMessageBatch
-    { _smbQueueUrl = p1
-    , _smbEntries  = mempty
+-- * 'smbEntries'
+sendMessageBatch
+    :: Text -- ^ 'smbQueueURL'
+    -> SendMessageBatch
+sendMessageBatch pQueueURL_ =
+    SendMessageBatch'
+    { _smbQueueURL = pQueueURL_
+    , _smbEntries = mempty
     }
 
--- | A list of 'SendMessageBatchRequestEntry' items.
-smbEntries :: Lens' SendMessageBatch [SendMessageBatchRequestEntry]
-smbEntries = lens _smbEntries (\s a -> s { _smbEntries = a }) . _List
-
 -- | The URL of the Amazon SQS queue to take action on.
-smbQueueUrl :: Lens' SendMessageBatch Text
-smbQueueUrl = lens _smbQueueUrl (\s a -> s { _smbQueueUrl = a })
-
-data SendMessageBatchResponse = SendMessageBatchResponse
-    { _smbrFailed     :: List "member" BatchResultErrorEntry
-    , _smbrSuccessful :: List "member" SendMessageBatchResultEntry
-    } deriving (Eq, Read, Show)
+smbQueueURL :: Lens' SendMessageBatch Text
+smbQueueURL = lens _smbQueueURL (\ s a -> s{_smbQueueURL = a});
 
--- | 'SendMessageBatchResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'smbrFailed' @::@ ['BatchResultErrorEntry']
---
--- * 'smbrSuccessful' @::@ ['SendMessageBatchResultEntry']
---
-sendMessageBatchResponse :: SendMessageBatchResponse
-sendMessageBatchResponse = SendMessageBatchResponse
-    { _smbrSuccessful = mempty
-    , _smbrFailed     = mempty
-    }
+-- | A list of SendMessageBatchRequestEntry items.
+smbEntries :: Lens' SendMessageBatch [SendMessageBatchRequestEntry]
+smbEntries = lens _smbEntries (\ s a -> s{_smbEntries = a}) . _Coerce;
 
--- | A list of 'BatchResultErrorEntry' items with the error detail about each
--- message that could not be enqueued.
-smbrFailed :: Lens' SendMessageBatchResponse [BatchResultErrorEntry]
-smbrFailed = lens _smbrFailed (\s a -> s { _smbrFailed = a }) . _List
+instance AWSRequest SendMessageBatch where
+        type Sv SendMessageBatch = SQS
+        type Rs SendMessageBatch = SendMessageBatchResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "SendMessageBatchResult"
+              (\ s h x ->
+                 SendMessageBatchResponse' <$>
+                   (pure (fromEnum s)) <*>
+                     (parseXMLList "SendMessageBatchResultEntry" x)
+                     <*> (parseXMLList "BatchResultErrorEntry" x))
 
--- | A list of 'SendMessageBatchResultEntry' items.
-smbrSuccessful :: Lens' SendMessageBatchResponse [SendMessageBatchResultEntry]
-smbrSuccessful = lens _smbrSuccessful (\s a -> s { _smbrSuccessful = a }) . _List
+instance ToHeaders SendMessageBatch where
+        toHeaders = const mempty
 
 instance ToPath SendMessageBatch where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery SendMessageBatch where
-    toQuery SendMessageBatch{..} = mconcat
-        [ toQuery   _smbEntries
-        , "QueueUrl" =? _smbQueueUrl
-        ]
+        toQuery SendMessageBatch'{..}
+          = mconcat
+              ["Action" =: ("SendMessageBatch" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _smbQueueURL,
+               toQueryList "SendMessageBatchRequestEntry"
+                 _smbEntries]
 
-instance ToHeaders SendMessageBatch
+-- | For each message in the batch, the response contains a
+-- SendMessageBatchResultEntry tag if the message succeeds or a
+-- BatchResultErrorEntry tag if the message fails.
+--
+-- /See:/ 'sendMessageBatchResponse' smart constructor.
+data SendMessageBatchResponse = SendMessageBatchResponse'
+    { _smbrsStatus     :: !Int
+    , _smbrsSuccessful :: ![SendMessageBatchResultEntry]
+    , _smbrsFailed     :: ![BatchResultErrorEntry]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest SendMessageBatch where
-    type Sv SendMessageBatch = SQS
-    type Rs SendMessageBatch = SendMessageBatchResponse
+-- | Creates a value of 'SendMessageBatchResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'smbrsStatus'
+--
+-- * 'smbrsSuccessful'
+--
+-- * 'smbrsFailed'
+sendMessageBatchResponse
+    :: Int -- ^ 'smbrsStatus'
+    -> SendMessageBatchResponse
+sendMessageBatchResponse pStatus_ =
+    SendMessageBatchResponse'
+    { _smbrsStatus = pStatus_
+    , _smbrsSuccessful = mempty
+    , _smbrsFailed = mempty
+    }
 
-    request  = post "SendMessageBatch"
-    response = xmlResponse
+-- | The response status code.
+smbrsStatus :: Lens' SendMessageBatchResponse Int
+smbrsStatus = lens _smbrsStatus (\ s a -> s{_smbrsStatus = a});
 
-instance FromXML SendMessageBatchResponse where
-    parseXML = withElement "SendMessageBatchResult" $ \x -> SendMessageBatchResponse
-        <$> parseXML x
-        <*> parseXML x
+-- | A list of SendMessageBatchResultEntry items.
+smbrsSuccessful :: Lens' SendMessageBatchResponse [SendMessageBatchResultEntry]
+smbrsSuccessful = lens _smbrsSuccessful (\ s a -> s{_smbrsSuccessful = a}) . _Coerce;
+
+-- | A list of BatchResultErrorEntry items with the error detail about each
+-- message that could not be enqueued.
+smbrsFailed :: Lens' SendMessageBatchResponse [BatchResultErrorEntry]
+smbrsFailed = lens _smbrsFailed (\ s a -> s{_smbrsFailed = a}) . _Coerce;
diff --git a/gen/Network/AWS/SQS/SetQueueAttributes.hs b/gen/Network/AWS/SQS/SetQueueAttributes.hs
--- a/gen/Network/AWS/SQS/SetQueueAttributes.hs
+++ b/gen/Network/AWS/SQS/SetQueueAttributes.hs
@@ -1,127 +1,141 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.SQS.SetQueueAttributes
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Sets the value of one or more queue attributes. When you change a queue's
--- attributes, the change can take up to 60 seconds for most of the attributes
--- to propagate throughout the SQS system. Changes made to the 'MessageRetentionPeriod' attribute can take up to 15 minutes.
+-- Sets the value of one or more queue attributes. When you change a
+-- queue\'s attributes, the change can take up to 60 seconds for most of
+-- the attributes to propagate throughout the SQS system. Changes made to
+-- the 'MessageRetentionPeriod' attribute can take up to 15 minutes.
 --
--- Going forward, new attributes might be added. If you are writing code that
--- calls this action, we recommend that you structure your code so that it can
--- handle new attributes gracefully.
+-- Going forward, new attributes might be added. If you are writing code
+-- that calls this action, we recommend that you structure your code so
+-- that it can handle new attributes gracefully.
 --
--- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html AWS API Reference> for SetQueueAttributes.
 module Network.AWS.SQS.SetQueueAttributes
     (
-    -- * Request
-      SetQueueAttributes
-    -- ** Request constructor
-    , setQueueAttributes
-    -- ** Request lenses
+    -- * Creating a Request
+      setQueueAttributes
+    , SetQueueAttributes
+    -- * Request Lenses
+    , sqaQueueURL
     , sqaAttributes
-    , sqaQueueUrl
 
-    -- * Response
-    , SetQueueAttributesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , setQueueAttributesResponse
+    , SetQueueAttributesResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.SQS.Types
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+import           Network.AWS.SQS.Types
+import           Network.AWS.SQS.Types.Product
 
-data SetQueueAttributes = SetQueueAttributes
-    { _sqaAttributes :: EMap "entry" "Name" "Value" Text Text
-    , _sqaQueueUrl   :: Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'setQueueAttributes' smart constructor.
+data SetQueueAttributes = SetQueueAttributes'
+    { _sqaQueueURL   :: !Text
+    , _sqaAttributes :: !(Map QueueAttributeName Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'SetQueueAttributes' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'SetQueueAttributes' with the minimum fields required to make a request.
 --
--- * 'sqaAttributes' @::@ 'HashMap' 'Text' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'sqaQueueUrl' @::@ 'Text'
+-- * 'sqaQueueURL'
 --
-setQueueAttributes :: Text -- ^ 'sqaQueueUrl'
-                   -> SetQueueAttributes
-setQueueAttributes p1 = SetQueueAttributes
-    { _sqaQueueUrl   = p1
+-- * 'sqaAttributes'
+setQueueAttributes
+    :: Text -- ^ 'sqaQueueURL'
+    -> SetQueueAttributes
+setQueueAttributes pQueueURL_ =
+    SetQueueAttributes'
+    { _sqaQueueURL = pQueueURL_
     , _sqaAttributes = mempty
     }
 
+-- | The URL of the Amazon SQS queue to take action on.
+sqaQueueURL :: Lens' SetQueueAttributes Text
+sqaQueueURL = lens _sqaQueueURL (\ s a -> s{_sqaQueueURL = a});
+
 -- | A map of attributes to set.
 --
 -- The following lists the names, descriptions, and values of the special
 -- request parameters the 'SetQueueAttributes' action uses:
 --
--- 'DelaySeconds' - The time in seconds that the delivery of all messages in
--- the queue will be delayed. An integer from 0 to 900 (15 minutes). The default
--- for this attribute is 0 (zero).  'MaximumMessageSize' - The limit of how many
--- bytes a message can contain before Amazon SQS rejects it. An integer from
--- 1024 bytes (1 KiB) up to 262144 bytes (256 KiB). The default for this
--- attribute is 262144 (256 KiB).  'MessageRetentionPeriod' - The number of
--- seconds Amazon SQS retains a message. Integer representing seconds, from 60
--- (1 minute) to 1209600 (14 days). The default for this attribute is 345600 (4
--- days).  'Policy' - The queue's policy. A valid AWS policy. For more information
--- about policy structure, see <http://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html Overview of AWS IAM Policies> in the /Amazon IAMUser Guide/.  'ReceiveMessageWaitTimeSeconds' - The time for which a
--- ReceiveMessage call will wait for a message to arrive. An integer from 0 to
--- 20 (seconds). The default for this attribute is 0.   'VisibilityTimeout' - The
--- visibility timeout for the queue. An integer from 0 to 43200 (12 hours). The
--- default for this attribute is 30. For more information about visibility
--- timeout, see Visibility Timeout in the /Amazon SQS Developer Guide/.  'RedrivePolicy' - The parameters for dead letter queue functionality of the source queue.
--- For more information about RedrivePolicy and dead letter queues, see Using
--- Amazon SQS Dead Letter Queues in the /Amazon SQS Developer Guide/.
-sqaAttributes :: Lens' SetQueueAttributes (HashMap Text Text)
-sqaAttributes = lens _sqaAttributes (\s a -> s { _sqaAttributes = a }) . _EMap
-
--- | The URL of the Amazon SQS queue to take action on.
-sqaQueueUrl :: Lens' SetQueueAttributes Text
-sqaQueueUrl = lens _sqaQueueUrl (\s a -> s { _sqaQueueUrl = a })
+-- -   'DelaySeconds' - The time in seconds that the delivery of all
+--     messages in the queue will be delayed. An integer from 0 to 900 (15
+--     minutes). The default for this attribute is 0 (zero).
+-- -   'MaximumMessageSize' - The limit of how many bytes a message can
+--     contain before Amazon SQS rejects it. An integer from 1024 bytes (1
+--     KiB) up to 262144 bytes (256 KiB). The default for this attribute is
+--     262144 (256 KiB).
+-- -   'MessageRetentionPeriod' - The number of seconds Amazon SQS retains
+--     a message. Integer representing seconds, from 60 (1 minute) to
+--     1209600 (14 days). The default for this attribute is 345600 (4
+--     days).
+-- -   'Policy' - The queue\'s policy. A valid AWS policy. For more
+--     information about policy structure, see
+--     <http://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html Overview of AWS IAM Policies>
+--     in the /Amazon IAM User Guide/.
+-- -   'ReceiveMessageWaitTimeSeconds' - The time for which a
+--     ReceiveMessage call will wait for a message to arrive. An integer
+--     from 0 to 20 (seconds). The default for this attribute is 0.
+-- -   'VisibilityTimeout' - The visibility timeout for the queue. An
+--     integer from 0 to 43200 (12 hours). The default for this attribute
+--     is 30. For more information about visibility timeout, see Visibility
+--     Timeout in the /Amazon SQS Developer Guide/.
+-- -   'RedrivePolicy' - The parameters for dead letter queue functionality
+--     of the source queue. For more information about RedrivePolicy and
+--     dead letter queues, see Using Amazon SQS Dead Letter Queues in the
+--     /Amazon SQS Developer Guide/.
+sqaAttributes :: Lens' SetQueueAttributes (HashMap QueueAttributeName Text)
+sqaAttributes = lens _sqaAttributes (\ s a -> s{_sqaAttributes = a}) . _Map;
 
-data SetQueueAttributesResponse = SetQueueAttributesResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest SetQueueAttributes where
+        type Sv SetQueueAttributes = SQS
+        type Rs SetQueueAttributes =
+             SetQueueAttributesResponse
+        request = postQuery
+        response = receiveNull SetQueueAttributesResponse'
 
--- | 'SetQueueAttributesResponse' constructor.
-setQueueAttributesResponse :: SetQueueAttributesResponse
-setQueueAttributesResponse = SetQueueAttributesResponse
+instance ToHeaders SetQueueAttributes where
+        toHeaders = const mempty
 
 instance ToPath SetQueueAttributes where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery SetQueueAttributes where
-    toQuery SetQueueAttributes{..} = mconcat
-        [ toQuery    _sqaAttributes
-        , "QueueUrl"  =? _sqaQueueUrl
-        ]
-
-instance ToHeaders SetQueueAttributes
+        toQuery SetQueueAttributes'{..}
+          = mconcat
+              ["Action" =: ("SetQueueAttributes" :: ByteString),
+               "Version" =: ("2012-11-05" :: ByteString),
+               "QueueUrl" =: _sqaQueueURL,
+               toQueryMap "Attribute" "Name" "Value" _sqaAttributes]
 
-instance AWSRequest SetQueueAttributes where
-    type Sv SetQueueAttributes = SQS
-    type Rs SetQueueAttributes = SetQueueAttributesResponse
+-- | /See:/ 'setQueueAttributesResponse' smart constructor.
+data SetQueueAttributesResponse =
+    SetQueueAttributesResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "SetQueueAttributes"
-    response = nullResponse SetQueueAttributesResponse
+-- | Creates a value of 'SetQueueAttributesResponse' with the minimum fields required to make a request.
+--
+setQueueAttributesResponse
+    :: SetQueueAttributesResponse
+setQueueAttributesResponse = SetQueueAttributesResponse'
diff --git a/gen/Network/AWS/SQS/Types.hs b/gen/Network/AWS/SQS/Types.hs
--- a/gen/Network/AWS/SQS/Types.hs
+++ b/gen/Network/AWS/SQS/Types.hs
@@ -1,679 +1,242 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
 
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
 
+-- |
 -- Module      : Network.AWS.SQS.Types
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
 module Network.AWS.SQS.Types
     (
     -- * Service
       SQS
-    -- ** Error
-    , RESTError
-    -- ** XML
-    , ns
 
-    -- * DeleteMessageBatchRequestEntry
-    , DeleteMessageBatchRequestEntry
-    , deleteMessageBatchRequestEntry
-    , dmbreId
-    , dmbreReceiptHandle
+    -- * Errors
+    , _InvalidBatchEntryId
+    , _TooManyEntriesInBatchRequest
+    , _InvalidAttributeName
+    , _QueueDeletedRecently
+    , _QueueDoesNotExist
+    , _UnsupportedOperation
+    , _InvalidMessageContents
+    , _BatchRequestTooLong
+    , _OverLimit
+    , _PurgeQueueInProgress
+    , _QueueNameExists
+    , _InvalidIdFormat
+    , _ReceiptHandleIsInvalid
+    , _EmptyBatchRequest
+    , _MessageNotInflight
+    , _BatchEntryIdsNotDistinct
 
-    -- * MessageAttributeValue
-    , MessageAttributeValue
-    , messageAttributeValue
-    , mavBinaryListValues
-    , mavBinaryValue
-    , mavDataType
-    , mavStringListValues
-    , mavStringValue
+    -- * QueueAttributeName
+    , QueueAttributeName (..)
 
+    -- * BatchResultErrorEntry
+    , BatchResultErrorEntry
+    , batchResultErrorEntry
+    , breeMessage
+    , breeId
+    , breeSenderFault
+    , breeCode
+
+    -- * ChangeMessageVisibilityBatchRequestEntry
+    , ChangeMessageVisibilityBatchRequestEntry
+    , changeMessageVisibilityBatchRequestEntry
+    , cVisibilityTimeout
+    , cId
+    , cReceiptHandle
+
     -- * ChangeMessageVisibilityBatchResultEntry
     , ChangeMessageVisibilityBatchResultEntry
     , changeMessageVisibilityBatchResultEntry
     , cmvbreId
 
-    -- * ChangeMessageVisibilityBatchRequestEntry
-    , ChangeMessageVisibilityBatchRequestEntry
-    , changeMessageVisibilityBatchRequestEntry
-    , cmvbre1Id
-    , cmvbre1ReceiptHandle
-    , cmvbre1VisibilityTimeout
+    -- * DeleteMessageBatchRequestEntry
+    , DeleteMessageBatchRequestEntry
+    , deleteMessageBatchRequestEntry
+    , dmbreId
+    , dmbreReceiptHandle
 
     -- * DeleteMessageBatchResultEntry
     , DeleteMessageBatchResultEntry
     , deleteMessageBatchResultEntry
-    , dmbre1Id
+    , dId
 
     -- * Message
     , Message
     , message
-    , mAttributes
-    , mBody
-    , mMD5OfBody
-    , mMD5OfMessageAttributes
     , mMessageAttributes
+    , mMD5OfBody
+    , mBody
+    , mAttributes
     , mMessageId
     , mReceiptHandle
+    , mMD5OfMessageAttributes
 
+    -- * MessageAttributeValue
+    , MessageAttributeValue
+    , messageAttributeValue
+    , mavBinaryValue
+    , mavStringListValues
+    , mavStringValue
+    , mavBinaryListValues
+    , mavDataType
+
     -- * SendMessageBatchRequestEntry
     , SendMessageBatchRequestEntry
     , sendMessageBatchRequestEntry
-    , smbreDelaySeconds
-    , smbreId
-    , smbreMessageAttributes
-    , smbreMessageBody
+    , sMessageAttributes
+    , sDelaySeconds
+    , sId
+    , sMessageBody
 
     -- * SendMessageBatchResultEntry
     , SendMessageBatchResultEntry
     , sendMessageBatchResultEntry
-    , smbre1Id
-    , smbre1MD5OfMessageAttributes
-    , smbre1MD5OfMessageBody
-    , smbre1MessageId
-
-    -- * BatchResultErrorEntry
-    , BatchResultErrorEntry
-    , batchResultErrorEntry
-    , breeCode
-    , breeId
-    , breeMessage
-    , breeSenderFault
+    , smbreMD5OfMessageAttributes
+    , smbreId
+    , smbreMessageId
+    , smbreMD5OfMessageBody
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+import           Network.AWS.SQS.Types.Product
+import           Network.AWS.SQS.Types.Sum
 
--- | Version @2012-11-05@ of the Amazon Simple Queue Service service.
+-- | Version @2012-11-05@ of the Amazon Simple Queue Service SDK.
 data SQS
 
 instance AWSService SQS where
     type Sg SQS = V4
-    type Er SQS = RESTError
-
-    service = service'
+    service = const svc
       where
-        service' :: Service SQS
-        service' = Service
-            { _svcAbbrev       = "SQS"
-            , _svcPrefix       = "sqs"
-            , _svcVersion      = "2012-11-05"
-            , _svcTargetPrefix = Nothing
-            , _svcJSONVersion  = Nothing
-            , _svcHandle       = handle
-            , _svcRetry        = retry
+        svc =
+            Service
+            { _svcAbbrev = "SQS"
+            , _svcPrefix = "sqs"
+            , _svcVersion = "2012-11-05"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseXMLError
+            , _svcRetry = retry
             }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError RESTError)
-        handle = restError statusSuccess service'
-
-        retry :: Retry SQS
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
             , _retryAttempts = 5
-            , _retryCheck    = check
+            , _retryCheck = check
             }
-
-        check :: Status
-              -> RESTError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 403 && (Just "RequestThrottled") == e = True -- Request Limit Exceeded
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-ns :: Text
-ns = "http://queue.amazonaws.com/doc/2012-11-05/"
-{-# INLINE ns #-}
-
-data DeleteMessageBatchRequestEntry = DeleteMessageBatchRequestEntry
-    { _dmbreId            :: Text
-    , _dmbreReceiptHandle :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'DeleteMessageBatchRequestEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dmbreId' @::@ 'Text'
---
--- * 'dmbreReceiptHandle' @::@ 'Text'
---
-deleteMessageBatchRequestEntry :: Text -- ^ 'dmbreId'
-                               -> Text -- ^ 'dmbreReceiptHandle'
-                               -> DeleteMessageBatchRequestEntry
-deleteMessageBatchRequestEntry p1 p2 = DeleteMessageBatchRequestEntry
-    { _dmbreId            = p1
-    , _dmbreReceiptHandle = p2
-    }
-
--- | An identifier for this particular receipt handle. This is used to communicate
--- the result. Note that the 'Id's of a batch request need to be unique within the
--- request.
-dmbreId :: Lens' DeleteMessageBatchRequestEntry Text
-dmbreId = lens _dmbreId (\s a -> s { _dmbreId = a })
-
--- | A receipt handle.
-dmbreReceiptHandle :: Lens' DeleteMessageBatchRequestEntry Text
-dmbreReceiptHandle =
-    lens _dmbreReceiptHandle (\s a -> s { _dmbreReceiptHandle = a })
-
-instance FromXML DeleteMessageBatchRequestEntry where
-    parseXML x = DeleteMessageBatchRequestEntry
-        <$> x .@  "Id"
-        <*> x .@  "ReceiptHandle"
-
-instance ToQuery DeleteMessageBatchRequestEntry where
-    toQuery DeleteMessageBatchRequestEntry{..} = mconcat
-        [ "Id"            =? _dmbreId
-        , "ReceiptHandle" =? _dmbreReceiptHandle
-        ]
-
-data MessageAttributeValue = MessageAttributeValue
-    { _mavBinaryListValues :: List "member" Base64
-    , _mavBinaryValue      :: Maybe Base64
-    , _mavDataType         :: Text
-    , _mavStringListValues :: List "member" Text
-    , _mavStringValue      :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'MessageAttributeValue' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'mavBinaryListValues' @::@ ['Base64']
---
--- * 'mavBinaryValue' @::@ 'Maybe' 'Base64'
---
--- * 'mavDataType' @::@ 'Text'
---
--- * 'mavStringListValues' @::@ ['Text']
---
--- * 'mavStringValue' @::@ 'Maybe' 'Text'
---
-messageAttributeValue :: Text -- ^ 'mavDataType'
-                      -> MessageAttributeValue
-messageAttributeValue p1 = MessageAttributeValue
-    { _mavDataType         = p1
-    , _mavStringValue      = Nothing
-    , _mavBinaryValue      = Nothing
-    , _mavStringListValues = mempty
-    , _mavBinaryListValues = mempty
-    }
-
--- | Not implemented. Reserved for future use.
-mavBinaryListValues :: Lens' MessageAttributeValue [Base64]
-mavBinaryListValues =
-    lens _mavBinaryListValues (\s a -> s { _mavBinaryListValues = a })
-        . _List
-
--- | Binary type attributes can store any binary data, for example, compressed
--- data, encrypted data, or images.
-mavBinaryValue :: Lens' MessageAttributeValue (Maybe Base64)
-mavBinaryValue = lens _mavBinaryValue (\s a -> s { _mavBinaryValue = a })
-
--- | Amazon SQS supports the following logical data types: String, Number, and
--- Binary. In addition, you can append your own custom labels. For more
--- information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html#SQSMessageAttributes.DataTypes Message Attribute Data Types>.
-mavDataType :: Lens' MessageAttributeValue Text
-mavDataType = lens _mavDataType (\s a -> s { _mavDataType = a })
-
--- | Not implemented. Reserved for future use.
-mavStringListValues :: Lens' MessageAttributeValue [Text]
-mavStringListValues =
-    lens _mavStringListValues (\s a -> s { _mavStringListValues = a })
-        . _List
-
--- | Strings are Unicode with UTF8 binary encoding. For a list of code values, see <http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters>.
-mavStringValue :: Lens' MessageAttributeValue (Maybe Text)
-mavStringValue = lens _mavStringValue (\s a -> s { _mavStringValue = a })
-
-instance FromXML MessageAttributeValue where
-    parseXML x = MessageAttributeValue
-        <$> x .@? "BinaryListValue" .!@ mempty
-        <*> x .@? "BinaryValue"
-        <*> x .@  "DataType"
-        <*> x .@? "StringListValue" .!@ mempty
-        <*> x .@? "StringValue"
-
-instance ToQuery MessageAttributeValue where
-    toQuery MessageAttributeValue{..} = mconcat
-        [ "BinaryListValue" =? _mavBinaryListValues
-        , "BinaryValue"     =? _mavBinaryValue
-        , "DataType"        =? _mavDataType
-        , "StringListValue" =? _mavStringListValues
-        , "StringValue"     =? _mavStringValue
-        ]
-
-newtype ChangeMessageVisibilityBatchResultEntry = ChangeMessageVisibilityBatchResultEntry
-    { _cmvbreId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'ChangeMessageVisibilityBatchResultEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cmvbreId' @::@ 'Text'
---
-changeMessageVisibilityBatchResultEntry :: Text -- ^ 'cmvbreId'
-                                        -> ChangeMessageVisibilityBatchResultEntry
-changeMessageVisibilityBatchResultEntry p1 = ChangeMessageVisibilityBatchResultEntry
-    { _cmvbreId = p1
-    }
-
--- | Represents a message whose visibility timeout has been changed successfully.
-cmvbreId :: Lens' ChangeMessageVisibilityBatchResultEntry Text
-cmvbreId = lens _cmvbreId (\s a -> s { _cmvbreId = a })
-
-instance FromXML ChangeMessageVisibilityBatchResultEntry where
-    parseXML x = ChangeMessageVisibilityBatchResultEntry
-        <$> x .@  "Id"
-
-instance ToQuery ChangeMessageVisibilityBatchResultEntry where
-    toQuery ChangeMessageVisibilityBatchResultEntry{..} = mconcat
-        [ "Id" =? _cmvbreId
-        ]
-
-data ChangeMessageVisibilityBatchRequestEntry = ChangeMessageVisibilityBatchRequestEntry
-    { _cmvbre1Id                :: Text
-    , _cmvbre1ReceiptHandle     :: Text
-    , _cmvbre1VisibilityTimeout :: Maybe Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'ChangeMessageVisibilityBatchRequestEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cmvbre1Id' @::@ 'Text'
---
--- * 'cmvbre1ReceiptHandle' @::@ 'Text'
---
--- * 'cmvbre1VisibilityTimeout' @::@ 'Maybe' 'Int'
---
-changeMessageVisibilityBatchRequestEntry :: Text -- ^ 'cmvbre1Id'
-                                         -> Text -- ^ 'cmvbre1ReceiptHandle'
-                                         -> ChangeMessageVisibilityBatchRequestEntry
-changeMessageVisibilityBatchRequestEntry p1 p2 = ChangeMessageVisibilityBatchRequestEntry
-    { _cmvbre1Id                = p1
-    , _cmvbre1ReceiptHandle     = p2
-    , _cmvbre1VisibilityTimeout = Nothing
-    }
-
--- | An identifier for this particular receipt handle. This is used to communicate
--- the result. Note that the 'Id's of a batch request need to be unique within the
--- request.
-cmvbre1Id :: Lens' ChangeMessageVisibilityBatchRequestEntry Text
-cmvbre1Id = lens _cmvbre1Id (\s a -> s { _cmvbre1Id = a })
-
--- | A receipt handle.
-cmvbre1ReceiptHandle :: Lens' ChangeMessageVisibilityBatchRequestEntry Text
-cmvbre1ReceiptHandle =
-    lens _cmvbre1ReceiptHandle (\s a -> s { _cmvbre1ReceiptHandle = a })
-
--- | The new value (in seconds) for the message's visibility timeout.
-cmvbre1VisibilityTimeout :: Lens' ChangeMessageVisibilityBatchRequestEntry (Maybe Int)
-cmvbre1VisibilityTimeout =
-    lens _cmvbre1VisibilityTimeout
-        (\s a -> s { _cmvbre1VisibilityTimeout = a })
-
-instance FromXML ChangeMessageVisibilityBatchRequestEntry where
-    parseXML x = ChangeMessageVisibilityBatchRequestEntry
-        <$> x .@  "Id"
-        <*> x .@  "ReceiptHandle"
-        <*> x .@? "VisibilityTimeout"
-
-instance ToQuery ChangeMessageVisibilityBatchRequestEntry where
-    toQuery ChangeMessageVisibilityBatchRequestEntry{..} = mconcat
-        [ "Id"                =? _cmvbre1Id
-        , "ReceiptHandle"     =? _cmvbre1ReceiptHandle
-        , "VisibilityTimeout" =? _cmvbre1VisibilityTimeout
-        ]
-
-newtype DeleteMessageBatchResultEntry = DeleteMessageBatchResultEntry
-    { _dmbre1Id :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'DeleteMessageBatchResultEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dmbre1Id' @::@ 'Text'
---
-deleteMessageBatchResultEntry :: Text -- ^ 'dmbre1Id'
-                              -> DeleteMessageBatchResultEntry
-deleteMessageBatchResultEntry p1 = DeleteMessageBatchResultEntry
-    { _dmbre1Id = p1
-    }
-
--- | Represents a successfully deleted message.
-dmbre1Id :: Lens' DeleteMessageBatchResultEntry Text
-dmbre1Id = lens _dmbre1Id (\s a -> s { _dmbre1Id = a })
-
-instance FromXML DeleteMessageBatchResultEntry where
-    parseXML x = DeleteMessageBatchResultEntry
-        <$> x .@  "Id"
-
-instance ToQuery DeleteMessageBatchResultEntry where
-    toQuery DeleteMessageBatchResultEntry{..} = mconcat
-        [ "Id" =? _dmbre1Id
-        ]
-
-data Message = Message
-    { _mAttributes             :: EMap "entry" "Name" "Value" Text Text
-    , _mBody                   :: Maybe Text
-    , _mMD5OfBody              :: Maybe Text
-    , _mMD5OfMessageAttributes :: Maybe Text
-    , _mMessageAttributes      :: EMap "entry" "Name" "Value" Text MessageAttributeValue
-    , _mMessageId              :: Maybe Text
-    , _mReceiptHandle          :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'Message' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'mAttributes' @::@ 'HashMap' 'Text' 'Text'
---
--- * 'mBody' @::@ 'Maybe' 'Text'
---
--- * 'mMD5OfBody' @::@ 'Maybe' 'Text'
---
--- * 'mMD5OfMessageAttributes' @::@ 'Maybe' 'Text'
---
--- * 'mMessageAttributes' @::@ 'HashMap' 'Text' 'MessageAttributeValue'
---
--- * 'mMessageId' @::@ 'Maybe' 'Text'
---
--- * 'mReceiptHandle' @::@ 'Maybe' 'Text'
---
-message :: Message
-message = Message
-    { _mMessageId              = Nothing
-    , _mReceiptHandle          = Nothing
-    , _mMD5OfBody              = Nothing
-    , _mBody                   = Nothing
-    , _mAttributes             = mempty
-    , _mMD5OfMessageAttributes = Nothing
-    , _mMessageAttributes      = mempty
-    }
-
--- | 'SenderId', 'SentTimestamp', 'ApproximateReceiveCount', and/or 'ApproximateFirstReceiveTimestamp'. 'SentTimestamp' and 'ApproximateFirstReceiveTimestamp' are each returned as an
--- integer representing the <http://en.wikipedia.org/wiki/Unix_time epoch time> in milliseconds.
-mAttributes :: Lens' Message (HashMap Text Text)
-mAttributes = lens _mAttributes (\s a -> s { _mAttributes = a }) . _EMap
-
--- | The message's contents (not URL-encoded).
-mBody :: Lens' Message (Maybe Text)
-mBody = lens _mBody (\s a -> s { _mBody = a })
-
--- | An MD5 digest of the non-URL-encoded message body string.
-mMD5OfBody :: Lens' Message (Maybe Text)
-mMD5OfBody = lens _mMD5OfBody (\s a -> s { _mMD5OfBody = a })
-
--- | An MD5 digest of the non-URL-encoded message attribute string. This can be
--- used to verify that Amazon SQS received the message correctly. Amazon SQS
--- first URL decodes the message before creating the MD5 digest. For information
--- about MD5, go to <http://www.faqs.org/rfcs/rfc1321.html http://www.faqs.org/rfcs/rfc1321.html>.
-mMD5OfMessageAttributes :: Lens' Message (Maybe Text)
-mMD5OfMessageAttributes =
-    lens _mMD5OfMessageAttributes (\s a -> s { _mMD5OfMessageAttributes = a })
-
--- | Each message attribute consists of a Name, Type, and Value. For more
--- information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html#SQSMessageAttributesNTV Message Attribute Items>.
-mMessageAttributes :: Lens' Message (HashMap Text MessageAttributeValue)
-mMessageAttributes =
-    lens _mMessageAttributes (\s a -> s { _mMessageAttributes = a })
-        . _EMap
-
--- | A unique identifier for the message. Message IDs are considered unique across
--- all AWS accounts for an extended period of time.
-mMessageId :: Lens' Message (Maybe Text)
-mMessageId = lens _mMessageId (\s a -> s { _mMessageId = a })
-
--- | An identifier associated with the act of receiving the message. A new receipt
--- handle is returned every time you receive a message. When deleting a message,
--- you provide the last received receipt handle to delete the message.
-mReceiptHandle :: Lens' Message (Maybe Text)
-mReceiptHandle = lens _mReceiptHandle (\s a -> s { _mReceiptHandle = a })
-
-instance FromXML Message where
-    parseXML x = Message
-        <$> parseXML x
-        <*> x .@? "Body"
-        <*> x .@? "MD5OfBody"
-        <*> x .@? "MD5OfMessageAttributes"
-        <*> parseXML x
-        <*> x .@? "MessageId"
-        <*> x .@? "ReceiptHandle"
-
-instance ToQuery Message where
-    toQuery Message{..} = mconcat
-        [ toQuery                 _mAttributes
-        , "Body"                   =? _mBody
-        , "MD5OfBody"              =? _mMD5OfBody
-        , "MD5OfMessageAttributes" =? _mMD5OfMessageAttributes
-        , toQuery                 _mMessageAttributes
-        , "MessageId"              =? _mMessageId
-        , "ReceiptHandle"          =? _mReceiptHandle
-        ]
-
-data SendMessageBatchRequestEntry = SendMessageBatchRequestEntry
-    { _smbreDelaySeconds      :: Maybe Int
-    , _smbreId                :: Text
-    , _smbreMessageAttributes :: EMap "entry" "Name" "Value" Text MessageAttributeValue
-    , _smbreMessageBody       :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'SendMessageBatchRequestEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'smbreDelaySeconds' @::@ 'Maybe' 'Int'
---
--- * 'smbreId' @::@ 'Text'
---
--- * 'smbreMessageAttributes' @::@ 'HashMap' 'Text' 'MessageAttributeValue'
---
--- * 'smbreMessageBody' @::@ 'Text'
---
-sendMessageBatchRequestEntry :: Text -- ^ 'smbreId'
-                             -> Text -- ^ 'smbreMessageBody'
-                             -> SendMessageBatchRequestEntry
-sendMessageBatchRequestEntry p1 p2 = SendMessageBatchRequestEntry
-    { _smbreId                = p1
-    , _smbreMessageBody       = p2
-    , _smbreDelaySeconds      = Nothing
-    , _smbreMessageAttributes = mempty
-    }
-
--- | The number of seconds for which the message has to be delayed.
-smbreDelaySeconds :: Lens' SendMessageBatchRequestEntry (Maybe Int)
-smbreDelaySeconds =
-    lens _smbreDelaySeconds (\s a -> s { _smbreDelaySeconds = a })
-
--- | An identifier for the message in this batch. This is used to communicate the
--- result. Note that the 'Id's of a batch request need to be unique within the
--- request.
-smbreId :: Lens' SendMessageBatchRequestEntry Text
-smbreId = lens _smbreId (\s a -> s { _smbreId = a })
-
--- | Each message attribute consists of a Name, Type, and Value. For more
--- information, see <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html#SQSMessageAttributesNTV Message Attribute Items>.
-smbreMessageAttributes :: Lens' SendMessageBatchRequestEntry (HashMap Text MessageAttributeValue)
-smbreMessageAttributes =
-    lens _smbreMessageAttributes (\s a -> s { _smbreMessageAttributes = a })
-        . _EMap
-
--- | Body of the message.
-smbreMessageBody :: Lens' SendMessageBatchRequestEntry Text
-smbreMessageBody = lens _smbreMessageBody (\s a -> s { _smbreMessageBody = a })
-
-instance FromXML SendMessageBatchRequestEntry where
-    parseXML x = SendMessageBatchRequestEntry
-        <$> x .@? "DelaySeconds"
-        <*> x .@  "Id"
-        <*> parseXML x
-        <*> x .@  "MessageBody"
-
-instance ToQuery SendMessageBatchRequestEntry where
-    toQuery SendMessageBatchRequestEntry{..} = mconcat
-        [ "DelaySeconds"     =? _smbreDelaySeconds
-        , "Id"               =? _smbreId
-        , toQuery           _smbreMessageAttributes
-        , "MessageBody"      =? _smbreMessageBody
-        ]
+        check e
+          | has (hasCode "RequestThrottled" . hasStatus 403) e =
+              Just "request_limit_exceeded"
+          | has (hasCode "ThrottlingException" . hasStatus 400) e =
+              Just "throttling_exception"
+          | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+          | has (hasStatus 503) e = Just "service_unavailable"
+          | has (hasStatus 500) e = Just "general_server_error"
+          | has (hasStatus 509) e = Just "limit_exceeded"
+          | otherwise = Nothing
 
-data SendMessageBatchResultEntry = SendMessageBatchResultEntry
-    { _smbre1Id                     :: Text
-    , _smbre1MD5OfMessageAttributes :: Maybe Text
-    , _smbre1MD5OfMessageBody       :: Text
-    , _smbre1MessageId              :: Text
-    } deriving (Eq, Ord, Read, Show)
+-- | The 'Id' of a batch entry in a batch request does not abide by the
+-- specification.
+_InvalidBatchEntryId :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidBatchEntryId =
+    _ServiceError .
+    hasStatus 400 . hasCode "AWS.SimpleQueueService.InvalidBatchEntryId"
 
--- | 'SendMessageBatchResultEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'smbre1Id' @::@ 'Text'
---
--- * 'smbre1MD5OfMessageAttributes' @::@ 'Maybe' 'Text'
---
--- * 'smbre1MD5OfMessageBody' @::@ 'Text'
---
--- * 'smbre1MessageId' @::@ 'Text'
---
-sendMessageBatchResultEntry :: Text -- ^ 'smbre1Id'
-                            -> Text -- ^ 'smbre1MessageId'
-                            -> Text -- ^ 'smbre1MD5OfMessageBody'
-                            -> SendMessageBatchResultEntry
-sendMessageBatchResultEntry p1 p2 p3 = SendMessageBatchResultEntry
-    { _smbre1Id                     = p1
-    , _smbre1MessageId              = p2
-    , _smbre1MD5OfMessageBody       = p3
-    , _smbre1MD5OfMessageAttributes = Nothing
-    }
+-- | Batch request contains more number of entries than permissible.
+_TooManyEntriesInBatchRequest :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyEntriesInBatchRequest =
+    _ServiceError .
+    hasStatus 400 .
+    hasCode "AWS.SimpleQueueService.TooManyEntriesInBatchRequest"
 
--- | An identifier for the message in this batch.
-smbre1Id :: Lens' SendMessageBatchResultEntry Text
-smbre1Id = lens _smbre1Id (\s a -> s { _smbre1Id = a })
+-- | The attribute referred to does not exist.
+_InvalidAttributeName :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidAttributeName = _ServiceError . hasCode "InvalidAttributeName"
 
--- | An MD5 digest of the non-URL-encoded message attribute string. This can be
--- used to verify that Amazon SQS received the message batch correctly. Amazon
--- SQS first URL decodes the message before creating the MD5 digest. For
--- information about MD5, go to <http://www.faqs.org/rfcs/rfc1321.html http://www.faqs.org/rfcs/rfc1321.html>.
-smbre1MD5OfMessageAttributes :: Lens' SendMessageBatchResultEntry (Maybe Text)
-smbre1MD5OfMessageAttributes =
-    lens _smbre1MD5OfMessageAttributes
-        (\s a -> s { _smbre1MD5OfMessageAttributes = a })
+-- | You must wait 60 seconds after deleting a queue before you can create
+-- another with the same name.
+_QueueDeletedRecently :: AsError a => Getting (First ServiceError) a ServiceError
+_QueueDeletedRecently =
+    _ServiceError .
+    hasStatus 400 . hasCode "AWS.SimpleQueueService.QueueDeletedRecently"
 
--- | An MD5 digest of the non-URL-encoded message body string. This can be used to
--- verify that Amazon SQS received the message correctly. Amazon SQS first URL
--- decodes the message before creating the MD5 digest. For information about
--- MD5, go to <http://www.faqs.org/rfcs/rfc1321.html http://www.faqs.org/rfcs/rfc1321.html>.
-smbre1MD5OfMessageBody :: Lens' SendMessageBatchResultEntry Text
-smbre1MD5OfMessageBody =
-    lens _smbre1MD5OfMessageBody (\s a -> s { _smbre1MD5OfMessageBody = a })
+-- | The queue referred to does not exist.
+_QueueDoesNotExist :: AsError a => Getting (First ServiceError) a ServiceError
+_QueueDoesNotExist =
+    _ServiceError .
+    hasStatus 400 . hasCode "AWS.SimpleQueueService.NonExistentQueue"
 
--- | An identifier for the message.
-smbre1MessageId :: Lens' SendMessageBatchResultEntry Text
-smbre1MessageId = lens _smbre1MessageId (\s a -> s { _smbre1MessageId = a })
+-- | Error code 400. Unsupported operation.
+_UnsupportedOperation :: AsError a => Getting (First ServiceError) a ServiceError
+_UnsupportedOperation =
+    _ServiceError .
+    hasStatus 400 . hasCode "AWS.SimpleQueueService.UnsupportedOperation"
 
-instance FromXML SendMessageBatchResultEntry where
-    parseXML x = SendMessageBatchResultEntry
-        <$> x .@  "Id"
-        <*> x .@? "MD5OfMessageAttributes"
-        <*> x .@  "MD5OfMessageBody"
-        <*> x .@  "MessageId"
+-- | The message contains characters outside the allowed set.
+_InvalidMessageContents :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidMessageContents = _ServiceError . hasCode "InvalidMessageContents"
 
-instance ToQuery SendMessageBatchResultEntry where
-    toQuery SendMessageBatchResultEntry{..} = mconcat
-        [ "Id"                     =? _smbre1Id
-        , "MD5OfMessageAttributes" =? _smbre1MD5OfMessageAttributes
-        , "MD5OfMessageBody"       =? _smbre1MD5OfMessageBody
-        , "MessageId"              =? _smbre1MessageId
-        ]
+-- | The length of all the messages put together is more than the limit.
+_BatchRequestTooLong :: AsError a => Getting (First ServiceError) a ServiceError
+_BatchRequestTooLong =
+    _ServiceError .
+    hasStatus 400 . hasCode "AWS.SimpleQueueService.BatchRequestTooLong"
 
-data BatchResultErrorEntry = BatchResultErrorEntry
-    { _breeCode        :: Text
-    , _breeId          :: Text
-    , _breeMessage     :: Maybe Text
-    , _breeSenderFault :: Bool
-    } deriving (Eq, Ord, Read, Show)
+-- | The action that you requested would violate a limit. For example,
+-- ReceiveMessage returns this error if the maximum number of messages
+-- inflight has already been reached. AddPermission returns this error if
+-- the maximum number of permissions for the queue has already been
+-- reached.
+_OverLimit :: AsError a => Getting (First ServiceError) a ServiceError
+_OverLimit = _ServiceError . hasStatus 403 . hasCode "OverLimit"
 
--- | 'BatchResultErrorEntry' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'breeCode' @::@ 'Text'
---
--- * 'breeId' @::@ 'Text'
---
--- * 'breeMessage' @::@ 'Maybe' 'Text'
---
--- * 'breeSenderFault' @::@ 'Bool'
---
-batchResultErrorEntry :: Text -- ^ 'breeId'
-                      -> Bool -- ^ 'breeSenderFault'
-                      -> Text -- ^ 'breeCode'
-                      -> BatchResultErrorEntry
-batchResultErrorEntry p1 p2 p3 = BatchResultErrorEntry
-    { _breeId          = p1
-    , _breeSenderFault = p2
-    , _breeCode        = p3
-    , _breeMessage     = Nothing
-    }
+-- | Indicates that the specified queue previously received a 'PurgeQueue'
+-- request within the last 60 seconds, the time it can take to delete the
+-- messages in the queue.
+_PurgeQueueInProgress :: AsError a => Getting (First ServiceError) a ServiceError
+_PurgeQueueInProgress =
+    _ServiceError .
+    hasStatus 403 . hasCode "AWS.SimpleQueueService.PurgeQueueInProgress"
 
--- | An error code representing why the action failed on this entry.
-breeCode :: Lens' BatchResultErrorEntry Text
-breeCode = lens _breeCode (\s a -> s { _breeCode = a })
+-- | A queue already exists with this name. Amazon SQS returns this error
+-- only if the request includes attributes whose values differ from those
+-- of the existing queue.
+_QueueNameExists :: AsError a => Getting (First ServiceError) a ServiceError
+_QueueNameExists = _ServiceError . hasStatus 400 . hasCode "QueueAlreadyExists"
 
--- | The id of an entry in a batch request.
-breeId :: Lens' BatchResultErrorEntry Text
-breeId = lens _breeId (\s a -> s { _breeId = a })
+-- | The receipt handle is not valid for the current version.
+_InvalidIdFormat :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidIdFormat = _ServiceError . hasCode "InvalidIdFormat"
 
--- | A message explaining why the action failed on this entry.
-breeMessage :: Lens' BatchResultErrorEntry (Maybe Text)
-breeMessage = lens _breeMessage (\s a -> s { _breeMessage = a })
+-- | The receipt handle provided is not valid.
+_ReceiptHandleIsInvalid :: AsError a => Getting (First ServiceError) a ServiceError
+_ReceiptHandleIsInvalid = _ServiceError . hasCode "ReceiptHandleIsInvalid"
 
--- | Whether the error happened due to the sender's fault.
-breeSenderFault :: Lens' BatchResultErrorEntry Bool
-breeSenderFault = lens _breeSenderFault (\s a -> s { _breeSenderFault = a })
+-- | Batch request does not contain an entry.
+_EmptyBatchRequest :: AsError a => Getting (First ServiceError) a ServiceError
+_EmptyBatchRequest =
+    _ServiceError .
+    hasStatus 400 . hasCode "AWS.SimpleQueueService.EmptyBatchRequest"
 
-instance FromXML BatchResultErrorEntry where
-    parseXML x = BatchResultErrorEntry
-        <$> x .@  "Code"
-        <*> x .@  "Id"
-        <*> x .@? "Message"
-        <*> x .@  "SenderFault"
+-- | The message referred to is not in flight.
+_MessageNotInflight :: AsError a => Getting (First ServiceError) a ServiceError
+_MessageNotInflight =
+    _ServiceError .
+    hasStatus 400 . hasCode "AWS.SimpleQueueService.MessageNotInflight"
 
-instance ToQuery BatchResultErrorEntry where
-    toQuery BatchResultErrorEntry{..} = mconcat
-        [ "Code"        =? _breeCode
-        , "Id"          =? _breeId
-        , "Message"     =? _breeMessage
-        , "SenderFault" =? _breeSenderFault
-        ]
+-- | Two or more batch entries have the same 'Id' in the request.
+_BatchEntryIdsNotDistinct :: AsError a => Getting (First ServiceError) a ServiceError
+_BatchEntryIdsNotDistinct =
+    _ServiceError .
+    hasStatus 400 . hasCode "AWS.SimpleQueueService.BatchEntryIdsNotDistinct"
diff --git a/gen/Network/AWS/SQS/Types/Product.hs b/gen/Network/AWS/SQS/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SQS/Types/Product.hs
@@ -0,0 +1,562 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SQS.Types.Product
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.SQS.Types.Product where
+
+import           Network.AWS.Prelude
+import           Network.AWS.SQS.Types.Sum
+
+-- | This is used in the responses of batch API to give a detailed
+-- description of the result of an action on each entry in the request.
+--
+-- /See:/ 'batchResultErrorEntry' smart constructor.
+data BatchResultErrorEntry = BatchResultErrorEntry'
+    { _breeMessage     :: !(Maybe Text)
+    , _breeId          :: !Text
+    , _breeSenderFault :: !Bool
+    , _breeCode        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchResultErrorEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'breeMessage'
+--
+-- * 'breeId'
+--
+-- * 'breeSenderFault'
+--
+-- * 'breeCode'
+batchResultErrorEntry
+    :: Text -- ^ 'breeId'
+    -> Bool -- ^ 'breeSenderFault'
+    -> Text -- ^ 'breeCode'
+    -> BatchResultErrorEntry
+batchResultErrorEntry pId_ pSenderFault_ pCode_ =
+    BatchResultErrorEntry'
+    { _breeMessage = Nothing
+    , _breeId = pId_
+    , _breeSenderFault = pSenderFault_
+    , _breeCode = pCode_
+    }
+
+-- | A message explaining why the action failed on this entry.
+breeMessage :: Lens' BatchResultErrorEntry (Maybe Text)
+breeMessage = lens _breeMessage (\ s a -> s{_breeMessage = a});
+
+-- | The id of an entry in a batch request.
+breeId :: Lens' BatchResultErrorEntry Text
+breeId = lens _breeId (\ s a -> s{_breeId = a});
+
+-- | Whether the error happened due to the sender\'s fault.
+breeSenderFault :: Lens' BatchResultErrorEntry Bool
+breeSenderFault = lens _breeSenderFault (\ s a -> s{_breeSenderFault = a});
+
+-- | An error code representing why the action failed on this entry.
+breeCode :: Lens' BatchResultErrorEntry Text
+breeCode = lens _breeCode (\ s a -> s{_breeCode = a});
+
+instance FromXML BatchResultErrorEntry where
+        parseXML x
+          = BatchResultErrorEntry' <$>
+              (x .@? "Message") <*> (x .@ "Id") <*>
+                (x .@ "SenderFault")
+                <*> (x .@ "Code")
+
+-- | Encloses a receipt handle and an entry id for each message in
+-- ChangeMessageVisibilityBatch.
+--
+-- All of the following parameters are list parameters that must be
+-- prefixed with 'ChangeMessageVisibilityBatchRequestEntry.n', where 'n' is
+-- an integer value starting with 1. For example, a parameter list for this
+-- action might look like this:
+--
+-- '&ChangeMessageVisibilityBatchRequestEntry.1.Id=change_visibility_msg_2'
+--
+-- '&ChangeMessageVisibilityBatchRequestEntry.1.ReceiptHandle=Your_Receipt_Handle'
+--
+-- '&ChangeMessageVisibilityBatchRequestEntry.1.VisibilityTimeout=45'
+--
+-- /See:/ 'changeMessageVisibilityBatchRequestEntry' smart constructor.
+data ChangeMessageVisibilityBatchRequestEntry = ChangeMessageVisibilityBatchRequestEntry'
+    { _cVisibilityTimeout :: !(Maybe Int)
+    , _cId                :: !Text
+    , _cReceiptHandle     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangeMessageVisibilityBatchRequestEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cVisibilityTimeout'
+--
+-- * 'cId'
+--
+-- * 'cReceiptHandle'
+changeMessageVisibilityBatchRequestEntry
+    :: Text -- ^ 'cId'
+    -> Text -- ^ 'cReceiptHandle'
+    -> ChangeMessageVisibilityBatchRequestEntry
+changeMessageVisibilityBatchRequestEntry pId_ pReceiptHandle_ =
+    ChangeMessageVisibilityBatchRequestEntry'
+    { _cVisibilityTimeout = Nothing
+    , _cId = pId_
+    , _cReceiptHandle = pReceiptHandle_
+    }
+
+-- | The new value (in seconds) for the message\'s visibility timeout.
+cVisibilityTimeout :: Lens' ChangeMessageVisibilityBatchRequestEntry (Maybe Int)
+cVisibilityTimeout = lens _cVisibilityTimeout (\ s a -> s{_cVisibilityTimeout = a});
+
+-- | An identifier for this particular receipt handle. This is used to
+-- communicate the result. Note that the 'Id's of a batch request need to
+-- be unique within the request.
+cId :: Lens' ChangeMessageVisibilityBatchRequestEntry Text
+cId = lens _cId (\ s a -> s{_cId = a});
+
+-- | A receipt handle.
+cReceiptHandle :: Lens' ChangeMessageVisibilityBatchRequestEntry Text
+cReceiptHandle = lens _cReceiptHandle (\ s a -> s{_cReceiptHandle = a});
+
+instance ToQuery
+         ChangeMessageVisibilityBatchRequestEntry where
+        toQuery ChangeMessageVisibilityBatchRequestEntry'{..}
+          = mconcat
+              ["VisibilityTimeout" =: _cVisibilityTimeout,
+               "Id" =: _cId, "ReceiptHandle" =: _cReceiptHandle]
+
+-- | Encloses the id of an entry in ChangeMessageVisibilityBatch.
+--
+-- /See:/ 'changeMessageVisibilityBatchResultEntry' smart constructor.
+newtype ChangeMessageVisibilityBatchResultEntry = ChangeMessageVisibilityBatchResultEntry'
+    { _cmvbreId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ChangeMessageVisibilityBatchResultEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmvbreId'
+changeMessageVisibilityBatchResultEntry
+    :: Text -- ^ 'cmvbreId'
+    -> ChangeMessageVisibilityBatchResultEntry
+changeMessageVisibilityBatchResultEntry pId_ =
+    ChangeMessageVisibilityBatchResultEntry'
+    { _cmvbreId = pId_
+    }
+
+-- | Represents a message whose visibility timeout has been changed
+-- successfully.
+cmvbreId :: Lens' ChangeMessageVisibilityBatchResultEntry Text
+cmvbreId = lens _cmvbreId (\ s a -> s{_cmvbreId = a});
+
+instance FromXML
+         ChangeMessageVisibilityBatchResultEntry where
+        parseXML x
+          = ChangeMessageVisibilityBatchResultEntry' <$>
+              (x .@ "Id")
+
+-- | Encloses a receipt handle and an identifier for it.
+--
+-- /See:/ 'deleteMessageBatchRequestEntry' smart constructor.
+data DeleteMessageBatchRequestEntry = DeleteMessageBatchRequestEntry'
+    { _dmbreId            :: !Text
+    , _dmbreReceiptHandle :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteMessageBatchRequestEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmbreId'
+--
+-- * 'dmbreReceiptHandle'
+deleteMessageBatchRequestEntry
+    :: Text -- ^ 'dmbreId'
+    -> Text -- ^ 'dmbreReceiptHandle'
+    -> DeleteMessageBatchRequestEntry
+deleteMessageBatchRequestEntry pId_ pReceiptHandle_ =
+    DeleteMessageBatchRequestEntry'
+    { _dmbreId = pId_
+    , _dmbreReceiptHandle = pReceiptHandle_
+    }
+
+-- | An identifier for this particular receipt handle. This is used to
+-- communicate the result. Note that the 'Id's of a batch request need to
+-- be unique within the request.
+dmbreId :: Lens' DeleteMessageBatchRequestEntry Text
+dmbreId = lens _dmbreId (\ s a -> s{_dmbreId = a});
+
+-- | A receipt handle.
+dmbreReceiptHandle :: Lens' DeleteMessageBatchRequestEntry Text
+dmbreReceiptHandle = lens _dmbreReceiptHandle (\ s a -> s{_dmbreReceiptHandle = a});
+
+instance ToQuery DeleteMessageBatchRequestEntry where
+        toQuery DeleteMessageBatchRequestEntry'{..}
+          = mconcat
+              ["Id" =: _dmbreId,
+               "ReceiptHandle" =: _dmbreReceiptHandle]
+
+-- | Encloses the id an entry in DeleteMessageBatch.
+--
+-- /See:/ 'deleteMessageBatchResultEntry' smart constructor.
+newtype DeleteMessageBatchResultEntry = DeleteMessageBatchResultEntry'
+    { _dId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteMessageBatchResultEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dId'
+deleteMessageBatchResultEntry
+    :: Text -- ^ 'dId'
+    -> DeleteMessageBatchResultEntry
+deleteMessageBatchResultEntry pId_ =
+    DeleteMessageBatchResultEntry'
+    { _dId = pId_
+    }
+
+-- | Represents a successfully deleted message.
+dId :: Lens' DeleteMessageBatchResultEntry Text
+dId = lens _dId (\ s a -> s{_dId = a});
+
+instance FromXML DeleteMessageBatchResultEntry where
+        parseXML x
+          = DeleteMessageBatchResultEntry' <$> (x .@ "Id")
+
+-- | An Amazon SQS message.
+--
+-- /See:/ 'message' smart constructor.
+data Message = Message'
+    { _mMessageAttributes      :: !(Maybe (Map Text MessageAttributeValue))
+    , _mMD5OfBody              :: !(Maybe Text)
+    , _mBody                   :: !(Maybe Text)
+    , _mAttributes             :: !(Maybe (Map QueueAttributeName Text))
+    , _mMessageId              :: !(Maybe Text)
+    , _mReceiptHandle          :: !(Maybe Text)
+    , _mMD5OfMessageAttributes :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Message' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mMessageAttributes'
+--
+-- * 'mMD5OfBody'
+--
+-- * 'mBody'
+--
+-- * 'mAttributes'
+--
+-- * 'mMessageId'
+--
+-- * 'mReceiptHandle'
+--
+-- * 'mMD5OfMessageAttributes'
+message
+    :: Message
+message =
+    Message'
+    { _mMessageAttributes = Nothing
+    , _mMD5OfBody = Nothing
+    , _mBody = Nothing
+    , _mAttributes = Nothing
+    , _mMessageId = Nothing
+    , _mReceiptHandle = Nothing
+    , _mMD5OfMessageAttributes = Nothing
+    }
+
+-- | Each message attribute consists of a Name, Type, and Value. For more
+-- information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html#SQSMessageAttributesNTV Message Attribute Items>.
+mMessageAttributes :: Lens' Message (HashMap Text MessageAttributeValue)
+mMessageAttributes = lens _mMessageAttributes (\ s a -> s{_mMessageAttributes = a}) . _Default . _Map;
+
+-- | An MD5 digest of the non-URL-encoded message body string.
+mMD5OfBody :: Lens' Message (Maybe Text)
+mMD5OfBody = lens _mMD5OfBody (\ s a -> s{_mMD5OfBody = a});
+
+-- | The message\'s contents (not URL-encoded).
+mBody :: Lens' Message (Maybe Text)
+mBody = lens _mBody (\ s a -> s{_mBody = a});
+
+-- | 'SenderId', 'SentTimestamp', 'ApproximateReceiveCount', and\/or
+-- 'ApproximateFirstReceiveTimestamp'. 'SentTimestamp' and
+-- 'ApproximateFirstReceiveTimestamp' are each returned as an integer
+-- representing the <http://en.wikipedia.org/wiki/Unix_time epoch time> in
+-- milliseconds.
+mAttributes :: Lens' Message (HashMap QueueAttributeName Text)
+mAttributes = lens _mAttributes (\ s a -> s{_mAttributes = a}) . _Default . _Map;
+
+-- | A unique identifier for the message. Message IDs are considered unique
+-- across all AWS accounts for an extended period of time.
+mMessageId :: Lens' Message (Maybe Text)
+mMessageId = lens _mMessageId (\ s a -> s{_mMessageId = a});
+
+-- | An identifier associated with the act of receiving the message. A new
+-- receipt handle is returned every time you receive a message. When
+-- deleting a message, you provide the last received receipt handle to
+-- delete the message.
+mReceiptHandle :: Lens' Message (Maybe Text)
+mReceiptHandle = lens _mReceiptHandle (\ s a -> s{_mReceiptHandle = a});
+
+-- | An MD5 digest of the non-URL-encoded message attribute string. This can
+-- be used to verify that Amazon SQS received the message correctly. Amazon
+-- SQS first URL decodes the message before creating the MD5 digest. For
+-- information about MD5, go to <http://www.faqs.org/rfcs/rfc1321.html>.
+mMD5OfMessageAttributes :: Lens' Message (Maybe Text)
+mMD5OfMessageAttributes = lens _mMD5OfMessageAttributes (\ s a -> s{_mMD5OfMessageAttributes = a});
+
+instance FromXML Message where
+        parseXML x
+          = Message' <$>
+              (may (parseXMLMap "MessageAttribute" "Name" "Value")
+                 x)
+                <*> (x .@? "MD5OfBody")
+                <*> (x .@? "Body")
+                <*> (may (parseXMLMap "Attribute" "Name" "Value") x)
+                <*> (x .@? "MessageId")
+                <*> (x .@? "ReceiptHandle")
+                <*> (x .@? "MD5OfMessageAttributes")
+
+-- | The user-specified message attribute value. For string data types, the
+-- value attribute has the same restrictions on the content as the message
+-- body. For more information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html SendMessage>.
+--
+-- Name, type, and value must not be empty or null. In addition, the
+-- message body should not be empty or null. All parts of the message
+-- attribute, including name, type, and value, are included in the message
+-- size restriction, which is currently 256 KB (262,144 bytes).
+--
+-- /See:/ 'messageAttributeValue' smart constructor.
+data MessageAttributeValue = MessageAttributeValue'
+    { _mavBinaryValue      :: !(Maybe Base64)
+    , _mavStringListValues :: !(Maybe [Text])
+    , _mavStringValue      :: !(Maybe Text)
+    , _mavBinaryListValues :: !(Maybe [Base64])
+    , _mavDataType         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MessageAttributeValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mavBinaryValue'
+--
+-- * 'mavStringListValues'
+--
+-- * 'mavStringValue'
+--
+-- * 'mavBinaryListValues'
+--
+-- * 'mavDataType'
+messageAttributeValue
+    :: Text -- ^ 'mavDataType'
+    -> MessageAttributeValue
+messageAttributeValue pDataType_ =
+    MessageAttributeValue'
+    { _mavBinaryValue = Nothing
+    , _mavStringListValues = Nothing
+    , _mavStringValue = Nothing
+    , _mavBinaryListValues = Nothing
+    , _mavDataType = pDataType_
+    }
+
+-- | Binary type attributes can store any binary data, for example,
+-- compressed data, encrypted data, or images.
+mavBinaryValue :: Lens' MessageAttributeValue (Maybe ByteString)
+mavBinaryValue = lens _mavBinaryValue (\ s a -> s{_mavBinaryValue = a}) . mapping _Base64;
+
+-- | Not implemented. Reserved for future use.
+mavStringListValues :: Lens' MessageAttributeValue [Text]
+mavStringListValues = lens _mavStringListValues (\ s a -> s{_mavStringListValues = a}) . _Default . _Coerce;
+
+-- | Strings are Unicode with UTF8 binary encoding. For a list of code
+-- values, see
+-- <http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters>.
+mavStringValue :: Lens' MessageAttributeValue (Maybe Text)
+mavStringValue = lens _mavStringValue (\ s a -> s{_mavStringValue = a});
+
+-- | Not implemented. Reserved for future use.
+mavBinaryListValues :: Lens' MessageAttributeValue [ByteString]
+mavBinaryListValues = lens _mavBinaryListValues (\ s a -> s{_mavBinaryListValues = a}) . _Default . _Coerce;
+
+-- | Amazon SQS supports the following logical data types: String, Number,
+-- and Binary. In addition, you can append your own custom labels. For more
+-- information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html#SQSMessageAttributes.DataTypes Message Attribute Data Types>.
+mavDataType :: Lens' MessageAttributeValue Text
+mavDataType = lens _mavDataType (\ s a -> s{_mavDataType = a});
+
+instance FromXML MessageAttributeValue where
+        parseXML x
+          = MessageAttributeValue' <$>
+              (x .@? "BinaryValue") <*>
+                (x .@? "StringListValue" .!@ mempty >>=
+                   may (parseXMLList "StringListValue"))
+                <*> (x .@? "StringValue")
+                <*>
+                (x .@? "BinaryListValue" .!@ mempty >>=
+                   may (parseXMLList "BinaryListValue"))
+                <*> (x .@ "DataType")
+
+instance ToQuery MessageAttributeValue where
+        toQuery MessageAttributeValue'{..}
+          = mconcat
+              ["BinaryValue" =: _mavBinaryValue,
+               "StringListValue" =:
+                 toQuery
+                   (toQueryList "StringListValue" <$>
+                      _mavStringListValues),
+               "StringValue" =: _mavStringValue,
+               "BinaryListValue" =:
+                 toQuery
+                   (toQueryList "BinaryListValue" <$>
+                      _mavBinaryListValues),
+               "DataType" =: _mavDataType]
+
+-- | Contains the details of a single Amazon SQS message along with a 'Id'.
+--
+-- /See:/ 'sendMessageBatchRequestEntry' smart constructor.
+data SendMessageBatchRequestEntry = SendMessageBatchRequestEntry'
+    { _sMessageAttributes :: !(Maybe (Map Text MessageAttributeValue))
+    , _sDelaySeconds      :: !(Maybe Int)
+    , _sId                :: !Text
+    , _sMessageBody       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendMessageBatchRequestEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sMessageAttributes'
+--
+-- * 'sDelaySeconds'
+--
+-- * 'sId'
+--
+-- * 'sMessageBody'
+sendMessageBatchRequestEntry
+    :: Text -- ^ 'sId'
+    -> Text -- ^ 'sMessageBody'
+    -> SendMessageBatchRequestEntry
+sendMessageBatchRequestEntry pId_ pMessageBody_ =
+    SendMessageBatchRequestEntry'
+    { _sMessageAttributes = Nothing
+    , _sDelaySeconds = Nothing
+    , _sId = pId_
+    , _sMessageBody = pMessageBody_
+    }
+
+-- | Each message attribute consists of a Name, Type, and Value. For more
+-- information, see
+-- <http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/SQSMessageAttributes.html#SQSMessageAttributesNTV Message Attribute Items>.
+sMessageAttributes :: Lens' SendMessageBatchRequestEntry (HashMap Text MessageAttributeValue)
+sMessageAttributes = lens _sMessageAttributes (\ s a -> s{_sMessageAttributes = a}) . _Default . _Map;
+
+-- | The number of seconds for which the message has to be delayed.
+sDelaySeconds :: Lens' SendMessageBatchRequestEntry (Maybe Int)
+sDelaySeconds = lens _sDelaySeconds (\ s a -> s{_sDelaySeconds = a});
+
+-- | An identifier for the message in this batch. This is used to communicate
+-- the result. Note that the 'Id's of a batch request need to be unique
+-- within the request.
+sId :: Lens' SendMessageBatchRequestEntry Text
+sId = lens _sId (\ s a -> s{_sId = a});
+
+-- | Body of the message.
+sMessageBody :: Lens' SendMessageBatchRequestEntry Text
+sMessageBody = lens _sMessageBody (\ s a -> s{_sMessageBody = a});
+
+instance ToQuery SendMessageBatchRequestEntry where
+        toQuery SendMessageBatchRequestEntry'{..}
+          = mconcat
+              [toQuery
+                 (toQueryMap "MessageAttribute" "Name" "Value" <$>
+                    _sMessageAttributes),
+               "DelaySeconds" =: _sDelaySeconds, "Id" =: _sId,
+               "MessageBody" =: _sMessageBody]
+
+-- | Encloses a message ID for successfully enqueued message of a
+-- SendMessageBatch.
+--
+-- /See:/ 'sendMessageBatchResultEntry' smart constructor.
+data SendMessageBatchResultEntry = SendMessageBatchResultEntry'
+    { _smbreMD5OfMessageAttributes :: !(Maybe Text)
+    , _smbreId                     :: !Text
+    , _smbreMessageId              :: !Text
+    , _smbreMD5OfMessageBody       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SendMessageBatchResultEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'smbreMD5OfMessageAttributes'
+--
+-- * 'smbreId'
+--
+-- * 'smbreMessageId'
+--
+-- * 'smbreMD5OfMessageBody'
+sendMessageBatchResultEntry
+    :: Text -- ^ 'smbreId'
+    -> Text -- ^ 'smbreMessageId'
+    -> Text -- ^ 'smbreMD5OfMessageBody'
+    -> SendMessageBatchResultEntry
+sendMessageBatchResultEntry pId_ pMessageId_ pMD5OfMessageBody_ =
+    SendMessageBatchResultEntry'
+    { _smbreMD5OfMessageAttributes = Nothing
+    , _smbreId = pId_
+    , _smbreMessageId = pMessageId_
+    , _smbreMD5OfMessageBody = pMD5OfMessageBody_
+    }
+
+-- | An MD5 digest of the non-URL-encoded message attribute string. This can
+-- be used to verify that Amazon SQS received the message batch correctly.
+-- Amazon SQS first URL decodes the message before creating the MD5 digest.
+-- For information about MD5, go to
+-- <http://www.faqs.org/rfcs/rfc1321.html>.
+smbreMD5OfMessageAttributes :: Lens' SendMessageBatchResultEntry (Maybe Text)
+smbreMD5OfMessageAttributes = lens _smbreMD5OfMessageAttributes (\ s a -> s{_smbreMD5OfMessageAttributes = a});
+
+-- | An identifier for the message in this batch.
+smbreId :: Lens' SendMessageBatchResultEntry Text
+smbreId = lens _smbreId (\ s a -> s{_smbreId = a});
+
+-- | An identifier for the message.
+smbreMessageId :: Lens' SendMessageBatchResultEntry Text
+smbreMessageId = lens _smbreMessageId (\ s a -> s{_smbreMessageId = a});
+
+-- | An MD5 digest of the non-URL-encoded message body string. This can be
+-- used to verify that Amazon SQS received the message correctly. Amazon
+-- SQS first URL decodes the message before creating the MD5 digest. For
+-- information about MD5, go to <http://www.faqs.org/rfcs/rfc1321.html>.
+smbreMD5OfMessageBody :: Lens' SendMessageBatchResultEntry Text
+smbreMD5OfMessageBody = lens _smbreMD5OfMessageBody (\ s a -> s{_smbreMD5OfMessageBody = a});
+
+instance FromXML SendMessageBatchResultEntry where
+        parseXML x
+          = SendMessageBatchResultEntry' <$>
+              (x .@? "MD5OfMessageAttributes") <*> (x .@ "Id") <*>
+                (x .@ "MessageId")
+                <*> (x .@ "MD5OfMessageBody")
diff --git a/gen/Network/AWS/SQS/Types/Sum.hs b/gen/Network/AWS/SQS/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SQS/Types/Sum.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SQS.Types.Sum
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.SQS.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data QueueAttributeName
+    = ApproximateNumberOfMessages
+    | ApproximateNumberOfMessagesDelayed
+    | ApproximateNumberOfMessagesNotVisible
+    | CreatedTimestamp
+    | DelaySeconds
+    | LastModifiedTimestamp
+    | MaximumMessageSize
+    | MessageRetentionPeriod
+    | Policy
+    | QueueARN
+    | ReceiveMessageWaitTimeSeconds
+    | RedrivePolicy
+    | VisibilityTimeout
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText QueueAttributeName where
+    parser = takeLowerText >>= \case
+        "approximatenumberofmessages" -> pure ApproximateNumberOfMessages
+        "approximatenumberofmessagesdelayed" -> pure ApproximateNumberOfMessagesDelayed
+        "approximatenumberofmessagesnotvisible" -> pure ApproximateNumberOfMessagesNotVisible
+        "createdtimestamp" -> pure CreatedTimestamp
+        "delayseconds" -> pure DelaySeconds
+        "lastmodifiedtimestamp" -> pure LastModifiedTimestamp
+        "maximummessagesize" -> pure MaximumMessageSize
+        "messageretentionperiod" -> pure MessageRetentionPeriod
+        "policy" -> pure Policy
+        "queuearn" -> pure QueueARN
+        "receivemessagewaittimeseconds" -> pure ReceiveMessageWaitTimeSeconds
+        "redrivepolicy" -> pure RedrivePolicy
+        "visibilitytimeout" -> pure VisibilityTimeout
+        e -> fromTextError $ "Failure parsing QueueAttributeName from value: '" <> e
+           <> "'. Accepted values: approximatenumberofmessages, approximatenumberofmessagesdelayed, approximatenumberofmessagesnotvisible, createdtimestamp, delayseconds, lastmodifiedtimestamp, maximummessagesize, messageretentionperiod, policy, queuearn, receivemessagewaittimeseconds, redrivepolicy, visibilitytimeout"
+
+instance ToText QueueAttributeName where
+    toText = \case
+        ApproximateNumberOfMessages -> "approximatenumberofmessages"
+        ApproximateNumberOfMessagesDelayed -> "approximatenumberofmessagesdelayed"
+        ApproximateNumberOfMessagesNotVisible -> "approximatenumberofmessagesnotvisible"
+        CreatedTimestamp -> "createdtimestamp"
+        DelaySeconds -> "delayseconds"
+        LastModifiedTimestamp -> "lastmodifiedtimestamp"
+        MaximumMessageSize -> "maximummessagesize"
+        MessageRetentionPeriod -> "messageretentionperiod"
+        Policy -> "policy"
+        QueueARN -> "queuearn"
+        ReceiveMessageWaitTimeSeconds -> "receivemessagewaittimeseconds"
+        RedrivePolicy -> "redrivepolicy"
+        VisibilityTimeout -> "visibilitytimeout"
+
+instance Hashable     QueueAttributeName
+instance ToByteString QueueAttributeName
+instance ToQuery      QueueAttributeName
+instance ToHeader     QueueAttributeName
+
+instance FromXML QueueAttributeName where
+    parseXML = parseXMLText "QueueAttributeName"
diff --git a/gen/Network/AWS/SQS/Waiters.hs b/gen/Network/AWS/SQS/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/SQS/Waiters.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.SQS.Waiters
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.SQS.Waiters where
+
+import           Network.AWS.Prelude
+import           Network.AWS.SQS.Types
+import           Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.SQS
+import Test.AWS.SQS.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "SQS"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/SQS.hs b/test/Test/AWS/Gen/SQS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/SQS.hs
@@ -0,0 +1,328 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.SQS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.SQS where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.SQS
+import Test.AWS.SQS.Internal
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testGetQueueURL $
+--             getQueueURL
+--
+--         , testPurgeQueue $
+--             purgeQueue
+--
+--         , testSendMessage $
+--             sendMessage
+--
+--         , testChangeMessageVisibilityBatch $
+--             changeMessageVisibilityBatch
+--
+--         , testRemovePermission $
+--             removePermission
+--
+--         , testGetQueueAttributes $
+--             getQueueAttributes
+--
+--         , testListQueues $
+--             listQueues
+--
+--         , testReceiveMessage $
+--             receiveMessage
+--
+--         , testDeleteQueue $
+--             deleteQueue
+--
+--         , testDeleteMessageBatch $
+--             deleteMessageBatch
+--
+--         , testSetQueueAttributes $
+--             setQueueAttributes
+--
+--         , testListDeadLetterSourceQueues $
+--             listDeadLetterSourceQueues
+--
+--         , testAddPermission $
+--             addPermission
+--
+--         , testDeleteMessage $
+--             deleteMessage
+--
+--         , testCreateQueue $
+--             createQueue
+--
+--         , testChangeMessageVisibility $
+--             changeMessageVisibility
+--
+--         , testSendMessageBatch $
+--             sendMessageBatch
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testGetQueueURLResponse $
+--             getQueueURLResponse
+--
+--         , testPurgeQueueResponse $
+--             purgeQueueResponse
+--
+--         , testSendMessageResponse $
+--             sendMessageResponse
+--
+--         , testChangeMessageVisibilityBatchResponse $
+--             changeMessageVisibilityBatchResponse
+--
+--         , testRemovePermissionResponse $
+--             removePermissionResponse
+--
+--         , testGetQueueAttributesResponse $
+--             getQueueAttributesResponse
+--
+--         , testListQueuesResponse $
+--             listQueuesResponse
+--
+--         , testReceiveMessageResponse $
+--             receiveMessageResponse
+--
+--         , testDeleteQueueResponse $
+--             deleteQueueResponse
+--
+--         , testDeleteMessageBatchResponse $
+--             deleteMessageBatchResponse
+--
+--         , testSetQueueAttributesResponse $
+--             setQueueAttributesResponse
+--
+--         , testListDeadLetterSourceQueuesResponse $
+--             listDeadLetterSourceQueuesResponse
+--
+--         , testAddPermissionResponse $
+--             addPermissionResponse
+--
+--         , testDeleteMessageResponse $
+--             deleteMessageResponse
+--
+--         , testCreateQueueResponse $
+--             createQueueResponse
+--
+--         , testChangeMessageVisibilityResponse $
+--             changeMessageVisibilityResponse
+--
+--         , testSendMessageBatchResponse $
+--             sendMessageBatchResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testGetQueueURL :: GetQueueURL -> TestTree
+testGetQueueURL = req
+    "GetQueueURL"
+    "fixture/GetQueueURL"
+
+testPurgeQueue :: PurgeQueue -> TestTree
+testPurgeQueue = req
+    "PurgeQueue"
+    "fixture/PurgeQueue"
+
+testSendMessage :: SendMessage -> TestTree
+testSendMessage = req
+    "SendMessage"
+    "fixture/SendMessage"
+
+testChangeMessageVisibilityBatch :: ChangeMessageVisibilityBatch -> TestTree
+testChangeMessageVisibilityBatch = req
+    "ChangeMessageVisibilityBatch"
+    "fixture/ChangeMessageVisibilityBatch"
+
+testRemovePermission :: RemovePermission -> TestTree
+testRemovePermission = req
+    "RemovePermission"
+    "fixture/RemovePermission"
+
+testGetQueueAttributes :: GetQueueAttributes -> TestTree
+testGetQueueAttributes = req
+    "GetQueueAttributes"
+    "fixture/GetQueueAttributes"
+
+testListQueues :: ListQueues -> TestTree
+testListQueues = req
+    "ListQueues"
+    "fixture/ListQueues"
+
+testReceiveMessage :: ReceiveMessage -> TestTree
+testReceiveMessage = req
+    "ReceiveMessage"
+    "fixture/ReceiveMessage"
+
+testDeleteQueue :: DeleteQueue -> TestTree
+testDeleteQueue = req
+    "DeleteQueue"
+    "fixture/DeleteQueue"
+
+testDeleteMessageBatch :: DeleteMessageBatch -> TestTree
+testDeleteMessageBatch = req
+    "DeleteMessageBatch"
+    "fixture/DeleteMessageBatch"
+
+testSetQueueAttributes :: SetQueueAttributes -> TestTree
+testSetQueueAttributes = req
+    "SetQueueAttributes"
+    "fixture/SetQueueAttributes"
+
+testListDeadLetterSourceQueues :: ListDeadLetterSourceQueues -> TestTree
+testListDeadLetterSourceQueues = req
+    "ListDeadLetterSourceQueues"
+    "fixture/ListDeadLetterSourceQueues"
+
+testAddPermission :: AddPermission -> TestTree
+testAddPermission = req
+    "AddPermission"
+    "fixture/AddPermission"
+
+testDeleteMessage :: DeleteMessage -> TestTree
+testDeleteMessage = req
+    "DeleteMessage"
+    "fixture/DeleteMessage"
+
+testCreateQueue :: CreateQueue -> TestTree
+testCreateQueue = req
+    "CreateQueue"
+    "fixture/CreateQueue"
+
+testChangeMessageVisibility :: ChangeMessageVisibility -> TestTree
+testChangeMessageVisibility = req
+    "ChangeMessageVisibility"
+    "fixture/ChangeMessageVisibility"
+
+testSendMessageBatch :: SendMessageBatch -> TestTree
+testSendMessageBatch = req
+    "SendMessageBatch"
+    "fixture/SendMessageBatch"
+
+-- Responses
+
+testGetQueueURLResponse :: GetQueueURLResponse -> TestTree
+testGetQueueURLResponse = res
+    "GetQueueURLResponse"
+    "fixture/GetQueueURLResponse"
+    (Proxy :: Proxy GetQueueURL)
+
+testPurgeQueueResponse :: PurgeQueueResponse -> TestTree
+testPurgeQueueResponse = res
+    "PurgeQueueResponse"
+    "fixture/PurgeQueueResponse"
+    (Proxy :: Proxy PurgeQueue)
+
+testSendMessageResponse :: SendMessageResponse -> TestTree
+testSendMessageResponse = res
+    "SendMessageResponse"
+    "fixture/SendMessageResponse"
+    (Proxy :: Proxy SendMessage)
+
+testChangeMessageVisibilityBatchResponse :: ChangeMessageVisibilityBatchResponse -> TestTree
+testChangeMessageVisibilityBatchResponse = res
+    "ChangeMessageVisibilityBatchResponse"
+    "fixture/ChangeMessageVisibilityBatchResponse"
+    (Proxy :: Proxy ChangeMessageVisibilityBatch)
+
+testRemovePermissionResponse :: RemovePermissionResponse -> TestTree
+testRemovePermissionResponse = res
+    "RemovePermissionResponse"
+    "fixture/RemovePermissionResponse"
+    (Proxy :: Proxy RemovePermission)
+
+testGetQueueAttributesResponse :: GetQueueAttributesResponse -> TestTree
+testGetQueueAttributesResponse = res
+    "GetQueueAttributesResponse"
+    "fixture/GetQueueAttributesResponse"
+    (Proxy :: Proxy GetQueueAttributes)
+
+testListQueuesResponse :: ListQueuesResponse -> TestTree
+testListQueuesResponse = res
+    "ListQueuesResponse"
+    "fixture/ListQueuesResponse"
+    (Proxy :: Proxy ListQueues)
+
+testReceiveMessageResponse :: ReceiveMessageResponse -> TestTree
+testReceiveMessageResponse = res
+    "ReceiveMessageResponse"
+    "fixture/ReceiveMessageResponse"
+    (Proxy :: Proxy ReceiveMessage)
+
+testDeleteQueueResponse :: DeleteQueueResponse -> TestTree
+testDeleteQueueResponse = res
+    "DeleteQueueResponse"
+    "fixture/DeleteQueueResponse"
+    (Proxy :: Proxy DeleteQueue)
+
+testDeleteMessageBatchResponse :: DeleteMessageBatchResponse -> TestTree
+testDeleteMessageBatchResponse = res
+    "DeleteMessageBatchResponse"
+    "fixture/DeleteMessageBatchResponse"
+    (Proxy :: Proxy DeleteMessageBatch)
+
+testSetQueueAttributesResponse :: SetQueueAttributesResponse -> TestTree
+testSetQueueAttributesResponse = res
+    "SetQueueAttributesResponse"
+    "fixture/SetQueueAttributesResponse"
+    (Proxy :: Proxy SetQueueAttributes)
+
+testListDeadLetterSourceQueuesResponse :: ListDeadLetterSourceQueuesResponse -> TestTree
+testListDeadLetterSourceQueuesResponse = res
+    "ListDeadLetterSourceQueuesResponse"
+    "fixture/ListDeadLetterSourceQueuesResponse"
+    (Proxy :: Proxy ListDeadLetterSourceQueues)
+
+testAddPermissionResponse :: AddPermissionResponse -> TestTree
+testAddPermissionResponse = res
+    "AddPermissionResponse"
+    "fixture/AddPermissionResponse"
+    (Proxy :: Proxy AddPermission)
+
+testDeleteMessageResponse :: DeleteMessageResponse -> TestTree
+testDeleteMessageResponse = res
+    "DeleteMessageResponse"
+    "fixture/DeleteMessageResponse"
+    (Proxy :: Proxy DeleteMessage)
+
+testCreateQueueResponse :: CreateQueueResponse -> TestTree
+testCreateQueueResponse = res
+    "CreateQueueResponse"
+    "fixture/CreateQueueResponse"
+    (Proxy :: Proxy CreateQueue)
+
+testChangeMessageVisibilityResponse :: ChangeMessageVisibilityResponse -> TestTree
+testChangeMessageVisibilityResponse = res
+    "ChangeMessageVisibilityResponse"
+    "fixture/ChangeMessageVisibilityResponse"
+    (Proxy :: Proxy ChangeMessageVisibility)
+
+testSendMessageBatchResponse :: SendMessageBatchResponse -> TestTree
+testSendMessageBatchResponse = res
+    "SendMessageBatchResponse"
+    "fixture/SendMessageBatchResponse"
+    (Proxy :: Proxy SendMessageBatch)
diff --git a/test/Test/AWS/SQS.hs b/test/Test/AWS/SQS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/SQS.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- |
+-- Module      : Test.AWS.SQS
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.SQS
+    ( tests
+    , fixtures
+    ) where
+
+import           Control.Lens
+import qualified Data.HashMap.Strict as Map
+import           Network.AWS.SQS
+import           Test.AWS.Gen.SQS
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures =
+    [ testGroup "request" $
+        [ testSendMessage $
+            sendMessage "http://sqs.us-east-1.amazonaws.com/123456789012/testQueue/"
+                        "This+is+a+test+message"
+                & smMessageAttributes .~ Map.fromList
+                    [ ("test_attribute_name_1", messageAttributeValue "String"
+                        & mavStringValue ?~ "test_attribute_value_1")
+                    , ("test_attribute_name_2", messageAttributeValue "String"
+                        & mavStringValue ?~ "test_attribute_value_2")
+                    ]
+        ]
+
+    , testGroup "response"
+        [ testGetQueueURLResponse $
+            getQueueURLResponse 200 "http://us-east-1.amazonaws.com/123456789012/testQueue"
+
+        , testPurgeQueueResponse $
+            purgeQueueResponse
+
+        , testSendMessageResponse $
+            sendMessageResponse 200
+                & smrsMessageId              ?~ "5fea7756-0ea4-451a-a703-a558b933e274"
+                & smrsMD5OfMessageBody       ?~ "fafb00f5732ab283681e124bf8747ed1"
+                & smrsMD5OfMessageAttributes ?~ "3ae8f24a165a8cedc005670c81a27295"
+
+        -- FIXME: waiting on response to https://github.com/boto/botocore/issues/602
+        -- , testReceiveMessageResponse $
+        --     receiveMessageResponse 200 & rmrMessages .~ message
+        --         & mesMessageId     ?~ "5fea7756-0ea4-451a-a703-a558b933e274"
+        --         & mesReceiptHandle ?~ "MbZj6wDWli+JvwwJaBV+3dcjk2YW2vA3+STFFljTM8tJJg6HRG6PYSasuWXPJB+CwLj1FjgXUv1uSj1gUPAWV66FU/WeR4mq2OKpEGYWbnLmpRCJVAyeMjeU5ZBdtcQ+QEauMZc8ZRv37sIW2iJKq3M9MFx1YvV11A2x/KSbkJ0="
+        --         & mesMD5OfBody     ?~ "fafb00f5732ab283681e124bf8747ed1"
+        --         & mesBody          ?~ "This is a test message"
+        --         & mesAttributes    .~ Map.fromList
+        --             [ (SenderId,                         195004372649)
+        --             , (SentTimestamp,                    1238099229000)
+        --             , (ApproximateReceiveCount,          5)
+        --             , (ApproximateFirstReceiveTimestamp, 1250700979248)
+        --             ]
+        ]
+    ]
diff --git a/test/Test/AWS/SQS/Internal.hs b/test/Test/AWS/SQS/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/SQS/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.SQS.Internal
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Test.AWS.SQS.Internal where
+
+import Test.AWS.Prelude
