diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,28 +1,52 @@
 # Amazon CloudFormation 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
 
-AWS CloudFormation gives developers and systems administrators an easy way to
-create and manage a collection of related AWS resources, provisioning and
-updating them in an orderly and predictable fashion. You can use AWS
-CloudFormation’s sample templates or create your own templates to describe
-the AWS resources, and any associated dependencies or runtime parameters,
-required to run your application. You don’t need to figure out the order for
-provisioning AWS services or the subtleties of making those dependencies
-work. CloudFormation takes care of this for you. After the AWS resources are
-deployed, you can modify and update them in a controlled and predictable way,
-in effect applying version control to your AWS infrastructure the same way
-you do with your software.
+AWS CloudFormation
 
+AWS CloudFormation enables you to create and manage AWS infrastructure
+deployments predictably and repeatedly. AWS CloudFormation helps you
+leverage AWS products such as Amazon EC2, EBS, Amazon SNS, ELB, and Auto
+Scaling to build highly-reliable, highly scalable, cost effective
+applications without worrying about creating and configuring the
+underlying AWS infrastructure.
+
+With AWS CloudFormation, you declare all of your resources and
+dependencies in a template file. The template defines a collection of
+resources as a single unit called a stack. AWS CloudFormation creates
+and deletes all member resources of the stack together and manages all
+dependencies between the resources for you.
+
+For more information about this product, go to the
+<http://aws.amazon.com/cloudformation/ CloudFormation Product Page>.
+
+Amazon CloudFormation makes use of other AWS products. If you need
+additional technical information about a specific AWS product, you can
+find the product\'s technical documentation at
+<http://aws.amazon.com/documentation/>.
+
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-cloudformation)
 and the [AWS API Reference](http://docs.aws.amazon.com/AWSCloudFormation/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-cloudformation.cabal b/amazonka-cloudformation.cabal
--- a/amazonka-cloudformation.cabal
+++ b/amazonka-cloudformation.cabal
@@ -1,35 +1,54 @@
 name:                  amazonka-cloudformation
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon CloudFormation 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:
-    AWS CloudFormation gives developers and systems administrators an easy way to
-    create and manage a collection of related AWS resources, provisioning and
-    updating them in an orderly and predictable fashion. You can use AWS
-    CloudFormation’s sample templates or create your own templates to describe
-    the AWS resources, and any associated dependencies or runtime parameters,
-    required to run your application. You don’t need to figure out the order for
-    provisioning AWS services or the subtleties of making those dependencies
-    work. CloudFormation takes care of this for you. After the AWS resources are
-    deployed, you can modify and update them in a controlled and predictable way,
-    in effect applying version control to your AWS infrastructure the same way
-    you do with your software.
+    AWS CloudFormation
 
+    AWS CloudFormation enables you to create and manage AWS infrastructure
+    deployments predictably and repeatedly. AWS CloudFormation helps you
+    leverage AWS products such as Amazon EC2, EBS, Amazon SNS, ELB, and Auto
+    Scaling to build highly-reliable, highly scalable, cost effective
+    applications without worrying about creating and configuring the
+    underlying AWS infrastructure.
+
+    With AWS CloudFormation, you declare all of your resources and
+    dependencies in a template file. The template defines a collection of
+    resources as a single unit called a stack. AWS CloudFormation creates
+    and deletes all member resources of the stack together and manages all
+    dependencies between the resources for you.
+
+    For more information about this product, go to the
+    <http://aws.amazon.com/cloudformation/ CloudFormation Product Page>.
+
+    Amazon CloudFormation makes use of other AWS products. If you need
+    additional technical information about a specific AWS product, you can
+    find the product\'s technical documentation at
+    <http://aws.amazon.com/documentation/>.
     .
-    /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/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.CloudFormation" and the <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -61,9 +80,40 @@
         , Network.AWS.CloudFormation.Types
         , Network.AWS.CloudFormation.UpdateStack
         , Network.AWS.CloudFormation.ValidateTemplate
+        , Network.AWS.CloudFormation.Waiters
 
     other-modules:
+          Network.AWS.CloudFormation.Types.Product
+        , Network.AWS.CloudFormation.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-cloudformation-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.CloudFormation
+        , Test.AWS.Gen.CloudFormation
+        , Test.AWS.CloudFormation.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-cloudformation == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/CloudFormation.hs b/gen/Network/AWS/CloudFormation.hs
--- a/gen/Network/AWS/CloudFormation.hs
+++ b/gen/Network/AWS/CloudFormation.hs
@@ -1,62 +1,302 @@
+{-# 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.CloudFormation
--- 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.
-
--- | AWS CloudFormation gives developers and systems administrators an easy way to
--- create and manage a collection of related AWS resources, provisioning and
--- updating them in an orderly and predictable fashion. You can use AWS
--- CloudFormation’s sample templates or create your own templates to describe
--- the AWS resources, and any associated dependencies or runtime parameters,
--- required to run your application. You don’t need to figure out the order for
--- provisioning AWS services or the subtleties of making those dependencies
--- work. CloudFormation takes care of this for you. After the AWS resources are
--- deployed, you can modify and update them in a controlled and predictable way,
--- in effect applying version control to your AWS infrastructure the same way
--- you do with your software.
+-- AWS CloudFormation
+--
+-- AWS CloudFormation enables you to create and manage AWS infrastructure
+-- deployments predictably and repeatedly. AWS CloudFormation helps you
+-- leverage AWS products such as Amazon EC2, EBS, Amazon SNS, ELB, and Auto
+-- Scaling to build highly-reliable, highly scalable, cost effective
+-- applications without worrying about creating and configuring the
+-- underlying AWS infrastructure.
+--
+-- With AWS CloudFormation, you declare all of your resources and
+-- dependencies in a template file. The template defines a collection of
+-- resources as a single unit called a stack. AWS CloudFormation creates
+-- and deletes all member resources of the stack together and manages all
+-- dependencies between the resources for you.
+--
+-- For more information about this product, go to the
+-- <http://aws.amazon.com/cloudformation/ CloudFormation Product Page>.
+--
+-- Amazon CloudFormation makes use of other AWS products. If you need
+-- additional technical information about a specific AWS product, you can
+-- find the product\'s technical documentation at
+-- <http://aws.amazon.com/documentation/>.
+--
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.CloudFormation
-    ( module Network.AWS.CloudFormation.CancelUpdateStack
-    , module Network.AWS.CloudFormation.CreateStack
+    (
+    -- * Service
+      CloudFormation
+
+    -- * Errors
+    -- $errors
+
+    -- ** InsufficientCapabilitiesException
+    , _InsufficientCapabilitiesException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- ** AlreadyExistsException
+    , _AlreadyExistsException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DeleteStack
     , module Network.AWS.CloudFormation.DeleteStack
-    , module Network.AWS.CloudFormation.DescribeStackEvents
-    , module Network.AWS.CloudFormation.DescribeStackResource
-    , module Network.AWS.CloudFormation.DescribeStackResources
-    , module Network.AWS.CloudFormation.DescribeStacks
-    , module Network.AWS.CloudFormation.EstimateTemplateCost
-    , module Network.AWS.CloudFormation.GetStackPolicy
-    , module Network.AWS.CloudFormation.GetTemplate
+
+    -- ** UpdateStack
+    , module Network.AWS.CloudFormation.UpdateStack
+
+    -- ** GetTemplateSummary
     , module Network.AWS.CloudFormation.GetTemplateSummary
+
+    -- ** ListStackResources (Paginated)
     , module Network.AWS.CloudFormation.ListStackResources
-    , module Network.AWS.CloudFormation.ListStacks
+
+    -- ** DescribeStacks (Paginated)
+    , module Network.AWS.CloudFormation.DescribeStacks
+
+    -- ** GetStackPolicy
+    , module Network.AWS.CloudFormation.GetStackPolicy
+
+    -- ** ValidateTemplate
+    , module Network.AWS.CloudFormation.ValidateTemplate
+
+    -- ** CancelUpdateStack
+    , module Network.AWS.CloudFormation.CancelUpdateStack
+
+    -- ** SetStackPolicy
     , module Network.AWS.CloudFormation.SetStackPolicy
+
+    -- ** DescribeStackEvents (Paginated)
+    , module Network.AWS.CloudFormation.DescribeStackEvents
+
+    -- ** SignalResource
     , module Network.AWS.CloudFormation.SignalResource
-    , module Network.AWS.CloudFormation.Types
-    , module Network.AWS.CloudFormation.UpdateStack
-    , module Network.AWS.CloudFormation.ValidateTemplate
+
+    -- ** ListStacks (Paginated)
+    , module Network.AWS.CloudFormation.ListStacks
+
+    -- ** CreateStack
+    , module Network.AWS.CloudFormation.CreateStack
+
+    -- ** DescribeStackResources
+    , module Network.AWS.CloudFormation.DescribeStackResources
+
+    -- ** EstimateTemplateCost
+    , module Network.AWS.CloudFormation.EstimateTemplateCost
+
+    -- ** GetTemplate
+    , module Network.AWS.CloudFormation.GetTemplate
+
+    -- ** DescribeStackResource
+    , module Network.AWS.CloudFormation.DescribeStackResource
+
+    -- * Types
+
+    -- ** Capability
+    , Capability (..)
+
+    -- ** OnFailure
+    , OnFailure (..)
+
+    -- ** ResourceSignalStatus
+    , ResourceSignalStatus (..)
+
+    -- ** ResourceStatus
+    , ResourceStatus (..)
+
+    -- ** StackStatus
+    , StackStatus (..)
+
+    -- ** Output
+    , Output
+    , output
+    , oOutputValue
+    , oOutputKey
+    , oDescription
+
+    -- ** Parameter
+    , Parameter
+    , parameter
+    , pParameterValue
+    , pParameterKey
+    , pUsePreviousValue
+
+    -- ** ParameterConstraints
+    , ParameterConstraints
+    , parameterConstraints
+    , pcAllowedValues
+
+    -- ** ParameterDeclaration
+    , ParameterDeclaration
+    , parameterDeclaration
+    , pdParameterKey
+    , pdParameterType
+    , pdParameterConstraints
+    , pdDefaultValue
+    , pdNoEcho
+    , pdDescription
+
+    -- ** Stack
+    , Stack
+    , stack
+    , sDisableRollback
+    , sLastUpdatedTime
+    , sNotificationARNs
+    , sStackStatusReason
+    , sOutputs
+    , sParameters
+    , sStackId
+    , sCapabilities
+    , sDescription
+    , sTags
+    , sTimeoutInMinutes
+    , sStackName
+    , sCreationTime
+    , sStackStatus
+
+    -- ** StackEvent
+    , StackEvent
+    , stackEvent
+    , seLogicalResourceId
+    , seResourceStatusReason
+    , seResourceType
+    , sePhysicalResourceId
+    , seResourceProperties
+    , seResourceStatus
+    , seStackId
+    , seEventId
+    , seStackName
+    , seTimestamp
+
+    -- ** StackResource
+    , StackResource
+    , stackResource
+    , srResourceStatusReason
+    , srPhysicalResourceId
+    , srStackId
+    , srDescription
+    , srStackName
+    , srLogicalResourceId
+    , srResourceType
+    , srTimestamp
+    , srResourceStatus
+
+    -- ** StackResourceDetail
+    , StackResourceDetail
+    , stackResourceDetail
+    , srdResourceStatusReason
+    , srdPhysicalResourceId
+    , srdMetadata
+    , srdStackId
+    , srdDescription
+    , srdStackName
+    , srdLogicalResourceId
+    , srdResourceType
+    , srdLastUpdatedTimestamp
+    , srdResourceStatus
+
+    -- ** StackResourceSummary
+    , StackResourceSummary
+    , stackResourceSummary
+    , srsResourceStatusReason
+    , srsPhysicalResourceId
+    , srsLogicalResourceId
+    , srsResourceType
+    , srsLastUpdatedTimestamp
+    , srsResourceStatus
+
+    -- ** StackSummary
+    , StackSummary
+    , stackSummary
+    , ssLastUpdatedTime
+    , ssTemplateDescription
+    , ssStackStatusReason
+    , ssDeletionTime
+    , ssStackId
+    , ssStackName
+    , ssCreationTime
+    , ssStackStatus
+
+    -- ** Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+
+    -- ** TemplateParameter
+    , TemplateParameter
+    , templateParameter
+    , tpParameterKey
+    , tpDefaultValue
+    , tpNoEcho
+    , tpDescription
     ) where
 
-import Network.AWS.CloudFormation.CancelUpdateStack
-import Network.AWS.CloudFormation.CreateStack
-import Network.AWS.CloudFormation.DeleteStack
-import Network.AWS.CloudFormation.DescribeStackEvents
-import Network.AWS.CloudFormation.DescribeStackResource
-import Network.AWS.CloudFormation.DescribeStackResources
-import Network.AWS.CloudFormation.DescribeStacks
-import Network.AWS.CloudFormation.EstimateTemplateCost
-import Network.AWS.CloudFormation.GetStackPolicy
-import Network.AWS.CloudFormation.GetTemplate
-import Network.AWS.CloudFormation.GetTemplateSummary
-import Network.AWS.CloudFormation.ListStackResources
-import Network.AWS.CloudFormation.ListStacks
-import Network.AWS.CloudFormation.SetStackPolicy
-import Network.AWS.CloudFormation.SignalResource
-import Network.AWS.CloudFormation.Types
-import Network.AWS.CloudFormation.UpdateStack
-import Network.AWS.CloudFormation.ValidateTemplate
+import           Network.AWS.CloudFormation.CancelUpdateStack
+import           Network.AWS.CloudFormation.CreateStack
+import           Network.AWS.CloudFormation.DeleteStack
+import           Network.AWS.CloudFormation.DescribeStackEvents
+import           Network.AWS.CloudFormation.DescribeStackResource
+import           Network.AWS.CloudFormation.DescribeStackResources
+import           Network.AWS.CloudFormation.DescribeStacks
+import           Network.AWS.CloudFormation.EstimateTemplateCost
+import           Network.AWS.CloudFormation.GetStackPolicy
+import           Network.AWS.CloudFormation.GetTemplate
+import           Network.AWS.CloudFormation.GetTemplateSummary
+import           Network.AWS.CloudFormation.ListStackResources
+import           Network.AWS.CloudFormation.ListStacks
+import           Network.AWS.CloudFormation.SetStackPolicy
+import           Network.AWS.CloudFormation.SignalResource
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.UpdateStack
+import           Network.AWS.CloudFormation.ValidateTemplate
+import           Network.AWS.CloudFormation.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 'CloudFormation'.
+-}
+
+{- $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/CloudFormation/CancelUpdateStack.hs b/gen/Network/AWS/CloudFormation/CancelUpdateStack.hs
--- a/gen/Network/AWS/CloudFormation/CancelUpdateStack.hs
+++ b/gen/Network/AWS/CloudFormation/CancelUpdateStack.hs
@@ -1,94 +1,99 @@
-{-# 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.CloudFormation.CancelUpdateStack
--- 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.
-
--- | Cancels an update on the specified stack. If the call completes successfully,
--- the stack will roll back the update and revert to the previous stack
--- configuration.
+-- Cancels an update on the specified stack. If the call completes
+-- successfully, the stack will roll back the update and revert to the
+-- previous stack configuration.
 --
 -- Only stacks that are in the UPDATE_IN_PROGRESS state can be canceled.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CancelUpdateStack.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CancelUpdateStack.html AWS API Reference> for CancelUpdateStack.
 module Network.AWS.CloudFormation.CancelUpdateStack
     (
-    -- * Request
-      CancelUpdateStack
-    -- ** Request constructor
-    , cancelUpdateStack
-    -- ** Request lenses
+    -- * Creating a Request
+      cancelUpdateStack
+    , CancelUpdateStack
+    -- * Request Lenses
     , cusStackName
 
-    -- * Response
-    , CancelUpdateStackResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , cancelUpdateStackResponse
+    , CancelUpdateStackResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype CancelUpdateStack = CancelUpdateStack
+-- | The input for CancelUpdateStack action.
+--
+-- /See:/ 'cancelUpdateStack' smart constructor.
+newtype CancelUpdateStack = CancelUpdateStack'
     { _cusStackName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CancelUpdateStack' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CancelUpdateStack' with the minimum fields required to make a request.
 --
--- * 'cusStackName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-cancelUpdateStack :: Text -- ^ 'cusStackName'
-                  -> CancelUpdateStack
-cancelUpdateStack p1 = CancelUpdateStack
-    { _cusStackName = p1
+-- * 'cusStackName'
+cancelUpdateStack
+    :: Text -- ^ 'cusStackName'
+    -> CancelUpdateStack
+cancelUpdateStack pStackName_ =
+    CancelUpdateStack'
+    { _cusStackName = pStackName_
     }
 
 -- | The name or the unique stack ID that is associated with the stack.
 cusStackName :: Lens' CancelUpdateStack Text
-cusStackName = lens _cusStackName (\s a -> s { _cusStackName = a })
+cusStackName = lens _cusStackName (\ s a -> s{_cusStackName = a});
 
-data CancelUpdateStackResponse = CancelUpdateStackResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest CancelUpdateStack where
+        type Sv CancelUpdateStack = CloudFormation
+        type Rs CancelUpdateStack = CancelUpdateStackResponse
+        request = postQuery
+        response = receiveNull CancelUpdateStackResponse'
 
--- | 'CancelUpdateStackResponse' constructor.
-cancelUpdateStackResponse :: CancelUpdateStackResponse
-cancelUpdateStackResponse = CancelUpdateStackResponse
+instance ToHeaders CancelUpdateStack where
+        toHeaders = const mempty
 
 instance ToPath CancelUpdateStack where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CancelUpdateStack where
-    toQuery CancelUpdateStack{..} = mconcat
-        [ "StackName" =? _cusStackName
-        ]
-
-instance ToHeaders CancelUpdateStack
+        toQuery CancelUpdateStack'{..}
+          = mconcat
+              ["Action" =: ("CancelUpdateStack" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "StackName" =: _cusStackName]
 
-instance AWSRequest CancelUpdateStack where
-    type Sv CancelUpdateStack = CloudFormation
-    type Rs CancelUpdateStack = CancelUpdateStackResponse
+-- | /See:/ 'cancelUpdateStackResponse' smart constructor.
+data CancelUpdateStackResponse =
+    CancelUpdateStackResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "CancelUpdateStack"
-    response = nullResponse CancelUpdateStackResponse
+-- | Creates a value of 'CancelUpdateStackResponse' with the minimum fields required to make a request.
+--
+cancelUpdateStackResponse
+    :: CancelUpdateStackResponse
+cancelUpdateStackResponse = CancelUpdateStackResponse'
diff --git a/gen/Network/AWS/CloudFormation/CreateStack.hs b/gen/Network/AWS/CloudFormation/CreateStack.hs
--- a/gen/Network/AWS/CloudFormation/CreateStack.hs
+++ b/gen/Network/AWS/CloudFormation/CreateStack.hs
@@ -1,269 +1,297 @@
-{-# 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.CloudFormation.CreateStack
--- 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 stack as specified in the template. After the call completes
+-- Creates a stack as specified in the template. After the call completes
 -- successfully, the stack creation starts. You can check the status of the
--- stack via the 'DescribeStacks' API.
+-- stack via the DescribeStacks API.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html AWS API Reference> for CreateStack.
 module Network.AWS.CloudFormation.CreateStack
     (
-    -- * Request
-      CreateStack
-    -- ** Request constructor
-    , createStack
-    -- ** Request lenses
-    , csCapabilities
+    -- * Creating a Request
+      createStack
+    , CreateStack
+    -- * Request Lenses
     , csDisableRollback
     , csNotificationARNs
-    , csOnFailure
-    , csParameters
-    , csStackName
     , csStackPolicyBody
+    , csParameters
     , csStackPolicyURL
-    , csTags
     , csTemplateBody
     , csTemplateURL
+    , csCapabilities
+    , csOnFailure
+    , csTags
     , csTimeoutInMinutes
+    , csStackName
 
-    -- * Response
-    , CreateStackResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createStackResponse
-    -- ** Response lenses
-    , csrStackId
+    , CreateStackResponse
+    -- * Response Lenses
+    , csrsStackId
+    , csrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data CreateStack = CreateStack
-    { _csCapabilities     :: List "member" Capability
-    , _csDisableRollback  :: Maybe Bool
-    , _csNotificationARNs :: List "member" Text
-    , _csOnFailure        :: Maybe OnFailure
-    , _csParameters       :: List "member" Parameter
-    , _csStackName        :: Text
-    , _csStackPolicyBody  :: Maybe Text
-    , _csStackPolicyURL   :: Maybe Text
-    , _csTags             :: List "member" Tag
-    , _csTemplateBody     :: Maybe Text
-    , _csTemplateURL      :: Maybe Text
-    , _csTimeoutInMinutes :: Maybe Nat
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'CreateStack' constructor.
+-- | The input for CreateStack action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createStack' smart constructor.
+data CreateStack = CreateStack'
+    { _csDisableRollback  :: !(Maybe Bool)
+    , _csNotificationARNs :: !(Maybe [Text])
+    , _csStackPolicyBody  :: !(Maybe Text)
+    , _csParameters       :: !(Maybe [Parameter])
+    , _csStackPolicyURL   :: !(Maybe Text)
+    , _csTemplateBody     :: !(Maybe Text)
+    , _csTemplateURL      :: !(Maybe Text)
+    , _csCapabilities     :: !(Maybe [Capability])
+    , _csOnFailure        :: !(Maybe OnFailure)
+    , _csTags             :: !(Maybe [Tag])
+    , _csTimeoutInMinutes :: !(Maybe Nat)
+    , _csStackName        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateStack' with the minimum fields required to make a request.
 --
--- * 'csCapabilities' @::@ ['Capability']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'csDisableRollback' @::@ 'Maybe' 'Bool'
+-- * 'csDisableRollback'
 --
--- * 'csNotificationARNs' @::@ ['Text']
+-- * 'csNotificationARNs'
 --
--- * 'csOnFailure' @::@ 'Maybe' 'OnFailure'
+-- * 'csStackPolicyBody'
 --
--- * 'csParameters' @::@ ['Parameter']
+-- * 'csParameters'
 --
--- * 'csStackName' @::@ 'Text'
+-- * 'csStackPolicyURL'
 --
--- * 'csStackPolicyBody' @::@ 'Maybe' 'Text'
+-- * 'csTemplateBody'
 --
--- * 'csStackPolicyURL' @::@ 'Maybe' 'Text'
+-- * 'csTemplateURL'
 --
--- * 'csTags' @::@ ['Tag']
+-- * 'csCapabilities'
 --
--- * 'csTemplateBody' @::@ 'Maybe' 'Text'
+-- * 'csOnFailure'
 --
--- * 'csTemplateURL' @::@ 'Maybe' 'Text'
+-- * 'csTags'
 --
--- * 'csTimeoutInMinutes' @::@ 'Maybe' 'Natural'
+-- * 'csTimeoutInMinutes'
 --
-createStack :: Text -- ^ 'csStackName'
-            -> CreateStack
-createStack p1 = CreateStack
-    { _csStackName        = p1
-    , _csTemplateBody     = Nothing
-    , _csTemplateURL      = Nothing
-    , _csParameters       = mempty
-    , _csDisableRollback  = Nothing
+-- * 'csStackName'
+createStack
+    :: Text -- ^ 'csStackName'
+    -> CreateStack
+createStack pStackName_ =
+    CreateStack'
+    { _csDisableRollback = Nothing
+    , _csNotificationARNs = Nothing
+    , _csStackPolicyBody = Nothing
+    , _csParameters = Nothing
+    , _csStackPolicyURL = Nothing
+    , _csTemplateBody = Nothing
+    , _csTemplateURL = Nothing
+    , _csCapabilities = Nothing
+    , _csOnFailure = Nothing
+    , _csTags = Nothing
     , _csTimeoutInMinutes = Nothing
-    , _csNotificationARNs = mempty
-    , _csCapabilities     = mempty
-    , _csOnFailure        = Nothing
-    , _csStackPolicyBody  = Nothing
-    , _csStackPolicyURL   = Nothing
-    , _csTags             = mempty
+    , _csStackName = pStackName_
     }
 
--- | A list of capabilities that you must specify before AWS CloudFormation can
--- create or update certain stacks. Some stack templates might include resources
--- that can affect permissions in your AWS account. For those stacks, you must
--- explicitly acknowledge their capabilities by specifying this parameter.
---
--- Currently, the only valid value is 'CAPABILITY_IAM', which is required for the
--- following resources: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html  AWS::IAM::AccessKey>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html  AWS::IAM::Group>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html AWS::IAM::InstanceProfile>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html  AWS::IAM::Policy>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html  AWS::IAM::Role>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html  AWS::IAM::User>
--- , and <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html  AWS::IAM::UserToGroupAddition>. If your stack template contains these
--- resources, we recommend that you review any permissions associated with them.
--- If you don't specify this parameter, this action returns an 'InsufficientCapabilities' error.
-csCapabilities :: Lens' CreateStack [Capability]
-csCapabilities = lens _csCapabilities (\s a -> s { _csCapabilities = a }) . _List
-
--- | Set to 'true' to disable rollback of the stack if stack creation failed. You
--- can specify either 'DisableRollback' or 'OnFailure', but not both.
+-- | Set to 'true' to disable rollback of the stack if stack creation failed.
+-- You can specify either 'DisableRollback' or 'OnFailure', but not both.
 --
 -- Default: 'false'
 csDisableRollback :: Lens' CreateStack (Maybe Bool)
-csDisableRollback =
-    lens _csDisableRollback (\s a -> s { _csDisableRollback = a })
+csDisableRollback = lens _csDisableRollback (\ s a -> s{_csDisableRollback = a});
 
--- | The Simple Notification Service (SNS) topic ARNs to publish stack related
--- events. You can find your SNS topic ARNs using the <http://console.aws.amazon.com/sns SNS console> or your
--- Command Line Interface (CLI).
+-- | The Simple Notification Service (SNS) topic ARNs to publish stack
+-- related events. You can find your SNS topic ARNs using the
+-- <http://console.aws.amazon.com/sns SNS console> or your Command Line
+-- Interface (CLI).
 csNotificationARNs :: Lens' CreateStack [Text]
-csNotificationARNs =
-    lens _csNotificationARNs (\s a -> s { _csNotificationARNs = a })
-        . _List
+csNotificationARNs = lens _csNotificationARNs (\ s a -> s{_csNotificationARNs = a}) . _Default . _Coerce;
 
--- | Determines what action will be taken if stack creation fails. This must be
--- one of: DO_NOTHING, ROLLBACK, or DELETE. You can specify either 'OnFailure' or 'DisableRollback', but not both.
---
--- Default: 'ROLLBACK'
-csOnFailure :: Lens' CreateStack (Maybe OnFailure)
-csOnFailure = lens _csOnFailure (\s a -> s { _csOnFailure = a })
+-- | Structure containing the stack policy body. For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html Prevent Updates to Stack Resources>
+-- in the AWS CloudFormation User Guide. You can specify either the
+-- 'StackPolicyBody' or the 'StackPolicyURL' parameter, but not both.
+csStackPolicyBody :: Lens' CreateStack (Maybe Text)
+csStackPolicyBody = lens _csStackPolicyBody (\ s a -> s{_csStackPolicyBody = a});
 
--- | A list of 'Parameter' structures that specify input parameters for the stack.
+-- | A list of 'Parameter' structures that specify input parameters for the
+-- stack.
 csParameters :: Lens' CreateStack [Parameter]
-csParameters = lens _csParameters (\s a -> s { _csParameters = a }) . _List
-
--- | The name that is associated with the stack. The name must be unique in the
--- region in which you are creating the stack.
---
--- A stack name can contain only alphanumeric characters (case sensitive) and
--- hyphens. It must start with an alphabetic character and cannot be longer than
--- 255 characters.
-csStackName :: Lens' CreateStack Text
-csStackName = lens _csStackName (\s a -> s { _csStackName = a })
-
--- | Structure containing the stack policy body. For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html Prevent Updates to Stack Resources> in the AWS CloudFormation User Guide. You
--- can specify either the 'StackPolicyBody' or the 'StackPolicyURL' parameter, but
--- not both.
-csStackPolicyBody :: Lens' CreateStack (Maybe Text)
-csStackPolicyBody =
-    lens _csStackPolicyBody (\s a -> s { _csStackPolicyBody = a })
+csParameters = lens _csParameters (\ s a -> s{_csParameters = a}) . _Default . _Coerce;
 
 -- | Location of a file containing the stack policy. The URL must point to a
--- policy (max size: 16KB) located in an S3 bucket in the same region as the
--- stack. You can specify either the 'StackPolicyBody' or the 'StackPolicyURL'
--- parameter, but not both.
+-- policy (max size: 16KB) located in an S3 bucket in the same region as
+-- the stack. You can specify either the 'StackPolicyBody' or the
+-- 'StackPolicyURL' parameter, but not both.
 csStackPolicyURL :: Lens' CreateStack (Maybe Text)
-csStackPolicyURL = lens _csStackPolicyURL (\s a -> s { _csStackPolicyURL = a })
-
--- | A set of user-defined 'Tags' to associate with this stack, represented by
--- key/value pairs. Tags defined for the stack are propagated to EC2 resources
--- that are created as part of the stack. A maximum number of 10 tags can be
--- specified.
-csTags :: Lens' CreateStack [Tag]
-csTags = lens _csTags (\s a -> s { _csTags = a }) . _List
+csStackPolicyURL = lens _csStackPolicyURL (\ s a -> s{_csStackPolicyURL = a});
 
--- | Structure containing the template body with a minimum length of 1 byte and a
--- maximum length of 51,200 bytes. For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- | Structure containing the template body with a minimum length of 1 byte
+-- and a maximum length of 51,200 bytes. For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
 -- in the AWS CloudFormation User Guide.
 --
--- Conditional: You must specify either the 'TemplateBody' or the 'TemplateURL'
--- parameter, but not both.
+-- Conditional: You must specify either the 'TemplateBody' or the
+-- 'TemplateURL' parameter, but not both.
 csTemplateBody :: Lens' CreateStack (Maybe Text)
-csTemplateBody = lens _csTemplateBody (\s a -> s { _csTemplateBody = a })
+csTemplateBody = lens _csTemplateBody (\ s a -> s{_csTemplateBody = a});
 
 -- | Location of file containing the template body. The URL must point to a
--- template (max size: 460,800 bytes) located in an S3 bucket in the same region
--- as the stack. For more information, go to the <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy> in the AWS
--- CloudFormation User Guide.
+-- template (max size: 460,800 bytes) located in an S3 bucket in the same
+-- region as the stack. For more information, go to the
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- in the AWS CloudFormation User Guide.
 --
--- Conditional: You must specify either the 'TemplateBody' or the 'TemplateURL'
--- parameter, but not both.
+-- Conditional: You must specify either the 'TemplateBody' or the
+-- 'TemplateURL' parameter, but not both.
 csTemplateURL :: Lens' CreateStack (Maybe Text)
-csTemplateURL = lens _csTemplateURL (\s a -> s { _csTemplateURL = a })
+csTemplateURL = lens _csTemplateURL (\ s a -> s{_csTemplateURL = a});
 
+-- | A list of capabilities that you must specify before AWS CloudFormation
+-- can create or update certain stacks. Some stack templates might include
+-- resources that can affect permissions in your AWS account. For those
+-- stacks, you must explicitly acknowledge their capabilities by specifying
+-- this parameter.
+--
+-- Currently, the only valid value is 'CAPABILITY_IAM', which is required
+-- for the following resources:
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html AWS::IAM::AccessKey>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html AWS::IAM::Group>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html AWS::IAM::InstanceProfile>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html AWS::IAM::Policy>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html AWS::IAM::Role>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html AWS::IAM::User>,
+-- and
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html AWS::IAM::UserToGroupAddition>.
+-- If your stack template contains these resources, we recommend that you
+-- review any permissions associated with them. If you don\'t specify this
+-- parameter, this action returns an 'InsufficientCapabilities' error.
+csCapabilities :: Lens' CreateStack [Capability]
+csCapabilities = lens _csCapabilities (\ s a -> s{_csCapabilities = a}) . _Default . _Coerce;
+
+-- | Determines what action will be taken if stack creation fails. This must
+-- be one of: DO_NOTHING, ROLLBACK, or DELETE. You can specify either
+-- 'OnFailure' or 'DisableRollback', but not both.
+--
+-- Default: 'ROLLBACK'
+csOnFailure :: Lens' CreateStack (Maybe OnFailure)
+csOnFailure = lens _csOnFailure (\ s a -> s{_csOnFailure = a});
+
+-- | A set of user-defined 'Tags' to associate with this stack, represented
+-- by key\/value pairs. Tags defined for the stack are propagated to EC2
+-- resources that are created as part of the stack. A maximum number of 10
+-- tags can be specified.
+csTags :: Lens' CreateStack [Tag]
+csTags = lens _csTags (\ s a -> s{_csTags = a}) . _Default . _Coerce;
+
 -- | The amount of time that can pass before the stack status becomes
--- CREATE_FAILED; if 'DisableRollback' is not set or is set to 'false', the stack
--- will be rolled back.
+-- CREATE_FAILED; if 'DisableRollback' is not set or is set to 'false', the
+-- stack will be rolled back.
 csTimeoutInMinutes :: Lens' CreateStack (Maybe Natural)
-csTimeoutInMinutes =
-    lens _csTimeoutInMinutes (\s a -> s { _csTimeoutInMinutes = a })
-        . mapping _Nat
-
-newtype CreateStackResponse = CreateStackResponse
-    { _csrStackId :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+csTimeoutInMinutes = lens _csTimeoutInMinutes (\ s a -> s{_csTimeoutInMinutes = a}) . mapping _Nat;
 
--- | 'CreateStackResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'csrStackId' @::@ 'Maybe' 'Text'
+-- | The name that is associated with the stack. The name must be unique in
+-- the region in which you are creating the stack.
 --
-createStackResponse :: CreateStackResponse
-createStackResponse = CreateStackResponse
-    { _csrStackId = Nothing
-    }
+-- A stack name can contain only alphanumeric characters (case sensitive)
+-- and hyphens. It must start with an alphabetic character and cannot be
+-- longer than 255 characters.
+csStackName :: Lens' CreateStack Text
+csStackName = lens _csStackName (\ s a -> s{_csStackName = a});
 
--- | Unique identifier of the stack.
-csrStackId :: Lens' CreateStackResponse (Maybe Text)
-csrStackId = lens _csrStackId (\s a -> s { _csrStackId = a })
+instance AWSRequest CreateStack where
+        type Sv CreateStack = CloudFormation
+        type Rs CreateStack = CreateStackResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "CreateStackResult"
+              (\ s h x ->
+                 CreateStackResponse' <$>
+                   (x .@? "StackId") <*> (pure (fromEnum s)))
 
+instance ToHeaders CreateStack where
+        toHeaders = const mempty
+
 instance ToPath CreateStack where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery CreateStack where
-    toQuery CreateStack{..} = mconcat
-        [ "Capabilities"     =? _csCapabilities
-        , "DisableRollback"  =? _csDisableRollback
-        , "NotificationARNs" =? _csNotificationARNs
-        , "OnFailure"        =? _csOnFailure
-        , "Parameters"       =? _csParameters
-        , "StackName"        =? _csStackName
-        , "StackPolicyBody"  =? _csStackPolicyBody
-        , "StackPolicyURL"   =? _csStackPolicyURL
-        , "Tags"             =? _csTags
-        , "TemplateBody"     =? _csTemplateBody
-        , "TemplateURL"      =? _csTemplateURL
-        , "TimeoutInMinutes" =? _csTimeoutInMinutes
-        ]
+        toQuery CreateStack'{..}
+          = mconcat
+              ["Action" =: ("CreateStack" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "DisableRollback" =: _csDisableRollback,
+               "NotificationARNs" =:
+                 toQuery
+                   (toQueryList "member" <$> _csNotificationARNs),
+               "StackPolicyBody" =: _csStackPolicyBody,
+               "Parameters" =:
+                 toQuery (toQueryList "member" <$> _csParameters),
+               "StackPolicyURL" =: _csStackPolicyURL,
+               "TemplateBody" =: _csTemplateBody,
+               "TemplateURL" =: _csTemplateURL,
+               "Capabilities" =:
+                 toQuery (toQueryList "member" <$> _csCapabilities),
+               "OnFailure" =: _csOnFailure,
+               "Tags" =: toQuery (toQueryList "member" <$> _csTags),
+               "TimeoutInMinutes" =: _csTimeoutInMinutes,
+               "StackName" =: _csStackName]
 
-instance ToHeaders CreateStack
+-- | The output for a CreateStack action.
+--
+-- /See:/ 'createStackResponse' smart constructor.
+data CreateStackResponse = CreateStackResponse'
+    { _csrsStackId :: !(Maybe Text)
+    , _csrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest CreateStack where
-    type Sv CreateStack = CloudFormation
-    type Rs CreateStack = CreateStackResponse
+-- | Creates a value of 'CreateStackResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csrsStackId'
+--
+-- * 'csrsStatus'
+createStackResponse
+    :: Int -- ^ 'csrsStatus'
+    -> CreateStackResponse
+createStackResponse pStatus_ =
+    CreateStackResponse'
+    { _csrsStackId = Nothing
+    , _csrsStatus = pStatus_
+    }
 
-    request  = post "CreateStack"
-    response = xmlResponse
+-- | Unique identifier of the stack.
+csrsStackId :: Lens' CreateStackResponse (Maybe Text)
+csrsStackId = lens _csrsStackId (\ s a -> s{_csrsStackId = a});
 
-instance FromXML CreateStackResponse where
-    parseXML = withElement "CreateStackResult" $ \x -> CreateStackResponse
-        <$> x .@? "StackId"
+-- | The response status code.
+csrsStatus :: Lens' CreateStackResponse Int
+csrsStatus = lens _csrsStatus (\ s a -> s{_csrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/DeleteStack.hs b/gen/Network/AWS/CloudFormation/DeleteStack.hs
--- a/gen/Network/AWS/CloudFormation/DeleteStack.hs
+++ b/gen/Network/AWS/CloudFormation/DeleteStack.hs
@@ -1,92 +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.CloudFormation.DeleteStack
--- 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 a specified stack. Once the call completes successfully, stack
--- deletion starts. Deleted stacks do not show up in the 'DescribeStacks' API if
--- the deletion has been completed successfully.
+-- Deletes a specified stack. Once the call completes successfully, stack
+-- deletion starts. Deleted stacks do not show up in the DescribeStacks API
+-- if the deletion has been completed successfully.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStack.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStack.html AWS API Reference> for DeleteStack.
 module Network.AWS.CloudFormation.DeleteStack
     (
-    -- * Request
-      DeleteStack
-    -- ** Request constructor
-    , deleteStack
-    -- ** Request lenses
+    -- * Creating a Request
+      deleteStack
+    , DeleteStack
+    -- * Request Lenses
     , dsStackName
 
-    -- * Response
-    , DeleteStackResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteStackResponse
+    , DeleteStackResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype DeleteStack = DeleteStack
+-- | The input for DeleteStack action.
+--
+-- /See:/ 'deleteStack' smart constructor.
+newtype DeleteStack = DeleteStack'
     { _dsStackName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'DeleteStack' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'DeleteStack' with the minimum fields required to make a request.
 --
--- * 'dsStackName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-deleteStack :: Text -- ^ 'dsStackName'
-            -> DeleteStack
-deleteStack p1 = DeleteStack
-    { _dsStackName = p1
+-- * 'dsStackName'
+deleteStack
+    :: Text -- ^ 'dsStackName'
+    -> DeleteStack
+deleteStack pStackName_ =
+    DeleteStack'
+    { _dsStackName = pStackName_
     }
 
 -- | The name or the unique stack ID that is associated with the stack.
 dsStackName :: Lens' DeleteStack Text
-dsStackName = lens _dsStackName (\s a -> s { _dsStackName = a })
+dsStackName = lens _dsStackName (\ s a -> s{_dsStackName = a});
 
-data DeleteStackResponse = DeleteStackResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteStack where
+        type Sv DeleteStack = CloudFormation
+        type Rs DeleteStack = DeleteStackResponse
+        request = postQuery
+        response = receiveNull DeleteStackResponse'
 
--- | 'DeleteStackResponse' constructor.
-deleteStackResponse :: DeleteStackResponse
-deleteStackResponse = DeleteStackResponse
+instance ToHeaders DeleteStack where
+        toHeaders = const mempty
 
 instance ToPath DeleteStack where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DeleteStack where
-    toQuery DeleteStack{..} = mconcat
-        [ "StackName" =? _dsStackName
-        ]
-
-instance ToHeaders DeleteStack
+        toQuery DeleteStack'{..}
+          = mconcat
+              ["Action" =: ("DeleteStack" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "StackName" =: _dsStackName]
 
-instance AWSRequest DeleteStack where
-    type Sv DeleteStack = CloudFormation
-    type Rs DeleteStack = DeleteStackResponse
+-- | /See:/ 'deleteStackResponse' smart constructor.
+data DeleteStackResponse =
+    DeleteStackResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "DeleteStack"
-    response = nullResponse DeleteStackResponse
+-- | Creates a value of 'DeleteStackResponse' with the minimum fields required to make a request.
+--
+deleteStackResponse
+    :: DeleteStackResponse
+deleteStackResponse = DeleteStackResponse'
diff --git a/gen/Network/AWS/CloudFormation/DescribeStackEvents.hs b/gen/Network/AWS/CloudFormation/DescribeStackEvents.hs
--- a/gen/Network/AWS/CloudFormation/DescribeStackEvents.hs
+++ b/gen/Network/AWS/CloudFormation/DescribeStackEvents.hs
@@ -1,145 +1,172 @@
-{-# 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.CloudFormation.DescribeStackEvents
--- 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 all stack related events for a specified stack. For more information
--- about a stack's event history, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/concept-stack.html Stacks> in the AWS CloudFormation User
--- Guide.
+-- Returns all stack related events for a specified stack. For more
+-- information about a stack\'s event history, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/concept-stack.html Stacks>
+-- in the AWS CloudFormation User Guide.
 --
 -- You can list events for stacks that have failed to create or have been
 -- deleted by specifying the unique stack identifier (stack ID).
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackEvents.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackEvents.html AWS API Reference> for DescribeStackEvents.
+--
+-- This operation returns paginated results.
 module Network.AWS.CloudFormation.DescribeStackEvents
     (
-    -- * Request
-      DescribeStackEvents
-    -- ** Request constructor
-    , describeStackEvents
-    -- ** Request lenses
+    -- * Creating a Request
+      describeStackEvents
+    , DescribeStackEvents
+    -- * Request Lenses
     , dseNextToken
     , dseStackName
 
-    -- * Response
-    , DescribeStackEventsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeStackEventsResponse
-    -- ** Response lenses
-    , dserNextToken
-    , dserStackEvents
+    , DescribeStackEventsResponse
+    -- * Response Lenses
+    , dsersNextToken
+    , dsersStackEvents
+    , dsersStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data DescribeStackEvents = DescribeStackEvents
-    { _dseNextToken :: Maybe Text
-    , _dseStackName :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DescribeStackEvents' constructor.
+-- | The input for DescribeStackEvents action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeStackEvents' smart constructor.
+data DescribeStackEvents = DescribeStackEvents'
+    { _dseNextToken :: !(Maybe Text)
+    , _dseStackName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeStackEvents' with the minimum fields required to make a request.
 --
--- * 'dseNextToken' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dseStackName' @::@ 'Maybe' 'Text'
+-- * 'dseNextToken'
 --
-describeStackEvents :: DescribeStackEvents
-describeStackEvents = DescribeStackEvents
-    { _dseStackName = Nothing
-    , _dseNextToken = Nothing
+-- * 'dseStackName'
+describeStackEvents
+    :: DescribeStackEvents
+describeStackEvents =
+    DescribeStackEvents'
+    { _dseNextToken = Nothing
+    , _dseStackName = Nothing
     }
 
--- | String that identifies the start of the next list of events, if there is one.
+-- | String that identifies the start of the next list of events, if there is
+-- one.
 --
 -- Default: There is no default value.
 dseNextToken :: Lens' DescribeStackEvents (Maybe Text)
-dseNextToken = lens _dseNextToken (\s a -> s { _dseNextToken = a })
+dseNextToken = lens _dseNextToken (\ s a -> s{_dseNextToken = a});
 
--- | The name or the unique stack ID that is associated with the stack, which are
--- not always interchangeable:
+-- | The name or the unique stack ID that is associated with the stack, which
+-- are not always interchangeable:
 --
--- Running stacks: You can specify either the stack's name or its unique stack
--- ID. Deleted stacks: You must specify the unique stack ID.  Default: There is
--- no default value.
+-- -   Running stacks: You can specify either the stack\'s name or its
+--     unique stack ID.
+-- -   Deleted stacks: You must specify the unique stack ID.
+--
+-- Default: There is no default value.
 dseStackName :: Lens' DescribeStackEvents (Maybe Text)
-dseStackName = lens _dseStackName (\s a -> s { _dseStackName = a })
-
-data DescribeStackEventsResponse = DescribeStackEventsResponse
-    { _dserNextToken   :: Maybe Text
-    , _dserStackEvents :: List "member" StackEvent
-    } deriving (Eq, Read, Show)
+dseStackName = lens _dseStackName (\ s a -> s{_dseStackName = a});
 
--- | 'DescribeStackEventsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dserNextToken' @::@ 'Maybe' 'Text'
---
--- * 'dserStackEvents' @::@ ['StackEvent']
---
-describeStackEventsResponse :: DescribeStackEventsResponse
-describeStackEventsResponse = DescribeStackEventsResponse
-    { _dserStackEvents = mempty
-    , _dserNextToken   = Nothing
-    }
+instance AWSPager DescribeStackEvents where
+        page rq rs
+          | stop (rs ^. dsersNextToken) = Nothing
+          | stop (rs ^. dsersStackEvents) = Nothing
+          | otherwise =
+            Just $ rq & dseNextToken .~ rs ^. dsersNextToken
 
--- | String that identifies the start of the next list of events, if there is one.
-dserNextToken :: Lens' DescribeStackEventsResponse (Maybe Text)
-dserNextToken = lens _dserNextToken (\s a -> s { _dserNextToken = a })
+instance AWSRequest DescribeStackEvents where
+        type Sv DescribeStackEvents = CloudFormation
+        type Rs DescribeStackEvents =
+             DescribeStackEventsResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "DescribeStackEventsResult"
+              (\ s h x ->
+                 DescribeStackEventsResponse' <$>
+                   (x .@? "NextToken") <*>
+                     (x .@? "StackEvents" .!@ mempty >>=
+                        may (parseXMLList "member"))
+                     <*> (pure (fromEnum s)))
 
--- | A list of 'StackEvents' structures.
-dserStackEvents :: Lens' DescribeStackEventsResponse [StackEvent]
-dserStackEvents = lens _dserStackEvents (\s a -> s { _dserStackEvents = a }) . _List
+instance ToHeaders DescribeStackEvents where
+        toHeaders = const mempty
 
 instance ToPath DescribeStackEvents where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeStackEvents where
-    toQuery DescribeStackEvents{..} = mconcat
-        [ "NextToken" =? _dseNextToken
-        , "StackName" =? _dseStackName
-        ]
+        toQuery DescribeStackEvents'{..}
+          = mconcat
+              ["Action" =: ("DescribeStackEvents" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "NextToken" =: _dseNextToken,
+               "StackName" =: _dseStackName]
 
-instance ToHeaders DescribeStackEvents
+-- | The output for a DescribeStackEvents action.
+--
+-- /See:/ 'describeStackEventsResponse' smart constructor.
+data DescribeStackEventsResponse = DescribeStackEventsResponse'
+    { _dsersNextToken   :: !(Maybe Text)
+    , _dsersStackEvents :: !(Maybe [StackEvent])
+    , _dsersStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DescribeStackEvents where
-    type Sv DescribeStackEvents = CloudFormation
-    type Rs DescribeStackEvents = DescribeStackEventsResponse
+-- | Creates a value of 'DescribeStackEventsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsersNextToken'
+--
+-- * 'dsersStackEvents'
+--
+-- * 'dsersStatus'
+describeStackEventsResponse
+    :: Int -- ^ 'dsersStatus'
+    -> DescribeStackEventsResponse
+describeStackEventsResponse pStatus_ =
+    DescribeStackEventsResponse'
+    { _dsersNextToken = Nothing
+    , _dsersStackEvents = Nothing
+    , _dsersStatus = pStatus_
+    }
 
-    request  = post "DescribeStackEvents"
-    response = xmlResponse
+-- | String that identifies the start of the next list of events, if there is
+-- one.
+dsersNextToken :: Lens' DescribeStackEventsResponse (Maybe Text)
+dsersNextToken = lens _dsersNextToken (\ s a -> s{_dsersNextToken = a});
 
-instance FromXML DescribeStackEventsResponse where
-    parseXML = withElement "DescribeStackEventsResult" $ \x -> DescribeStackEventsResponse
-        <$> x .@? "NextToken"
-        <*> x .@? "StackEvents" .!@ mempty
+-- | A list of 'StackEvents' structures.
+dsersStackEvents :: Lens' DescribeStackEventsResponse [StackEvent]
+dsersStackEvents = lens _dsersStackEvents (\ s a -> s{_dsersStackEvents = a}) . _Default . _Coerce;
 
-instance AWSPager DescribeStackEvents where
-    page rq rs
-        | stop (rs ^. dserNextToken) = Nothing
-        | otherwise = (\x -> rq & dseNextToken ?~ x)
-            <$> (rs ^. dserNextToken)
+-- | The response status code.
+dsersStatus :: Lens' DescribeStackEventsResponse Int
+dsersStatus = lens _dsersStatus (\ s a -> s{_dsersStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/DescribeStackResource.hs b/gen/Network/AWS/CloudFormation/DescribeStackResource.hs
--- a/gen/Network/AWS/CloudFormation/DescribeStackResource.hs
+++ b/gen/Network/AWS/CloudFormation/DescribeStackResource.hs
@@ -1,132 +1,149 @@
-{-# 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.CloudFormation.DescribeStackResource
--- 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 description of the specified resource in the specified stack.
+-- Returns a description of the specified resource in the specified stack.
 --
--- For deleted stacks, DescribeStackResource returns resource information for
--- up to 90 days after the stack has been deleted.
+-- For deleted stacks, DescribeStackResource returns resource information
+-- for up to 90 days after the stack has been deleted.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackResource.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackResource.html AWS API Reference> for DescribeStackResource.
 module Network.AWS.CloudFormation.DescribeStackResource
     (
-    -- * Request
-      DescribeStackResource
-    -- ** Request constructor
-    , describeStackResource
-    -- ** Request lenses
-    , dsr1LogicalResourceId
-    , dsr1StackName
+    -- * Creating a Request
+      describeStackResource
+    , DescribeStackResource
+    -- * Request Lenses
+    , desStackName
+    , desLogicalResourceId
 
-    -- * Response
-    , DescribeStackResourceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeStackResourceResponse
-    -- ** Response lenses
-    , dsrrStackResourceDetail
+    , DescribeStackResourceResponse
+    -- * Response Lenses
+    , dsrrsStackResourceDetail
+    , dsrrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data DescribeStackResource = DescribeStackResource
-    { _dsr1LogicalResourceId :: Text
-    , _dsr1StackName         :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DescribeStackResource' constructor.
+-- | The input for DescribeStackResource action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeStackResource' smart constructor.
+data DescribeStackResource = DescribeStackResource'
+    { _desStackName         :: !Text
+    , _desLogicalResourceId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeStackResource' with the minimum fields required to make a request.
 --
--- * 'dsr1LogicalResourceId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dsr1StackName' @::@ 'Text'
+-- * 'desStackName'
 --
-describeStackResource :: Text -- ^ 'dsr1StackName'
-                      -> Text -- ^ 'dsr1LogicalResourceId'
-                      -> DescribeStackResource
-describeStackResource p1 p2 = DescribeStackResource
-    { _dsr1StackName         = p1
-    , _dsr1LogicalResourceId = p2
+-- * 'desLogicalResourceId'
+describeStackResource
+    :: Text -- ^ 'desStackName'
+    -> Text -- ^ 'desLogicalResourceId'
+    -> DescribeStackResource
+describeStackResource pStackName_ pLogicalResourceId_ =
+    DescribeStackResource'
+    { _desStackName = pStackName_
+    , _desLogicalResourceId = pLogicalResourceId_
     }
 
--- | The logical name of the resource as specified in the template.
+-- | The name or the unique stack ID that is associated with the stack, which
+-- are not always interchangeable:
 --
+-- -   Running stacks: You can specify either the stack\'s name or its
+--     unique stack ID.
+-- -   Deleted stacks: You must specify the unique stack ID.
+--
 -- Default: There is no default value.
-dsr1LogicalResourceId :: Lens' DescribeStackResource Text
-dsr1LogicalResourceId =
-    lens _dsr1LogicalResourceId (\s a -> s { _dsr1LogicalResourceId = a })
+desStackName :: Lens' DescribeStackResource Text
+desStackName = lens _desStackName (\ s a -> s{_desStackName = a});
 
--- | The name or the unique stack ID that is associated with the stack, which are
--- not always interchangeable:
+-- | The logical name of the resource as specified in the template.
 --
--- Running stacks: You can specify either the stack's name or its unique stack
--- ID. Deleted stacks: You must specify the unique stack ID.  Default: There is
--- no default value.
-dsr1StackName :: Lens' DescribeStackResource Text
-dsr1StackName = lens _dsr1StackName (\s a -> s { _dsr1StackName = a })
-
-newtype DescribeStackResourceResponse = DescribeStackResourceResponse
-    { _dsrrStackResourceDetail :: Maybe StackResourceDetail
-    } deriving (Eq, Read, Show)
+-- Default: There is no default value.
+desLogicalResourceId :: Lens' DescribeStackResource Text
+desLogicalResourceId = lens _desLogicalResourceId (\ s a -> s{_desLogicalResourceId = a});
 
--- | 'DescribeStackResourceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dsrrStackResourceDetail' @::@ 'Maybe' 'StackResourceDetail'
---
-describeStackResourceResponse :: DescribeStackResourceResponse
-describeStackResourceResponse = DescribeStackResourceResponse
-    { _dsrrStackResourceDetail = Nothing
-    }
+instance AWSRequest DescribeStackResource where
+        type Sv DescribeStackResource = CloudFormation
+        type Rs DescribeStackResource =
+             DescribeStackResourceResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "DescribeStackResourceResult"
+              (\ s h x ->
+                 DescribeStackResourceResponse' <$>
+                   (x .@? "StackResourceDetail") <*>
+                     (pure (fromEnum s)))
 
--- | A 'StackResourceDetail' structure containing the description of the specified
--- resource in the specified stack.
-dsrrStackResourceDetail :: Lens' DescribeStackResourceResponse (Maybe StackResourceDetail)
-dsrrStackResourceDetail =
-    lens _dsrrStackResourceDetail (\s a -> s { _dsrrStackResourceDetail = a })
+instance ToHeaders DescribeStackResource where
+        toHeaders = const mempty
 
 instance ToPath DescribeStackResource where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeStackResource where
-    toQuery DescribeStackResource{..} = mconcat
-        [ "LogicalResourceId" =? _dsr1LogicalResourceId
-        , "StackName"         =? _dsr1StackName
-        ]
+        toQuery DescribeStackResource'{..}
+          = mconcat
+              ["Action" =: ("DescribeStackResource" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "StackName" =: _desStackName,
+               "LogicalResourceId" =: _desLogicalResourceId]
 
-instance ToHeaders DescribeStackResource
+-- | The output for a DescribeStackResource action.
+--
+-- /See:/ 'describeStackResourceResponse' smart constructor.
+data DescribeStackResourceResponse = DescribeStackResourceResponse'
+    { _dsrrsStackResourceDetail :: !(Maybe StackResourceDetail)
+    , _dsrrsStatus              :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DescribeStackResource where
-    type Sv DescribeStackResource = CloudFormation
-    type Rs DescribeStackResource = DescribeStackResourceResponse
+-- | Creates a value of 'DescribeStackResourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrrsStackResourceDetail'
+--
+-- * 'dsrrsStatus'
+describeStackResourceResponse
+    :: Int -- ^ 'dsrrsStatus'
+    -> DescribeStackResourceResponse
+describeStackResourceResponse pStatus_ =
+    DescribeStackResourceResponse'
+    { _dsrrsStackResourceDetail = Nothing
+    , _dsrrsStatus = pStatus_
+    }
 
-    request  = post "DescribeStackResource"
-    response = xmlResponse
+-- | A 'StackResourceDetail' structure containing the description of the
+-- specified resource in the specified stack.
+dsrrsStackResourceDetail :: Lens' DescribeStackResourceResponse (Maybe StackResourceDetail)
+dsrrsStackResourceDetail = lens _dsrrsStackResourceDetail (\ s a -> s{_dsrrsStackResourceDetail = a});
 
-instance FromXML DescribeStackResourceResponse where
-    parseXML = withElement "DescribeStackResourceResult" $ \x -> DescribeStackResourceResponse
-        <$> x .@? "StackResourceDetail"
+-- | The response status code.
+dsrrsStatus :: Lens' DescribeStackResourceResponse Int
+dsrrsStatus = lens _dsrrsStatus (\ s a -> s{_dsrrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/DescribeStackResources.hs b/gen/Network/AWS/CloudFormation/DescribeStackResources.hs
--- a/gen/Network/AWS/CloudFormation/DescribeStackResources.hs
+++ b/gen/Network/AWS/CloudFormation/DescribeStackResources.hs
@@ -1,169 +1,188 @@
-{-# 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.CloudFormation.DescribeStackResources
--- 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 AWS resource descriptions for running and deleted stacks. If 'StackName'
--- is specified, all the associated resources that are part of the stack are
--- returned. If 'PhysicalResourceId' is specified, the associated resources of the
--- stack that the resource belongs to are returned.
+-- Returns AWS resource descriptions for running and deleted stacks. If
+-- 'StackName' is specified, all the associated resources that are part of
+-- the stack are returned. If 'PhysicalResourceId' is specified, the
+-- associated resources of the stack that the resource belongs to are
+-- returned.
 --
 -- Only the first 100 resources will be returned. If your stack has more
--- resources than this, you should use 'ListStackResources' instead. For deleted
--- stacks, 'DescribeStackResources' returns resource information for up to 90 days
--- after the stack has been deleted.
+-- resources than this, you should use 'ListStackResources' instead.
 --
--- You must specify either 'StackName' or 'PhysicalResourceId', but not both. In
--- addition, you can specify 'LogicalResourceId' to filter the returned result.
--- For more information about resources, the 'LogicalResourceId' and 'PhysicalResourceId', go to the <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide AWS CloudFormation User Guide>.
+-- For deleted stacks, 'DescribeStackResources' returns resource
+-- information for up to 90 days after the stack has been deleted.
 --
--- A 'ValidationError' is returned if you specify both 'StackName' and 'PhysicalResourceId' in the same request.
+-- You must specify either 'StackName' or 'PhysicalResourceId', but not
+-- both. In addition, you can specify 'LogicalResourceId' to filter the
+-- returned result. For more information about resources, the
+-- 'LogicalResourceId' and 'PhysicalResourceId', go to the
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide AWS CloudFormation User Guide>.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackResources.html>
+-- A 'ValidationError' is returned if you specify both 'StackName' and
+-- 'PhysicalResourceId' in the same request.
+--
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackResources.html AWS API Reference> for DescribeStackResources.
 module Network.AWS.CloudFormation.DescribeStackResources
     (
-    -- * Request
-      DescribeStackResources
-    -- ** Request constructor
-    , describeStackResources
-    -- ** Request lenses
+    -- * Creating a Request
+      describeStackResources
+    , DescribeStackResources
+    -- * Request Lenses
     , dsrLogicalResourceId
     , dsrPhysicalResourceId
     , dsrStackName
 
-    -- * Response
-    , DescribeStackResourcesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeStackResourcesResponse
-    -- ** Response lenses
-    , dsrrStackResources
+    , DescribeStackResourcesResponse
+    -- * Response Lenses
+    , drsStackResources
+    , drsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data DescribeStackResources = DescribeStackResources
-    { _dsrLogicalResourceId  :: Maybe Text
-    , _dsrPhysicalResourceId :: Maybe Text
-    , _dsrStackName          :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DescribeStackResources' constructor.
+-- | The input for DescribeStackResources action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeStackResources' smart constructor.
+data DescribeStackResources = DescribeStackResources'
+    { _dsrLogicalResourceId  :: !(Maybe Text)
+    , _dsrPhysicalResourceId :: !(Maybe Text)
+    , _dsrStackName          :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeStackResources' with the minimum fields required to make a request.
 --
--- * 'dsrLogicalResourceId' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dsrPhysicalResourceId' @::@ 'Maybe' 'Text'
+-- * 'dsrLogicalResourceId'
 --
--- * 'dsrStackName' @::@ 'Maybe' 'Text'
+-- * 'dsrPhysicalResourceId'
 --
-describeStackResources :: DescribeStackResources
-describeStackResources = DescribeStackResources
-    { _dsrStackName          = Nothing
-    , _dsrLogicalResourceId  = Nothing
+-- * 'dsrStackName'
+describeStackResources
+    :: DescribeStackResources
+describeStackResources =
+    DescribeStackResources'
+    { _dsrLogicalResourceId = Nothing
     , _dsrPhysicalResourceId = Nothing
+    , _dsrStackName = Nothing
     }
 
 -- | The logical name of the resource as specified in the template.
 --
 -- Default: There is no default value.
 dsrLogicalResourceId :: Lens' DescribeStackResources (Maybe Text)
-dsrLogicalResourceId =
-    lens _dsrLogicalResourceId (\s a -> s { _dsrLogicalResourceId = a })
+dsrLogicalResourceId = lens _dsrLogicalResourceId (\ s a -> s{_dsrLogicalResourceId = a});
 
--- | The name or unique identifier that corresponds to a physical instance ID of a
--- resource supported by AWS CloudFormation.
+-- | The name or unique identifier that corresponds to a physical instance ID
+-- of a resource supported by AWS CloudFormation.
 --
--- For example, for an Amazon Elastic Compute Cloud (EC2) instance, 'PhysicalResourceId' corresponds to the 'InstanceId'. You can pass the EC2 'InstanceId' to 'DescribeStackResources' to find which stack the instance belongs to and what other resources are
--- part of the stack.
+-- For example, for an Amazon Elastic Compute Cloud (EC2) instance,
+-- 'PhysicalResourceId' corresponds to the 'InstanceId'. You can pass the
+-- EC2 'InstanceId' to 'DescribeStackResources' to find which stack the
+-- instance belongs to and what other resources are part of the stack.
 --
--- Required: Conditional. If you do not specify 'PhysicalResourceId', you must
--- specify 'StackName'.
+-- Required: Conditional. If you do not specify 'PhysicalResourceId', you
+-- must specify 'StackName'.
 --
 -- Default: There is no default value.
 dsrPhysicalResourceId :: Lens' DescribeStackResources (Maybe Text)
-dsrPhysicalResourceId =
-    lens _dsrPhysicalResourceId (\s a -> s { _dsrPhysicalResourceId = a })
+dsrPhysicalResourceId = lens _dsrPhysicalResourceId (\ s a -> s{_dsrPhysicalResourceId = a});
 
--- | The name or the unique stack ID that is associated with the stack, which are
--- not always interchangeable:
+-- | The name or the unique stack ID that is associated with the stack, which
+-- are not always interchangeable:
 --
--- Running stacks: You can specify either the stack's name or its unique stack
--- ID. Deleted stacks: You must specify the unique stack ID.  Default: There is
--- no default value.
+-- -   Running stacks: You can specify either the stack\'s name or its
+--     unique stack ID.
+-- -   Deleted stacks: You must specify the unique stack ID.
 --
--- Required: Conditional. If you do not specify 'StackName', you must specify 'PhysicalResourceId'.
+-- Default: There is no default value.
+--
+-- Required: Conditional. If you do not specify 'StackName', you must
+-- specify 'PhysicalResourceId'.
 dsrStackName :: Lens' DescribeStackResources (Maybe Text)
-dsrStackName = lens _dsrStackName (\s a -> s { _dsrStackName = a })
+dsrStackName = lens _dsrStackName (\ s a -> s{_dsrStackName = a});
 
-newtype DescribeStackResourcesResponse = DescribeStackResourcesResponse
-    { _dsrrStackResources :: List "member" StackResource
-    } deriving (Eq, Read, Show, Monoid, Semigroup)
+instance AWSRequest DescribeStackResources where
+        type Sv DescribeStackResources = CloudFormation
+        type Rs DescribeStackResources =
+             DescribeStackResourcesResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "DescribeStackResourcesResult"
+              (\ s h x ->
+                 DescribeStackResourcesResponse' <$>
+                   (x .@? "StackResources" .!@ mempty >>=
+                      may (parseXMLList "member"))
+                     <*> (pure (fromEnum s)))
 
-instance GHC.Exts.IsList DescribeStackResourcesResponse where
-    type Item DescribeStackResourcesResponse = StackResource
+instance ToHeaders DescribeStackResources where
+        toHeaders = const mempty
 
-    fromList = DescribeStackResourcesResponse . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _dsrrStackResources
+instance ToPath DescribeStackResources where
+        toPath = const "/"
 
--- | 'DescribeStackResourcesResponse' constructor.
+instance ToQuery DescribeStackResources where
+        toQuery DescribeStackResources'{..}
+          = mconcat
+              ["Action" =:
+                 ("DescribeStackResources" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "LogicalResourceId" =: _dsrLogicalResourceId,
+               "PhysicalResourceId" =: _dsrPhysicalResourceId,
+               "StackName" =: _dsrStackName]
+
+-- | The output for a DescribeStackResources action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeStackResourcesResponse' smart constructor.
+data DescribeStackResourcesResponse = DescribeStackResourcesResponse'
+    { _drsStackResources :: !(Maybe [StackResource])
+    , _drsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeStackResourcesResponse' with the minimum fields required to make a request.
 --
--- * 'dsrrStackResources' @::@ ['StackResource']
+-- Use one of the following lenses to modify other fields as desired:
 --
-describeStackResourcesResponse :: DescribeStackResourcesResponse
-describeStackResourcesResponse = DescribeStackResourcesResponse
-    { _dsrrStackResources = mempty
+-- * 'drsStackResources'
+--
+-- * 'drsStatus'
+describeStackResourcesResponse
+    :: Int -- ^ 'drsStatus'
+    -> DescribeStackResourcesResponse
+describeStackResourcesResponse pStatus_ =
+    DescribeStackResourcesResponse'
+    { _drsStackResources = Nothing
+    , _drsStatus = pStatus_
     }
 
 -- | A list of 'StackResource' structures.
-dsrrStackResources :: Lens' DescribeStackResourcesResponse [StackResource]
-dsrrStackResources =
-    lens _dsrrStackResources (\s a -> s { _dsrrStackResources = a })
-        . _List
-
-instance ToPath DescribeStackResources where
-    toPath = const "/"
-
-instance ToQuery DescribeStackResources where
-    toQuery DescribeStackResources{..} = mconcat
-        [ "LogicalResourceId"  =? _dsrLogicalResourceId
-        , "PhysicalResourceId" =? _dsrPhysicalResourceId
-        , "StackName"          =? _dsrStackName
-        ]
-
-instance ToHeaders DescribeStackResources
-
-instance AWSRequest DescribeStackResources where
-    type Sv DescribeStackResources = CloudFormation
-    type Rs DescribeStackResources = DescribeStackResourcesResponse
-
-    request  = post "DescribeStackResources"
-    response = xmlResponse
+drsStackResources :: Lens' DescribeStackResourcesResponse [StackResource]
+drsStackResources = lens _drsStackResources (\ s a -> s{_drsStackResources = a}) . _Default . _Coerce;
 
-instance FromXML DescribeStackResourcesResponse where
-    parseXML = withElement "DescribeStackResourcesResult" $ \x -> DescribeStackResourcesResponse
-        <$> x .@? "StackResources" .!@ mempty
+-- | The response status code.
+drsStatus :: Lens' DescribeStackResourcesResponse Int
+drsStatus = lens _drsStatus (\ s a -> s{_drsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/DescribeStacks.hs b/gen/Network/AWS/CloudFormation/DescribeStacks.hs
--- a/gen/Network/AWS/CloudFormation/DescribeStacks.hs
+++ b/gen/Network/AWS/CloudFormation/DescribeStacks.hs
@@ -1,139 +1,164 @@
-{-# 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.CloudFormation.DescribeStacks
--- 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 the description for the specified stack; if no stack name was
+-- Returns the description for the specified stack; if no stack name was
 -- specified, then it returns the description for all the stacks created.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStacks.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStacks.html AWS API Reference> for DescribeStacks.
+--
+-- This operation returns paginated results.
 module Network.AWS.CloudFormation.DescribeStacks
     (
-    -- * Request
-      DescribeStacks
-    -- ** Request constructor
-    , describeStacks
-    -- ** Request lenses
-    , ds1NextToken
-    , ds1StackName
+    -- * Creating a Request
+      describeStacks
+    , DescribeStacks
+    -- * Request Lenses
+    , dNextToken
+    , dStackName
 
-    -- * Response
-    , DescribeStacksResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , describeStacksResponse
-    -- ** Response lenses
-    , dsrNextToken
-    , dsrStacks
+    , DescribeStacksResponse
+    -- * Response Lenses
+    , dsrsNextToken
+    , dsrsStacks
+    , dsrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data DescribeStacks = DescribeStacks
-    { _ds1NextToken :: Maybe Text
-    , _ds1StackName :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DescribeStacks' constructor.
+-- | The input for DescribeStacks action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'describeStacks' smart constructor.
+data DescribeStacks = DescribeStacks'
+    { _dNextToken :: !(Maybe Text)
+    , _dStackName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeStacks' with the minimum fields required to make a request.
 --
--- * 'ds1NextToken' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ds1StackName' @::@ 'Maybe' 'Text'
+-- * 'dNextToken'
 --
-describeStacks :: DescribeStacks
-describeStacks = DescribeStacks
-    { _ds1StackName = Nothing
-    , _ds1NextToken = Nothing
+-- * 'dStackName'
+describeStacks
+    :: DescribeStacks
+describeStacks =
+    DescribeStacks'
+    { _dNextToken = Nothing
+    , _dStackName = Nothing
     }
 
--- | String that identifies the start of the next list of stacks, if there is one.
-ds1NextToken :: Lens' DescribeStacks (Maybe Text)
-ds1NextToken = lens _ds1NextToken (\s a -> s { _ds1NextToken = a })
-
--- | The name or the unique stack ID that is associated with the stack, which are
--- not always interchangeable:
---
--- Running stacks: You can specify either the stack's name or its unique stack
--- ID. Deleted stacks: You must specify the unique stack ID.  Default: There is
--- no default value.
-ds1StackName :: Lens' DescribeStacks (Maybe Text)
-ds1StackName = lens _ds1StackName (\s a -> s { _ds1StackName = a })
-
-data DescribeStacksResponse = DescribeStacksResponse
-    { _dsrNextToken :: Maybe Text
-    , _dsrStacks    :: List "member" Stack
-    } deriving (Eq, Read, Show)
+-- | String that identifies the start of the next list of stacks, if there is
+-- one.
+dNextToken :: Lens' DescribeStacks (Maybe Text)
+dNextToken = lens _dNextToken (\ s a -> s{_dNextToken = a});
 
--- | 'DescribeStacksResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dsrNextToken' @::@ 'Maybe' 'Text'
+-- | The name or the unique stack ID that is associated with the stack, which
+-- are not always interchangeable:
 --
--- * 'dsrStacks' @::@ ['Stack']
+-- -   Running stacks: You can specify either the stack\'s name or its
+--     unique stack ID.
+-- -   Deleted stacks: You must specify the unique stack ID.
 --
-describeStacksResponse :: DescribeStacksResponse
-describeStacksResponse = DescribeStacksResponse
-    { _dsrStacks    = mempty
-    , _dsrNextToken = Nothing
-    }
+-- Default: There is no default value.
+dStackName :: Lens' DescribeStacks (Maybe Text)
+dStackName = lens _dStackName (\ s a -> s{_dStackName = a});
 
--- | String that identifies the start of the next list of stacks, if there is one.
-dsrNextToken :: Lens' DescribeStacksResponse (Maybe Text)
-dsrNextToken = lens _dsrNextToken (\s a -> s { _dsrNextToken = a })
+instance AWSPager DescribeStacks where
+        page rq rs
+          | stop (rs ^. dsrsNextToken) = Nothing
+          | stop (rs ^. dsrsStacks) = Nothing
+          | otherwise =
+            Just $ rq & dNextToken .~ rs ^. dsrsNextToken
 
--- | A list of stack structures.
-dsrStacks :: Lens' DescribeStacksResponse [Stack]
-dsrStacks = lens _dsrStacks (\s a -> s { _dsrStacks = a }) . _List
+instance AWSRequest DescribeStacks where
+        type Sv DescribeStacks = CloudFormation
+        type Rs DescribeStacks = DescribeStacksResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "DescribeStacksResult"
+              (\ s h x ->
+                 DescribeStacksResponse' <$>
+                   (x .@? "NextToken") <*>
+                     (x .@? "Stacks" .!@ mempty >>=
+                        may (parseXMLList "member"))
+                     <*> (pure (fromEnum s)))
 
+instance ToHeaders DescribeStacks where
+        toHeaders = const mempty
+
 instance ToPath DescribeStacks where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery DescribeStacks where
-    toQuery DescribeStacks{..} = mconcat
-        [ "NextToken" =? _ds1NextToken
-        , "StackName" =? _ds1StackName
-        ]
+        toQuery DescribeStacks'{..}
+          = mconcat
+              ["Action" =: ("DescribeStacks" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "NextToken" =: _dNextToken,
+               "StackName" =: _dStackName]
 
-instance ToHeaders DescribeStacks
+-- | The output for a DescribeStacks action.
+--
+-- /See:/ 'describeStacksResponse' smart constructor.
+data DescribeStacksResponse = DescribeStacksResponse'
+    { _dsrsNextToken :: !(Maybe Text)
+    , _dsrsStacks    :: !(Maybe [Stack])
+    , _dsrsStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest DescribeStacks where
-    type Sv DescribeStacks = CloudFormation
-    type Rs DescribeStacks = DescribeStacksResponse
+-- | Creates a value of 'DescribeStacksResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrsNextToken'
+--
+-- * 'dsrsStacks'
+--
+-- * 'dsrsStatus'
+describeStacksResponse
+    :: Int -- ^ 'dsrsStatus'
+    -> DescribeStacksResponse
+describeStacksResponse pStatus_ =
+    DescribeStacksResponse'
+    { _dsrsNextToken = Nothing
+    , _dsrsStacks = Nothing
+    , _dsrsStatus = pStatus_
+    }
 
-    request  = post "DescribeStacks"
-    response = xmlResponse
+-- | String that identifies the start of the next list of stacks, if there is
+-- one.
+dsrsNextToken :: Lens' DescribeStacksResponse (Maybe Text)
+dsrsNextToken = lens _dsrsNextToken (\ s a -> s{_dsrsNextToken = a});
 
-instance FromXML DescribeStacksResponse where
-    parseXML = withElement "DescribeStacksResult" $ \x -> DescribeStacksResponse
-        <$> x .@? "NextToken"
-        <*> x .@? "Stacks" .!@ mempty
+-- | A list of stack structures.
+dsrsStacks :: Lens' DescribeStacksResponse [Stack]
+dsrsStacks = lens _dsrsStacks (\ s a -> s{_dsrsStacks = a}) . _Default . _Coerce;
 
-instance AWSPager DescribeStacks where
-    page rq rs
-        | stop (rs ^. dsrNextToken) = Nothing
-        | otherwise = (\x -> rq & ds1NextToken ?~ x)
-            <$> (rs ^. dsrNextToken)
+-- | The response status code.
+dsrsStatus :: Lens' DescribeStacksResponse Int
+dsrsStatus = lens _dsrsStatus (\ s a -> s{_dsrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/EstimateTemplateCost.hs b/gen/Network/AWS/CloudFormation/EstimateTemplateCost.hs
--- a/gen/Network/AWS/CloudFormation/EstimateTemplateCost.hs
+++ b/gen/Network/AWS/CloudFormation/EstimateTemplateCost.hs
@@ -1,140 +1,158 @@
-{-# 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.CloudFormation.EstimateTemplateCost
--- 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 the estimated monthly cost of a template. The return value is an AWS
--- Simple Monthly Calculator URL with a query string that describes the
+-- Returns the estimated monthly cost of a template. The return value is an
+-- AWS Simple Monthly Calculator URL with a query string that describes the
 -- resources required to run the template.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_EstimateTemplateCost.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_EstimateTemplateCost.html AWS API Reference> for EstimateTemplateCost.
 module Network.AWS.CloudFormation.EstimateTemplateCost
     (
-    -- * Request
-      EstimateTemplateCost
-    -- ** Request constructor
-    , estimateTemplateCost
-    -- ** Request lenses
+    -- * Creating a Request
+      estimateTemplateCost
+    , EstimateTemplateCost
+    -- * Request Lenses
     , etcParameters
     , etcTemplateBody
     , etcTemplateURL
 
-    -- * Response
-    , EstimateTemplateCostResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , estimateTemplateCostResponse
-    -- ** Response lenses
-    , etcrUrl
+    , EstimateTemplateCostResponse
+    -- * Response Lenses
+    , etcrsURL
+    , etcrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-data EstimateTemplateCost = EstimateTemplateCost
-    { _etcParameters   :: List "member" Parameter
-    , _etcTemplateBody :: Maybe Text
-    , _etcTemplateURL  :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | /See:/ 'estimateTemplateCost' smart constructor.
+data EstimateTemplateCost = EstimateTemplateCost'
+    { _etcParameters   :: !(Maybe [Parameter])
+    , _etcTemplateBody :: !(Maybe Text)
+    , _etcTemplateURL  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'EstimateTemplateCost' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'EstimateTemplateCost' with the minimum fields required to make a request.
 --
--- * 'etcParameters' @::@ ['Parameter']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'etcTemplateBody' @::@ 'Maybe' 'Text'
+-- * 'etcParameters'
 --
--- * 'etcTemplateURL' @::@ 'Maybe' 'Text'
+-- * 'etcTemplateBody'
 --
-estimateTemplateCost :: EstimateTemplateCost
-estimateTemplateCost = EstimateTemplateCost
-    { _etcTemplateBody = Nothing
-    , _etcTemplateURL  = Nothing
-    , _etcParameters   = mempty
+-- * 'etcTemplateURL'
+estimateTemplateCost
+    :: EstimateTemplateCost
+estimateTemplateCost =
+    EstimateTemplateCost'
+    { _etcParameters = Nothing
+    , _etcTemplateBody = Nothing
+    , _etcTemplateURL = Nothing
     }
 
 -- | A list of 'Parameter' structures that specify input parameters.
 etcParameters :: Lens' EstimateTemplateCost [Parameter]
-etcParameters = lens _etcParameters (\s a -> s { _etcParameters = a }) . _List
+etcParameters = lens _etcParameters (\ s a -> s{_etcParameters = a}) . _Default . _Coerce;
 
--- | Structure containing the template body with a minimum length of 1 byte and a
--- maximum length of 51,200 bytes. (For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- | Structure containing the template body with a minimum length of 1 byte
+-- and a maximum length of 51,200 bytes. (For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
 -- in the AWS CloudFormation User Guide.)
 --
--- Conditional: You must pass 'TemplateBody' or 'TemplateURL'. If both are passed,
--- only 'TemplateBody' is used.
+-- Conditional: You must pass 'TemplateBody' or 'TemplateURL'. If both are
+-- passed, only 'TemplateBody' is used.
 etcTemplateBody :: Lens' EstimateTemplateCost (Maybe Text)
-etcTemplateBody = lens _etcTemplateBody (\s a -> s { _etcTemplateBody = a })
+etcTemplateBody = lens _etcTemplateBody (\ s a -> s{_etcTemplateBody = a});
 
 -- | Location of file containing the template body. The URL must point to a
--- template located in an S3 bucket in the same region as the stack. For more
--- information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy> in the AWS CloudFormation User Guide.
+-- template located in an S3 bucket in the same region as the stack. For
+-- more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- in the AWS CloudFormation User Guide.
 --
--- Conditional: You must pass 'TemplateURL' or 'TemplateBody'. If both are passed,
--- only 'TemplateBody' is used.
+-- Conditional: You must pass 'TemplateURL' or 'TemplateBody'. If both are
+-- passed, only 'TemplateBody' is used.
 etcTemplateURL :: Lens' EstimateTemplateCost (Maybe Text)
-etcTemplateURL = lens _etcTemplateURL (\s a -> s { _etcTemplateURL = a })
-
-newtype EstimateTemplateCostResponse = EstimateTemplateCostResponse
-    { _etcrUrl :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+etcTemplateURL = lens _etcTemplateURL (\ s a -> s{_etcTemplateURL = a});
 
--- | 'EstimateTemplateCostResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'etcrUrl' @::@ 'Maybe' 'Text'
---
-estimateTemplateCostResponse :: EstimateTemplateCostResponse
-estimateTemplateCostResponse = EstimateTemplateCostResponse
-    { _etcrUrl = Nothing
-    }
+instance AWSRequest EstimateTemplateCost where
+        type Sv EstimateTemplateCost = CloudFormation
+        type Rs EstimateTemplateCost =
+             EstimateTemplateCostResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "EstimateTemplateCostResult"
+              (\ s h x ->
+                 EstimateTemplateCostResponse' <$>
+                   (x .@? "Url") <*> (pure (fromEnum s)))
 
--- | An AWS Simple Monthly Calculator URL with a query string that describes the
--- resources required to run the template.
-etcrUrl :: Lens' EstimateTemplateCostResponse (Maybe Text)
-etcrUrl = lens _etcrUrl (\s a -> s { _etcrUrl = a })
+instance ToHeaders EstimateTemplateCost where
+        toHeaders = const mempty
 
 instance ToPath EstimateTemplateCost where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery EstimateTemplateCost where
-    toQuery EstimateTemplateCost{..} = mconcat
-        [ "Parameters"   =? _etcParameters
-        , "TemplateBody" =? _etcTemplateBody
-        , "TemplateURL"  =? _etcTemplateURL
-        ]
+        toQuery EstimateTemplateCost'{..}
+          = mconcat
+              ["Action" =: ("EstimateTemplateCost" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "Parameters" =:
+                 toQuery (toQueryList "member" <$> _etcParameters),
+               "TemplateBody" =: _etcTemplateBody,
+               "TemplateURL" =: _etcTemplateURL]
 
-instance ToHeaders EstimateTemplateCost
+-- | The output for a EstimateTemplateCost action.
+--
+-- /See:/ 'estimateTemplateCostResponse' smart constructor.
+data EstimateTemplateCostResponse = EstimateTemplateCostResponse'
+    { _etcrsURL    :: !(Maybe Text)
+    , _etcrsStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest EstimateTemplateCost where
-    type Sv EstimateTemplateCost = CloudFormation
-    type Rs EstimateTemplateCost = EstimateTemplateCostResponse
+-- | Creates a value of 'EstimateTemplateCostResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etcrsURL'
+--
+-- * 'etcrsStatus'
+estimateTemplateCostResponse
+    :: Int -- ^ 'etcrsStatus'
+    -> EstimateTemplateCostResponse
+estimateTemplateCostResponse pStatus_ =
+    EstimateTemplateCostResponse'
+    { _etcrsURL = Nothing
+    , _etcrsStatus = pStatus_
+    }
 
-    request  = post "EstimateTemplateCost"
-    response = xmlResponse
+-- | An AWS Simple Monthly Calculator URL with a query string that describes
+-- the resources required to run the template.
+etcrsURL :: Lens' EstimateTemplateCostResponse (Maybe Text)
+etcrsURL = lens _etcrsURL (\ s a -> s{_etcrsURL = a});
 
-instance FromXML EstimateTemplateCostResponse where
-    parseXML = withElement "EstimateTemplateCostResult" $ \x -> EstimateTemplateCostResponse
-        <$> x .@? "Url"
+-- | The response status code.
+etcrsStatus :: Lens' EstimateTemplateCostResponse Int
+etcrsStatus = lens _etcrsStatus (\ s a -> s{_etcrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/GetStackPolicy.hs b/gen/Network/AWS/CloudFormation/GetStackPolicy.hs
--- a/gen/Network/AWS/CloudFormation/GetStackPolicy.hs
+++ b/gen/Network/AWS/CloudFormation/GetStackPolicy.hs
@@ -1,111 +1,127 @@
-{-# 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.CloudFormation.GetStackPolicy
--- 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 the stack policy for a specified stack. If a stack doesn't have a
--- policy, a null value is returned.
+-- Returns the stack policy for a specified stack. If a stack doesn\'t have
+-- a policy, a null value is returned.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetStackPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetStackPolicy.html AWS API Reference> for GetStackPolicy.
 module Network.AWS.CloudFormation.GetStackPolicy
     (
-    -- * Request
-      GetStackPolicy
-    -- ** Request constructor
-    , getStackPolicy
-    -- ** Request lenses
+    -- * Creating a Request
+      getStackPolicy
+    , GetStackPolicy
+    -- * Request Lenses
     , gspStackName
 
-    -- * Response
-    , GetStackPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getStackPolicyResponse
-    -- ** Response lenses
-    , gsprStackPolicyBody
+    , GetStackPolicyResponse
+    -- * Response Lenses
+    , gsprsStackPolicyBody
+    , gsprsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetStackPolicy = GetStackPolicy
+-- | The input for the GetStackPolicy action.
+--
+-- /See:/ 'getStackPolicy' smart constructor.
+newtype GetStackPolicy = GetStackPolicy'
     { _gspStackName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetStackPolicy' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetStackPolicy' with the minimum fields required to make a request.
 --
--- * 'gspStackName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getStackPolicy :: Text -- ^ 'gspStackName'
-               -> GetStackPolicy
-getStackPolicy p1 = GetStackPolicy
-    { _gspStackName = p1
+-- * 'gspStackName'
+getStackPolicy
+    :: Text -- ^ 'gspStackName'
+    -> GetStackPolicy
+getStackPolicy pStackName_ =
+    GetStackPolicy'
+    { _gspStackName = pStackName_
     }
 
--- | The name or unique stack ID that is associated with the stack whose policy
--- you want to get.
+-- | The name or unique stack ID that is associated with the stack whose
+-- policy you want to get.
 gspStackName :: Lens' GetStackPolicy Text
-gspStackName = lens _gspStackName (\s a -> s { _gspStackName = a })
-
-newtype GetStackPolicyResponse = GetStackPolicyResponse
-    { _gsprStackPolicyBody :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+gspStackName = lens _gspStackName (\ s a -> s{_gspStackName = a});
 
--- | 'GetStackPolicyResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gsprStackPolicyBody' @::@ 'Maybe' 'Text'
---
-getStackPolicyResponse :: GetStackPolicyResponse
-getStackPolicyResponse = GetStackPolicyResponse
-    { _gsprStackPolicyBody = Nothing
-    }
+instance AWSRequest GetStackPolicy where
+        type Sv GetStackPolicy = CloudFormation
+        type Rs GetStackPolicy = GetStackPolicyResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "GetStackPolicyResult"
+              (\ s h x ->
+                 GetStackPolicyResponse' <$>
+                   (x .@? "StackPolicyBody") <*> (pure (fromEnum s)))
 
--- | Structure containing the stack policy body. (For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html Prevent Updates to Stack Resources> in the AWS CloudFormation User Guide.)
-gsprStackPolicyBody :: Lens' GetStackPolicyResponse (Maybe Text)
-gsprStackPolicyBody =
-    lens _gsprStackPolicyBody (\s a -> s { _gsprStackPolicyBody = a })
+instance ToHeaders GetStackPolicy where
+        toHeaders = const mempty
 
 instance ToPath GetStackPolicy where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GetStackPolicy where
-    toQuery GetStackPolicy{..} = mconcat
-        [ "StackName" =? _gspStackName
-        ]
+        toQuery GetStackPolicy'{..}
+          = mconcat
+              ["Action" =: ("GetStackPolicy" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "StackName" =: _gspStackName]
 
-instance ToHeaders GetStackPolicy
+-- | The output for the GetStackPolicy action.
+--
+-- /See:/ 'getStackPolicyResponse' smart constructor.
+data GetStackPolicyResponse = GetStackPolicyResponse'
+    { _gsprsStackPolicyBody :: !(Maybe Text)
+    , _gsprsStatus          :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetStackPolicy where
-    type Sv GetStackPolicy = CloudFormation
-    type Rs GetStackPolicy = GetStackPolicyResponse
+-- | Creates a value of 'GetStackPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsprsStackPolicyBody'
+--
+-- * 'gsprsStatus'
+getStackPolicyResponse
+    :: Int -- ^ 'gsprsStatus'
+    -> GetStackPolicyResponse
+getStackPolicyResponse pStatus_ =
+    GetStackPolicyResponse'
+    { _gsprsStackPolicyBody = Nothing
+    , _gsprsStatus = pStatus_
+    }
 
-    request  = post "GetStackPolicy"
-    response = xmlResponse
+-- | Structure containing the stack policy body. (For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html Prevent Updates to Stack Resources>
+-- in the AWS CloudFormation User Guide.)
+gsprsStackPolicyBody :: Lens' GetStackPolicyResponse (Maybe Text)
+gsprsStackPolicyBody = lens _gsprsStackPolicyBody (\ s a -> s{_gsprsStackPolicyBody = a});
 
-instance FromXML GetStackPolicyResponse where
-    parseXML = withElement "GetStackPolicyResult" $ \x -> GetStackPolicyResponse
-        <$> x .@? "StackPolicyBody"
+-- | The response status code.
+gsprsStatus :: Lens' GetStackPolicyResponse Int
+gsprsStatus = lens _gsprsStatus (\ s a -> s{_gsprsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/GetTemplate.hs b/gen/Network/AWS/CloudFormation/GetTemplate.hs
--- a/gen/Network/AWS/CloudFormation/GetTemplate.hs
+++ b/gen/Network/AWS/CloudFormation/GetTemplate.hs
@@ -1,119 +1,138 @@
-{-# 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.CloudFormation.GetTemplate
--- 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 the template body for a specified stack. You can get the template for
--- running or deleted stacks.
+-- Returns the template body for a specified stack. You can get the
+-- template for running or deleted stacks.
 --
--- For deleted stacks, GetTemplate returns the template for up to 90 days after
--- the stack has been deleted.
+-- For deleted stacks, GetTemplate returns the template for up to 90 days
+-- after the stack has been deleted.
 --
 -- If the template does not exist, a 'ValidationError' is returned.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetTemplate.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetTemplate.html AWS API Reference> for GetTemplate.
 module Network.AWS.CloudFormation.GetTemplate
     (
-    -- * Request
-      GetTemplate
-    -- ** Request constructor
-    , getTemplate
-    -- ** Request lenses
+    -- * Creating a Request
+      getTemplate
+    , GetTemplate
+    -- * Request Lenses
     , gtStackName
 
-    -- * Response
-    , GetTemplateResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getTemplateResponse
-    -- ** Response lenses
-    , gtrTemplateBody
+    , GetTemplateResponse
+    -- * Response Lenses
+    , gtrsTemplateBody
+    , gtrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetTemplate = GetTemplate
+-- | The input for a GetTemplate action.
+--
+-- /See:/ 'getTemplate' smart constructor.
+newtype GetTemplate = GetTemplate'
     { _gtStackName :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetTemplate' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetTemplate' with the minimum fields required to make a request.
 --
--- * 'gtStackName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getTemplate :: Text -- ^ 'gtStackName'
-            -> GetTemplate
-getTemplate p1 = GetTemplate
-    { _gtStackName = p1
+-- * 'gtStackName'
+getTemplate
+    :: Text -- ^ 'gtStackName'
+    -> GetTemplate
+getTemplate pStackName_ =
+    GetTemplate'
+    { _gtStackName = pStackName_
     }
 
--- | The name or the unique stack ID that is associated with the stack, which are
--- not always interchangeable:
+-- | The name or the unique stack ID that is associated with the stack, which
+-- are not always interchangeable:
 --
--- Running stacks: You can specify either the stack's name or its unique stack
--- ID. Deleted stacks: You must specify the unique stack ID.  Default: There is
--- no default value.
+-- -   Running stacks: You can specify either the stack\'s name or its
+--     unique stack ID.
+-- -   Deleted stacks: You must specify the unique stack ID.
+--
+-- Default: There is no default value.
 gtStackName :: Lens' GetTemplate Text
-gtStackName = lens _gtStackName (\s a -> s { _gtStackName = a })
-
-newtype GetTemplateResponse = GetTemplateResponse
-    { _gtrTemplateBody :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+gtStackName = lens _gtStackName (\ s a -> s{_gtStackName = a});
 
--- | 'GetTemplateResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gtrTemplateBody' @::@ 'Maybe' 'Text'
---
-getTemplateResponse :: GetTemplateResponse
-getTemplateResponse = GetTemplateResponse
-    { _gtrTemplateBody = Nothing
-    }
+instance AWSRequest GetTemplate where
+        type Sv GetTemplate = CloudFormation
+        type Rs GetTemplate = GetTemplateResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "GetTemplateResult"
+              (\ s h x ->
+                 GetTemplateResponse' <$>
+                   (x .@? "TemplateBody") <*> (pure (fromEnum s)))
 
--- | Structure containing the template body. (For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html TemplateAnatomy> in the AWS CloudFormation User Guide.)
-gtrTemplateBody :: Lens' GetTemplateResponse (Maybe Text)
-gtrTemplateBody = lens _gtrTemplateBody (\s a -> s { _gtrTemplateBody = a })
+instance ToHeaders GetTemplate where
+        toHeaders = const mempty
 
 instance ToPath GetTemplate where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery GetTemplate where
-    toQuery GetTemplate{..} = mconcat
-        [ "StackName" =? _gtStackName
-        ]
+        toQuery GetTemplate'{..}
+          = mconcat
+              ["Action" =: ("GetTemplate" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "StackName" =: _gtStackName]
 
-instance ToHeaders GetTemplate
+-- | The output for GetTemplate action.
+--
+-- /See:/ 'getTemplateResponse' smart constructor.
+data GetTemplateResponse = GetTemplateResponse'
+    { _gtrsTemplateBody :: !(Maybe Text)
+    , _gtrsStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetTemplate where
-    type Sv GetTemplate = CloudFormation
-    type Rs GetTemplate = GetTemplateResponse
+-- | Creates a value of 'GetTemplateResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtrsTemplateBody'
+--
+-- * 'gtrsStatus'
+getTemplateResponse
+    :: Int -- ^ 'gtrsStatus'
+    -> GetTemplateResponse
+getTemplateResponse pStatus_ =
+    GetTemplateResponse'
+    { _gtrsTemplateBody = Nothing
+    , _gtrsStatus = pStatus_
+    }
 
-    request  = post "GetTemplate"
-    response = xmlResponse
+-- | Structure containing the template body. (For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- in the AWS CloudFormation User Guide.)
+gtrsTemplateBody :: Lens' GetTemplateResponse (Maybe Text)
+gtrsTemplateBody = lens _gtrsTemplateBody (\ s a -> s{_gtrsTemplateBody = a});
 
-instance FromXML GetTemplateResponse where
-    parseXML = withElement "GetTemplateResult" $ \x -> GetTemplateResponse
-        <$> x .@? "TemplateBody"
+-- | The response status code.
+gtrsStatus :: Lens' GetTemplateResponse Int
+gtrsStatus = lens _gtrsStatus (\ s a -> s{_gtrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/GetTemplateSummary.hs b/gen/Network/AWS/CloudFormation/GetTemplateSummary.hs
--- a/gen/Network/AWS/CloudFormation/GetTemplateSummary.hs
+++ b/gen/Network/AWS/CloudFormation/GetTemplateSummary.hs
@@ -1,210 +1,235 @@
-{-# 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.CloudFormation.GetTemplateSummary
--- 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 information about a new or existing template. The 'GetTemplateSummary'
--- action is useful for viewing parameter information, such as default parameter
--- values and parameter types, before you create or update a stack.
+-- Returns information about a new or existing template. The
+-- 'GetTemplateSummary' action is useful for viewing parameter information,
+-- such as default parameter values and parameter types, before you create
+-- or update a stack.
 --
--- You can use the 'GetTemplateSummary' action when you submit a template, or you
--- can get template information for a running or deleted stack.
+-- You can use the 'GetTemplateSummary' action when you submit a template,
+-- or you can get template information for a running or deleted stack.
 --
--- For deleted stacks, 'GetTemplateSummary' returns the template information for
--- up to 90 days after the stack has been deleted. If the template does not
--- exist, a 'ValidationError' is returned.
+-- For deleted stacks, 'GetTemplateSummary' returns the template
+-- information for up to 90 days after the stack has been deleted. If the
+-- template does not exist, a 'ValidationError' is returned.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetTemplateSummary.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_GetTemplateSummary.html AWS API Reference> for GetTemplateSummary.
 module Network.AWS.CloudFormation.GetTemplateSummary
     (
-    -- * Request
-      GetTemplateSummary
-    -- ** Request constructor
-    , getTemplateSummary
-    -- ** Request lenses
-    , gtsStackName
+    -- * Creating a Request
+      getTemplateSummary
+    , GetTemplateSummary
+    -- * Request Lenses
     , gtsTemplateBody
     , gtsTemplateURL
+    , gtsStackName
 
-    -- * Response
-    , GetTemplateSummaryResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getTemplateSummaryResponse
-    -- ** Response lenses
-    , gtsrCapabilities
-    , gtsrCapabilitiesReason
-    , gtsrDescription
-    , gtsrMetadata
-    , gtsrParameters
-    , gtsrVersion
+    , GetTemplateSummaryResponse
+    -- * Response Lenses
+    , gtsrsVersion
+    , gtsrsParameters
+    , gtsrsCapabilitiesReason
+    , gtsrsMetadata
+    , gtsrsCapabilities
+    , gtsrsDescription
+    , gtsrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data GetTemplateSummary = GetTemplateSummary
-    { _gtsStackName    :: Maybe Text
-    , _gtsTemplateBody :: Maybe Text
-    , _gtsTemplateURL  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'GetTemplateSummary' constructor.
+-- | The input for the GetTemplateSummary action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getTemplateSummary' smart constructor.
+data GetTemplateSummary = GetTemplateSummary'
+    { _gtsTemplateBody :: !(Maybe Text)
+    , _gtsTemplateURL  :: !(Maybe Text)
+    , _gtsStackName    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTemplateSummary' with the minimum fields required to make a request.
 --
--- * 'gtsStackName' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gtsTemplateBody' @::@ 'Maybe' 'Text'
+-- * 'gtsTemplateBody'
 --
--- * 'gtsTemplateURL' @::@ 'Maybe' 'Text'
+-- * 'gtsTemplateURL'
 --
-getTemplateSummary :: GetTemplateSummary
-getTemplateSummary = GetTemplateSummary
+-- * 'gtsStackName'
+getTemplateSummary
+    :: GetTemplateSummary
+getTemplateSummary =
+    GetTemplateSummary'
     { _gtsTemplateBody = Nothing
-    , _gtsTemplateURL  = Nothing
-    , _gtsStackName    = Nothing
+    , _gtsTemplateURL = Nothing
+    , _gtsStackName = Nothing
     }
 
--- | The name or the stack ID that is associated with the stack, which are not
--- always interchangeable. For running stacks, you can specify either the
--- stack's name or its unique stack ID. For deleted stack, you must specify the
--- unique stack ID.
---
--- Conditional: You must specify only one of the following parameters: 'StackName'
--- , 'TemplateBody', or 'TemplateURL'.
-gtsStackName :: Lens' GetTemplateSummary (Maybe Text)
-gtsStackName = lens _gtsStackName (\s a -> s { _gtsStackName = a })
-
--- | Structure containing the template body with a minimum length of 1 byte and a
--- maximum length of 51,200 bytes. For more information about templates, see <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy> in the AWS CloudFormation User Guide.
+-- | Structure containing the template body with a minimum length of 1 byte
+-- and a maximum length of 51,200 bytes. For more information about
+-- templates, see
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- in the AWS CloudFormation User Guide.
 --
--- Conditional: You must specify only one of the following parameters: 'StackName'
--- , 'TemplateBody', or 'TemplateURL'.
+-- Conditional: You must specify only one of the following parameters:
+-- 'StackName', 'TemplateBody', or 'TemplateURL'.
 gtsTemplateBody :: Lens' GetTemplateSummary (Maybe Text)
-gtsTemplateBody = lens _gtsTemplateBody (\s a -> s { _gtsTemplateBody = a })
+gtsTemplateBody = lens _gtsTemplateBody (\ s a -> s{_gtsTemplateBody = a});
 
 -- | Location of file containing the template body. The URL must point to a
--- template (max size: 460,800 bytes) located in an Amazon S3 bucket. For more
--- information about templates, see <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy> in the AWS CloudFormation
--- User Guide.
+-- template (max size: 460,800 bytes) located in an Amazon S3 bucket. For
+-- more information about templates, see
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- in the AWS CloudFormation User Guide.
 --
--- Conditional: You must specify only one of the following parameters: 'StackName'
--- , 'TemplateBody', or 'TemplateURL'.
+-- Conditional: You must specify only one of the following parameters:
+-- 'StackName', 'TemplateBody', or 'TemplateURL'.
 gtsTemplateURL :: Lens' GetTemplateSummary (Maybe Text)
-gtsTemplateURL = lens _gtsTemplateURL (\s a -> s { _gtsTemplateURL = a })
+gtsTemplateURL = lens _gtsTemplateURL (\ s a -> s{_gtsTemplateURL = a});
 
-data GetTemplateSummaryResponse = GetTemplateSummaryResponse
-    { _gtsrCapabilities       :: List "member" Capability
-    , _gtsrCapabilitiesReason :: Maybe Text
-    , _gtsrDescription        :: Maybe Text
-    , _gtsrMetadata           :: Maybe Text
-    , _gtsrParameters         :: List "member" ParameterDeclaration
-    , _gtsrVersion            :: Maybe Text
-    } deriving (Eq, Read, Show)
+-- | The name or the stack ID that is associated with the stack, which are
+-- not always interchangeable. For running stacks, you can specify either
+-- the stack\'s name or its unique stack ID. For deleted stack, you must
+-- specify the unique stack ID.
+--
+-- Conditional: You must specify only one of the following parameters:
+-- 'StackName', 'TemplateBody', or 'TemplateURL'.
+gtsStackName :: Lens' GetTemplateSummary (Maybe Text)
+gtsStackName = lens _gtsStackName (\ s a -> s{_gtsStackName = a});
 
--- | 'GetTemplateSummaryResponse' constructor.
+instance AWSRequest GetTemplateSummary where
+        type Sv GetTemplateSummary = CloudFormation
+        type Rs GetTemplateSummary =
+             GetTemplateSummaryResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "GetTemplateSummaryResult"
+              (\ s h x ->
+                 GetTemplateSummaryResponse' <$>
+                   (x .@? "Version") <*>
+                     (x .@? "Parameters" .!@ mempty >>=
+                        may (parseXMLList "member"))
+                     <*> (x .@? "CapabilitiesReason")
+                     <*> (x .@? "Metadata")
+                     <*>
+                     (x .@? "Capabilities" .!@ mempty >>=
+                        may (parseXMLList "member"))
+                     <*> (x .@? "Description")
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders GetTemplateSummary where
+        toHeaders = const mempty
+
+instance ToPath GetTemplateSummary where
+        toPath = const "/"
+
+instance ToQuery GetTemplateSummary where
+        toQuery GetTemplateSummary'{..}
+          = mconcat
+              ["Action" =: ("GetTemplateSummary" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "TemplateBody" =: _gtsTemplateBody,
+               "TemplateURL" =: _gtsTemplateURL,
+               "StackName" =: _gtsStackName]
+
+-- | The output for the GetTemplateSummary action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getTemplateSummaryResponse' smart constructor.
+data GetTemplateSummaryResponse = GetTemplateSummaryResponse'
+    { _gtsrsVersion            :: !(Maybe Text)
+    , _gtsrsParameters         :: !(Maybe [ParameterDeclaration])
+    , _gtsrsCapabilitiesReason :: !(Maybe Text)
+    , _gtsrsMetadata           :: !(Maybe Text)
+    , _gtsrsCapabilities       :: !(Maybe [Capability])
+    , _gtsrsDescription        :: !(Maybe Text)
+    , _gtsrsStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetTemplateSummaryResponse' with the minimum fields required to make a request.
 --
--- * 'gtsrCapabilities' @::@ ['Capability']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gtsrCapabilitiesReason' @::@ 'Maybe' 'Text'
+-- * 'gtsrsVersion'
 --
--- * 'gtsrDescription' @::@ 'Maybe' 'Text'
+-- * 'gtsrsParameters'
 --
--- * 'gtsrMetadata' @::@ 'Maybe' 'Text'
+-- * 'gtsrsCapabilitiesReason'
 --
--- * 'gtsrParameters' @::@ ['ParameterDeclaration']
+-- * 'gtsrsMetadata'
 --
--- * 'gtsrVersion' @::@ 'Maybe' 'Text'
+-- * 'gtsrsCapabilities'
 --
-getTemplateSummaryResponse :: GetTemplateSummaryResponse
-getTemplateSummaryResponse = GetTemplateSummaryResponse
-    { _gtsrParameters         = mempty
-    , _gtsrDescription        = Nothing
-    , _gtsrCapabilities       = mempty
-    , _gtsrCapabilitiesReason = Nothing
-    , _gtsrVersion            = Nothing
-    , _gtsrMetadata           = Nothing
+-- * 'gtsrsDescription'
+--
+-- * 'gtsrsStatus'
+getTemplateSummaryResponse
+    :: Int -- ^ 'gtsrsStatus'
+    -> GetTemplateSummaryResponse
+getTemplateSummaryResponse pStatus_ =
+    GetTemplateSummaryResponse'
+    { _gtsrsVersion = Nothing
+    , _gtsrsParameters = Nothing
+    , _gtsrsCapabilitiesReason = Nothing
+    , _gtsrsMetadata = Nothing
+    , _gtsrsCapabilities = Nothing
+    , _gtsrsDescription = Nothing
+    , _gtsrsStatus = pStatus_
     }
 
--- | The capabilities found within the template. Currently, AWS CloudFormation
--- supports only the CAPABILITY_IAM capability. If your template contains IAM
--- resources, you must specify the CAPABILITY_IAM value for this parameter when
--- you use the 'CreateStack' or 'UpdateStack' actions with your template; otherwise,
--- those actions return an InsufficientCapabilities error.
-gtsrCapabilities :: Lens' GetTemplateSummaryResponse [Capability]
-gtsrCapabilities = lens _gtsrCapabilities (\s a -> s { _gtsrCapabilities = a }) . _List
+-- | The AWS template format version, which identifies the capabilities of
+-- the template.
+gtsrsVersion :: Lens' GetTemplateSummaryResponse (Maybe Text)
+gtsrsVersion = lens _gtsrsVersion (\ s a -> s{_gtsrsVersion = a});
 
--- | The list of resources that generated the values in the 'Capabilities' response
--- element.
-gtsrCapabilitiesReason :: Lens' GetTemplateSummaryResponse (Maybe Text)
-gtsrCapabilitiesReason =
-    lens _gtsrCapabilitiesReason (\s a -> s { _gtsrCapabilitiesReason = a })
+-- | A list of parameter declarations that describe various properties for
+-- each parameter.
+gtsrsParameters :: Lens' GetTemplateSummaryResponse [ParameterDeclaration]
+gtsrsParameters = lens _gtsrsParameters (\ s a -> s{_gtsrsParameters = a}) . _Default . _Coerce;
 
--- | The value that is defined in the 'Description' property of the template.
-gtsrDescription :: Lens' GetTemplateSummaryResponse (Maybe Text)
-gtsrDescription = lens _gtsrDescription (\s a -> s { _gtsrDescription = a })
+-- | The list of resources that generated the values in the 'Capabilities'
+-- response element.
+gtsrsCapabilitiesReason :: Lens' GetTemplateSummaryResponse (Maybe Text)
+gtsrsCapabilitiesReason = lens _gtsrsCapabilitiesReason (\ s a -> s{_gtsrsCapabilitiesReason = a});
 
 -- | The value that is defined for the 'Metadata' property of the template.
-gtsrMetadata :: Lens' GetTemplateSummaryResponse (Maybe Text)
-gtsrMetadata = lens _gtsrMetadata (\s a -> s { _gtsrMetadata = a })
-
--- | A list of parameter declarations that describe various properties for each
--- parameter.
-gtsrParameters :: Lens' GetTemplateSummaryResponse [ParameterDeclaration]
-gtsrParameters = lens _gtsrParameters (\s a -> s { _gtsrParameters = a }) . _List
-
--- | The AWS template format version, which identifies the capabilities of the
--- template.
-gtsrVersion :: Lens' GetTemplateSummaryResponse (Maybe Text)
-gtsrVersion = lens _gtsrVersion (\s a -> s { _gtsrVersion = a })
-
-instance ToPath GetTemplateSummary where
-    toPath = const "/"
-
-instance ToQuery GetTemplateSummary where
-    toQuery GetTemplateSummary{..} = mconcat
-        [ "StackName"    =? _gtsStackName
-        , "TemplateBody" =? _gtsTemplateBody
-        , "TemplateURL"  =? _gtsTemplateURL
-        ]
-
-instance ToHeaders GetTemplateSummary
+gtsrsMetadata :: Lens' GetTemplateSummaryResponse (Maybe Text)
+gtsrsMetadata = lens _gtsrsMetadata (\ s a -> s{_gtsrsMetadata = a});
 
-instance AWSRequest GetTemplateSummary where
-    type Sv GetTemplateSummary = CloudFormation
-    type Rs GetTemplateSummary = GetTemplateSummaryResponse
+-- | The capabilities found within the template. Currently, AWS
+-- CloudFormation supports only the CAPABILITY_IAM capability. If your
+-- template contains IAM resources, you must specify the CAPABILITY_IAM
+-- value for this parameter when you use the CreateStack or UpdateStack
+-- actions with your template; otherwise, those actions return an
+-- InsufficientCapabilities error.
+gtsrsCapabilities :: Lens' GetTemplateSummaryResponse [Capability]
+gtsrsCapabilities = lens _gtsrsCapabilities (\ s a -> s{_gtsrsCapabilities = a}) . _Default . _Coerce;
 
-    request  = post "GetTemplateSummary"
-    response = xmlResponse
+-- | The value that is defined in the 'Description' property of the template.
+gtsrsDescription :: Lens' GetTemplateSummaryResponse (Maybe Text)
+gtsrsDescription = lens _gtsrsDescription (\ s a -> s{_gtsrsDescription = a});
 
-instance FromXML GetTemplateSummaryResponse where
-    parseXML = withElement "GetTemplateSummaryResult" $ \x -> GetTemplateSummaryResponse
-        <$> x .@? "Capabilities" .!@ mempty
-        <*> x .@? "CapabilitiesReason"
-        <*> x .@? "Description"
-        <*> x .@? "Metadata"
-        <*> x .@? "Parameters" .!@ mempty
-        <*> x .@? "Version"
+-- | The response status code.
+gtsrsStatus :: Lens' GetTemplateSummaryResponse Int
+gtsrsStatus = lens _gtsrsStatus (\ s a -> s{_gtsrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/ListStackResources.hs b/gen/Network/AWS/CloudFormation/ListStackResources.hs
--- a/gen/Network/AWS/CloudFormation/ListStackResources.hs
+++ b/gen/Network/AWS/CloudFormation/ListStackResources.hs
@@ -1,75 +1,78 @@
-{-# 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.CloudFormation.ListStackResources
--- 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 descriptions of all resources of the specified stack.
+-- Returns descriptions of all resources of the specified stack.
 --
--- For deleted stacks, ListStackResources returns resource information for up
--- to 90 days after the stack has been deleted.
+-- For deleted stacks, ListStackResources returns resource information for
+-- up to 90 days after the stack has been deleted.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListStackResources.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListStackResources.html AWS API Reference> for ListStackResources.
+--
+-- This operation returns paginated results.
 module Network.AWS.CloudFormation.ListStackResources
     (
-    -- * Request
-      ListStackResources
-    -- ** Request constructor
-    , listStackResources
-    -- ** Request lenses
+    -- * Creating a Request
+      listStackResources
+    , ListStackResources
+    -- * Request Lenses
     , lsrNextToken
     , lsrStackName
 
-    -- * Response
-    , ListStackResourcesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listStackResourcesResponse
-    -- ** Response lenses
-    , lsrrNextToken
-    , lsrrStackResourceSummaries
+    , ListStackResourcesResponse
+    -- * Response Lenses
+    , lsrrsNextToken
+    , lsrrsStackResourceSummaries
+    , lsrrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data ListStackResources = ListStackResources
-    { _lsrNextToken :: Maybe Text
-    , _lsrStackName :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListStackResources' constructor.
+-- | The input for the ListStackResource action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listStackResources' smart constructor.
+data ListStackResources = ListStackResources'
+    { _lsrNextToken :: !(Maybe Text)
+    , _lsrStackName :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStackResources' with the minimum fields required to make a request.
 --
--- * 'lsrNextToken' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lsrStackName' @::@ 'Text'
+-- * 'lsrNextToken'
 --
-listStackResources :: Text -- ^ 'lsrStackName'
-                   -> ListStackResources
-listStackResources p1 = ListStackResources
-    { _lsrStackName = p1
-    , _lsrNextToken = Nothing
+-- * 'lsrStackName'
+listStackResources
+    :: Text -- ^ 'lsrStackName'
+    -> ListStackResources
+listStackResources pStackName_ =
+    ListStackResources'
+    { _lsrNextToken = Nothing
+    , _lsrStackName = pStackName_
     }
 
 -- | String that identifies the start of the next list of stack resource
@@ -77,73 +80,91 @@
 --
 -- Default: There is no default value.
 lsrNextToken :: Lens' ListStackResources (Maybe Text)
-lsrNextToken = lens _lsrNextToken (\s a -> s { _lsrNextToken = a })
+lsrNextToken = lens _lsrNextToken (\ s a -> s{_lsrNextToken = a});
 
--- | The name or the unique stack ID that is associated with the stack, which are
--- not always interchangeable:
+-- | The name or the unique stack ID that is associated with the stack, which
+-- are not always interchangeable:
 --
--- Running stacks: You can specify either the stack's name or its unique stack
--- ID. Deleted stacks: You must specify the unique stack ID.  Default: There is
--- no default value.
+-- -   Running stacks: You can specify either the stack\'s name or its
+--     unique stack ID.
+-- -   Deleted stacks: You must specify the unique stack ID.
+--
+-- Default: There is no default value.
 lsrStackName :: Lens' ListStackResources Text
-lsrStackName = lens _lsrStackName (\s a -> s { _lsrStackName = a })
+lsrStackName = lens _lsrStackName (\ s a -> s{_lsrStackName = a});
 
-data ListStackResourcesResponse = ListStackResourcesResponse
-    { _lsrrNextToken              :: Maybe Text
-    , _lsrrStackResourceSummaries :: List "member" StackResourceSummary
-    } deriving (Eq, Read, Show)
+instance AWSPager ListStackResources where
+        page rq rs
+          | stop (rs ^. lsrrsNextToken) = Nothing
+          | stop (rs ^. lsrrsStackResourceSummaries) = Nothing
+          | otherwise =
+            Just $ rq & lsrNextToken .~ rs ^. lsrrsNextToken
 
--- | 'ListStackResourcesResponse' constructor.
+instance AWSRequest ListStackResources where
+        type Sv ListStackResources = CloudFormation
+        type Rs ListStackResources =
+             ListStackResourcesResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "ListStackResourcesResult"
+              (\ s h x ->
+                 ListStackResourcesResponse' <$>
+                   (x .@? "NextToken") <*>
+                     (x .@? "StackResourceSummaries" .!@ mempty >>=
+                        may (parseXMLList "member"))
+                     <*> (pure (fromEnum s)))
+
+instance ToHeaders ListStackResources where
+        toHeaders = const mempty
+
+instance ToPath ListStackResources where
+        toPath = const "/"
+
+instance ToQuery ListStackResources where
+        toQuery ListStackResources'{..}
+          = mconcat
+              ["Action" =: ("ListStackResources" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "NextToken" =: _lsrNextToken,
+               "StackName" =: _lsrStackName]
+
+-- | The output for a ListStackResources action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listStackResourcesResponse' smart constructor.
+data ListStackResourcesResponse = ListStackResourcesResponse'
+    { _lsrrsNextToken              :: !(Maybe Text)
+    , _lsrrsStackResourceSummaries :: !(Maybe [StackResourceSummary])
+    , _lsrrsStatus                 :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStackResourcesResponse' with the minimum fields required to make a request.
 --
--- * 'lsrrNextToken' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lsrrStackResourceSummaries' @::@ ['StackResourceSummary']
+-- * 'lsrrsNextToken'
 --
-listStackResourcesResponse :: ListStackResourcesResponse
-listStackResourcesResponse = ListStackResourcesResponse
-    { _lsrrStackResourceSummaries = mempty
-    , _lsrrNextToken              = Nothing
+-- * 'lsrrsStackResourceSummaries'
+--
+-- * 'lsrrsStatus'
+listStackResourcesResponse
+    :: Int -- ^ 'lsrrsStatus'
+    -> ListStackResourcesResponse
+listStackResourcesResponse pStatus_ =
+    ListStackResourcesResponse'
+    { _lsrrsNextToken = Nothing
+    , _lsrrsStackResourceSummaries = Nothing
+    , _lsrrsStatus = pStatus_
     }
 
 -- | String that identifies the start of the next list of stack resources, if
 -- there is one.
-lsrrNextToken :: Lens' ListStackResourcesResponse (Maybe Text)
-lsrrNextToken = lens _lsrrNextToken (\s a -> s { _lsrrNextToken = a })
+lsrrsNextToken :: Lens' ListStackResourcesResponse (Maybe Text)
+lsrrsNextToken = lens _lsrrsNextToken (\ s a -> s{_lsrrsNextToken = a});
 
 -- | A list of 'StackResourceSummary' structures.
-lsrrStackResourceSummaries :: Lens' ListStackResourcesResponse [StackResourceSummary]
-lsrrStackResourceSummaries =
-    lens _lsrrStackResourceSummaries
-        (\s a -> s { _lsrrStackResourceSummaries = a })
-            . _List
-
-instance ToPath ListStackResources where
-    toPath = const "/"
-
-instance ToQuery ListStackResources where
-    toQuery ListStackResources{..} = mconcat
-        [ "NextToken" =? _lsrNextToken
-        , "StackName" =? _lsrStackName
-        ]
-
-instance ToHeaders ListStackResources
-
-instance AWSRequest ListStackResources where
-    type Sv ListStackResources = CloudFormation
-    type Rs ListStackResources = ListStackResourcesResponse
-
-    request  = post "ListStackResources"
-    response = xmlResponse
-
-instance FromXML ListStackResourcesResponse where
-    parseXML = withElement "ListStackResourcesResult" $ \x -> ListStackResourcesResponse
-        <$> x .@? "NextToken"
-        <*> x .@? "StackResourceSummaries" .!@ mempty
+lsrrsStackResourceSummaries :: Lens' ListStackResourcesResponse [StackResourceSummary]
+lsrrsStackResourceSummaries = lens _lsrrsStackResourceSummaries (\ s a -> s{_lsrrsStackResourceSummaries = a}) . _Default . _Coerce;
 
-instance AWSPager ListStackResources where
-    page rq rs
-        | stop (rs ^. lsrrNextToken) = Nothing
-        | otherwise = (\x -> rq & lsrNextToken ?~ x)
-            <$> (rs ^. lsrrNextToken)
+-- | The response status code.
+lsrrsStatus :: Lens' ListStackResourcesResponse Int
+lsrrsStatus = lens _lsrrsStatus (\ s a -> s{_lsrrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/ListStacks.hs b/gen/Network/AWS/CloudFormation/ListStacks.hs
--- a/gen/Network/AWS/CloudFormation/ListStacks.hs
+++ b/gen/Network/AWS/CloudFormation/ListStacks.hs
@@ -1,146 +1,168 @@
-{-# 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.CloudFormation.ListStacks
--- 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 the summary information for stacks whose status matches the specified
--- StackStatusFilter. Summary information for stacks that have been deleted is
--- kept for 90 days after the stack is deleted. If no StackStatusFilter is
--- specified, summary information for all stacks is returned (including existing
--- stacks and stacks that have been deleted).
+-- Returns the summary information for stacks whose status matches the
+-- specified StackStatusFilter. Summary information for stacks that have
+-- been deleted is kept for 90 days after the stack is deleted. If no
+-- StackStatusFilter is specified, summary information for all stacks is
+-- returned (including existing stacks and stacks that have been deleted).
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListStacks.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ListStacks.html AWS API Reference> for ListStacks.
+--
+-- This operation returns paginated results.
 module Network.AWS.CloudFormation.ListStacks
     (
-    -- * Request
-      ListStacks
-    -- ** Request constructor
-    , listStacks
-    -- ** Request lenses
+    -- * Creating a Request
+      listStacks
+    , ListStacks
+    -- * Request Lenses
     , lsNextToken
     , lsStackStatusFilter
 
-    -- * Response
-    , ListStacksResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listStacksResponse
-    -- ** Response lenses
-    , lsr1NextToken
-    , lsr1StackSummaries
+    , ListStacksResponse
+    -- * Response Lenses
+    , lsrsStackSummaries
+    , lsrsNextToken
+    , lsrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data ListStacks = ListStacks
-    { _lsNextToken         :: Maybe Text
-    , _lsStackStatusFilter :: List "member" StackStatus
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Pager
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListStacks' constructor.
+-- | The input for ListStacks action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listStacks' smart constructor.
+data ListStacks = ListStacks'
+    { _lsNextToken         :: !(Maybe Text)
+    , _lsStackStatusFilter :: !(Maybe [StackStatus])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStacks' with the minimum fields required to make a request.
 --
--- * 'lsNextToken' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lsStackStatusFilter' @::@ ['StackStatus']
+-- * 'lsNextToken'
 --
-listStacks :: ListStacks
-listStacks = ListStacks
-    { _lsNextToken         = Nothing
-    , _lsStackStatusFilter = mempty
+-- * 'lsStackStatusFilter'
+listStacks
+    :: ListStacks
+listStacks =
+    ListStacks'
+    { _lsNextToken = Nothing
+    , _lsStackStatusFilter = Nothing
     }
 
--- | String that identifies the start of the next list of stacks, if there is one.
+-- | String that identifies the start of the next list of stacks, if there is
+-- one.
 --
 -- Default: There is no default value.
 lsNextToken :: Lens' ListStacks (Maybe Text)
-lsNextToken = lens _lsNextToken (\s a -> s { _lsNextToken = a })
+lsNextToken = lens _lsNextToken (\ s a -> s{_lsNextToken = a});
 
--- | Stack status to use as a filter. Specify one or more stack status codes to
--- list only stacks with the specified status codes. For a complete list of
--- stack status codes, see the 'StackStatus' parameter of the 'Stack' data type.
+-- | Stack status to use as a filter. Specify one or more stack status codes
+-- to list only stacks with the specified status codes. For a complete list
+-- of stack status codes, see the 'StackStatus' parameter of the Stack data
+-- type.
 lsStackStatusFilter :: Lens' ListStacks [StackStatus]
-lsStackStatusFilter =
-    lens _lsStackStatusFilter (\s a -> s { _lsStackStatusFilter = a })
-        . _List
-
-data ListStacksResponse = ListStacksResponse
-    { _lsr1NextToken      :: Maybe Text
-    , _lsr1StackSummaries :: List "member" StackSummary
-    } deriving (Eq, Read, Show)
+lsStackStatusFilter = lens _lsStackStatusFilter (\ s a -> s{_lsStackStatusFilter = a}) . _Default . _Coerce;
 
--- | 'ListStacksResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lsr1NextToken' @::@ 'Maybe' 'Text'
---
--- * 'lsr1StackSummaries' @::@ ['StackSummary']
---
-listStacksResponse :: ListStacksResponse
-listStacksResponse = ListStacksResponse
-    { _lsr1StackSummaries = mempty
-    , _lsr1NextToken      = Nothing
-    }
+instance AWSPager ListStacks where
+        page rq rs
+          | stop (rs ^. lsrsNextToken) = Nothing
+          | stop (rs ^. lsrsStackSummaries) = Nothing
+          | otherwise =
+            Just $ rq & lsNextToken .~ rs ^. lsrsNextToken
 
--- | String that identifies the start of the next list of stacks, if there is one.
-lsr1NextToken :: Lens' ListStacksResponse (Maybe Text)
-lsr1NextToken = lens _lsr1NextToken (\s a -> s { _lsr1NextToken = a })
+instance AWSRequest ListStacks where
+        type Sv ListStacks = CloudFormation
+        type Rs ListStacks = ListStacksResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "ListStacksResult"
+              (\ s h x ->
+                 ListStacksResponse' <$>
+                   (x .@? "StackSummaries" .!@ mempty >>=
+                      may (parseXMLList "member"))
+                     <*> (x .@? "NextToken")
+                     <*> (pure (fromEnum s)))
 
--- | A list of 'StackSummary' structures containing information about the specified
--- stacks.
-lsr1StackSummaries :: Lens' ListStacksResponse [StackSummary]
-lsr1StackSummaries =
-    lens _lsr1StackSummaries (\s a -> s { _lsr1StackSummaries = a })
-        . _List
+instance ToHeaders ListStacks where
+        toHeaders = const mempty
 
 instance ToPath ListStacks where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery ListStacks where
-    toQuery ListStacks{..} = mconcat
-        [ "NextToken"         =? _lsNextToken
-        , "StackStatusFilter" =? _lsStackStatusFilter
-        ]
+        toQuery ListStacks'{..}
+          = mconcat
+              ["Action" =: ("ListStacks" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "NextToken" =: _lsNextToken,
+               "StackStatusFilter" =:
+                 toQuery
+                   (toQueryList "member" <$> _lsStackStatusFilter)]
 
-instance ToHeaders ListStacks
+-- | The output for ListStacks action.
+--
+-- /See:/ 'listStacksResponse' smart constructor.
+data ListStacksResponse = ListStacksResponse'
+    { _lsrsStackSummaries :: !(Maybe [StackSummary])
+    , _lsrsNextToken      :: !(Maybe Text)
+    , _lsrsStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest ListStacks where
-    type Sv ListStacks = CloudFormation
-    type Rs ListStacks = ListStacksResponse
+-- | Creates a value of 'ListStacksResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsrsStackSummaries'
+--
+-- * 'lsrsNextToken'
+--
+-- * 'lsrsStatus'
+listStacksResponse
+    :: Int -- ^ 'lsrsStatus'
+    -> ListStacksResponse
+listStacksResponse pStatus_ =
+    ListStacksResponse'
+    { _lsrsStackSummaries = Nothing
+    , _lsrsNextToken = Nothing
+    , _lsrsStatus = pStatus_
+    }
 
-    request  = post "ListStacks"
-    response = xmlResponse
+-- | A list of 'StackSummary' structures containing information about the
+-- specified stacks.
+lsrsStackSummaries :: Lens' ListStacksResponse [StackSummary]
+lsrsStackSummaries = lens _lsrsStackSummaries (\ s a -> s{_lsrsStackSummaries = a}) . _Default . _Coerce;
 
-instance FromXML ListStacksResponse where
-    parseXML = withElement "ListStacksResult" $ \x -> ListStacksResponse
-        <$> x .@? "NextToken"
-        <*> x .@? "StackSummaries" .!@ mempty
+-- | String that identifies the start of the next list of stacks, if there is
+-- one.
+lsrsNextToken :: Lens' ListStacksResponse (Maybe Text)
+lsrsNextToken = lens _lsrsNextToken (\ s a -> s{_lsrsNextToken = a});
 
-instance AWSPager ListStacks where
-    page rq rs
-        | stop (rs ^. lsr1NextToken) = Nothing
-        | otherwise = (\x -> rq & lsNextToken ?~ x)
-            <$> (rs ^. lsr1NextToken)
+-- | The response status code.
+lsrsStatus :: Lens' ListStacksResponse Int
+lsrsStatus = lens _lsrsStatus (\ s a -> s{_lsrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/SetStackPolicy.hs b/gen/Network/AWS/CloudFormation/SetStackPolicy.hs
--- a/gen/Network/AWS/CloudFormation/SetStackPolicy.hs
+++ b/gen/Network/AWS/CloudFormation/SetStackPolicy.hs
@@ -1,117 +1,121 @@
-{-# 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.CloudFormation.SetStackPolicy
--- 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 a stack policy for a specified stack.
+-- Sets a stack policy for a specified stack.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html AWS API Reference> for SetStackPolicy.
 module Network.AWS.CloudFormation.SetStackPolicy
     (
-    -- * Request
-      SetStackPolicy
-    -- ** Request constructor
-    , setStackPolicy
-    -- ** Request lenses
-    , sspStackName
+    -- * Creating a Request
+      setStackPolicy
+    , SetStackPolicy
+    -- * Request Lenses
     , sspStackPolicyBody
     , sspStackPolicyURL
+    , sspStackName
 
-    -- * Response
-    , SetStackPolicyResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , setStackPolicyResponse
+    , SetStackPolicyResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data SetStackPolicy = SetStackPolicy
-    { _sspStackName       :: Text
-    , _sspStackPolicyBody :: Maybe Text
-    , _sspStackPolicyURL  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'SetStackPolicy' constructor.
+-- | The input for the SetStackPolicy action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'setStackPolicy' smart constructor.
+data SetStackPolicy = SetStackPolicy'
+    { _sspStackPolicyBody :: !(Maybe Text)
+    , _sspStackPolicyURL  :: !(Maybe Text)
+    , _sspStackName       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SetStackPolicy' with the minimum fields required to make a request.
 --
--- * 'sspStackName' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'sspStackPolicyBody' @::@ 'Maybe' 'Text'
+-- * 'sspStackPolicyBody'
 --
--- * 'sspStackPolicyURL' @::@ 'Maybe' 'Text'
+-- * 'sspStackPolicyURL'
 --
-setStackPolicy :: Text -- ^ 'sspStackName'
-               -> SetStackPolicy
-setStackPolicy p1 = SetStackPolicy
-    { _sspStackName       = p1
-    , _sspStackPolicyBody = Nothing
-    , _sspStackPolicyURL  = Nothing
+-- * 'sspStackName'
+setStackPolicy
+    :: Text -- ^ 'sspStackName'
+    -> SetStackPolicy
+setStackPolicy pStackName_ =
+    SetStackPolicy'
+    { _sspStackPolicyBody = Nothing
+    , _sspStackPolicyURL = Nothing
+    , _sspStackName = pStackName_
     }
 
--- | The name or unique stack ID that you want to associate a policy with.
-sspStackName :: Lens' SetStackPolicy Text
-sspStackName = lens _sspStackName (\s a -> s { _sspStackName = a })
-
--- | Structure containing the stack policy body. For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html Prevent Updates to Stack Resources> in the AWS CloudFormation User Guide. You
--- can specify either the 'StackPolicyBody' or the 'StackPolicyURL' parameter, but
--- not both.
+-- | Structure containing the stack policy body. For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html Prevent Updates to Stack Resources>
+-- in the AWS CloudFormation User Guide. You can specify either the
+-- 'StackPolicyBody' or the 'StackPolicyURL' parameter, but not both.
 sspStackPolicyBody :: Lens' SetStackPolicy (Maybe Text)
-sspStackPolicyBody =
-    lens _sspStackPolicyBody (\s a -> s { _sspStackPolicyBody = a })
+sspStackPolicyBody = lens _sspStackPolicyBody (\ s a -> s{_sspStackPolicyBody = a});
 
 -- | Location of a file containing the stack policy. The URL must point to a
--- policy (max size: 16KB) located in an S3 bucket in the same region as the
--- stack. You can specify either the 'StackPolicyBody' or the 'StackPolicyURL'
--- parameter, but not both.
+-- policy (max size: 16KB) located in an S3 bucket in the same region as
+-- the stack. You can specify either the 'StackPolicyBody' or the
+-- 'StackPolicyURL' parameter, but not both.
 sspStackPolicyURL :: Lens' SetStackPolicy (Maybe Text)
-sspStackPolicyURL =
-    lens _sspStackPolicyURL (\s a -> s { _sspStackPolicyURL = a })
+sspStackPolicyURL = lens _sspStackPolicyURL (\ s a -> s{_sspStackPolicyURL = a});
 
-data SetStackPolicyResponse = SetStackPolicyResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | The name or unique stack ID that you want to associate a policy with.
+sspStackName :: Lens' SetStackPolicy Text
+sspStackName = lens _sspStackName (\ s a -> s{_sspStackName = a});
 
--- | 'SetStackPolicyResponse' constructor.
-setStackPolicyResponse :: SetStackPolicyResponse
-setStackPolicyResponse = SetStackPolicyResponse
+instance AWSRequest SetStackPolicy where
+        type Sv SetStackPolicy = CloudFormation
+        type Rs SetStackPolicy = SetStackPolicyResponse
+        request = postQuery
+        response = receiveNull SetStackPolicyResponse'
 
+instance ToHeaders SetStackPolicy where
+        toHeaders = const mempty
+
 instance ToPath SetStackPolicy where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery SetStackPolicy where
-    toQuery SetStackPolicy{..} = mconcat
-        [ "StackName"       =? _sspStackName
-        , "StackPolicyBody" =? _sspStackPolicyBody
-        , "StackPolicyURL"  =? _sspStackPolicyURL
-        ]
-
-instance ToHeaders SetStackPolicy
+        toQuery SetStackPolicy'{..}
+          = mconcat
+              ["Action" =: ("SetStackPolicy" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "StackPolicyBody" =: _sspStackPolicyBody,
+               "StackPolicyURL" =: _sspStackPolicyURL,
+               "StackName" =: _sspStackName]
 
-instance AWSRequest SetStackPolicy where
-    type Sv SetStackPolicy = CloudFormation
-    type Rs SetStackPolicy = SetStackPolicyResponse
+-- | /See:/ 'setStackPolicyResponse' smart constructor.
+data SetStackPolicyResponse =
+    SetStackPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "SetStackPolicy"
-    response = nullResponse SetStackPolicyResponse
+-- | Creates a value of 'SetStackPolicyResponse' with the minimum fields required to make a request.
+--
+setStackPolicyResponse
+    :: SetStackPolicyResponse
+setStackPolicyResponse = SetStackPolicyResponse'
diff --git a/gen/Network/AWS/CloudFormation/SignalResource.hs b/gen/Network/AWS/CloudFormation/SignalResource.hs
--- a/gen/Network/AWS/CloudFormation/SignalResource.hs
+++ b/gen/Network/AWS/CloudFormation/SignalResource.hs
@@ -1,136 +1,140 @@
-{-# 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.CloudFormation.SignalResource
--- 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.
-
--- | Sends a signal to the specified resource with a success or failure status.
--- You can use the SignalResource API in conjunction with a creation policy or
--- update policy. AWS CloudFormation doesn't proceed with a stack creation or
--- update until resources receive the required number of signals or the timeout
--- period is exceeded. The SignalResource API is useful in cases where you want
--- to send signals from anywhere other than an Amazon EC2 instance.
+-- Sends a signal to the specified resource with a success or failure
+-- status. You can use the SignalResource API in conjunction with a
+-- creation policy or update policy. AWS CloudFormation doesn\'t proceed
+-- with a stack creation or update until resources receive the required
+-- number of signals or the timeout period is exceeded. The SignalResource
+-- API is useful in cases where you want to send signals from anywhere
+-- other than an Amazon EC2 instance.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SignalResource.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SignalResource.html AWS API Reference> for SignalResource.
 module Network.AWS.CloudFormation.SignalResource
     (
-    -- * Request
-      SignalResource
-    -- ** Request constructor
-    , signalResource
-    -- ** Request lenses
-    , srLogicalResourceId
-    , srStackName
-    , srStatus
-    , srUniqueId
+    -- * Creating a Request
+      signalResource
+    , SignalResource
+    -- * Request Lenses
+    , sigStackName
+    , sigLogicalResourceId
+    , sigUniqueId
+    , sigStatus
 
-    -- * Response
-    , SignalResourceResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , signalResourceResponse
+    , SignalResourceResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data SignalResource = SignalResource
-    { _srLogicalResourceId :: Text
-    , _srStackName         :: Text
-    , _srStatus            :: ResourceSignalStatus
-    , _srUniqueId          :: Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'SignalResource' constructor.
+-- | The input for the SignalResource action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'signalResource' smart constructor.
+data SignalResource = SignalResource'
+    { _sigStackName         :: !Text
+    , _sigLogicalResourceId :: !Text
+    , _sigUniqueId          :: !Text
+    , _sigStatus            :: !ResourceSignalStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SignalResource' with the minimum fields required to make a request.
 --
--- * 'srLogicalResourceId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'srStackName' @::@ 'Text'
+-- * 'sigStackName'
 --
--- * 'srStatus' @::@ 'ResourceSignalStatus'
+-- * 'sigLogicalResourceId'
 --
--- * 'srUniqueId' @::@ 'Text'
+-- * 'sigUniqueId'
 --
-signalResource :: Text -- ^ 'srStackName'
-               -> Text -- ^ 'srLogicalResourceId'
-               -> Text -- ^ 'srUniqueId'
-               -> ResourceSignalStatus -- ^ 'srStatus'
-               -> SignalResource
-signalResource p1 p2 p3 p4 = SignalResource
-    { _srStackName         = p1
-    , _srLogicalResourceId = p2
-    , _srUniqueId          = p3
-    , _srStatus            = p4
+-- * 'sigStatus'
+signalResource
+    :: Text -- ^ 'sigStackName'
+    -> Text -- ^ 'sigLogicalResourceId'
+    -> Text -- ^ 'sigUniqueId'
+    -> ResourceSignalStatus -- ^ 'sigStatus'
+    -> SignalResource
+signalResource pStackName_ pLogicalResourceId_ pUniqueId_ pStatus_ =
+    SignalResource'
+    { _sigStackName = pStackName_
+    , _sigLogicalResourceId = pLogicalResourceId_
+    , _sigUniqueId = pUniqueId_
+    , _sigStatus = pStatus_
     }
 
--- | The logical ID of the resource that you want to signal. The logical ID is the
--- name of the resource that given in the template.
-srLogicalResourceId :: Lens' SignalResource Text
-srLogicalResourceId =
-    lens _srLogicalResourceId (\s a -> s { _srLogicalResourceId = a })
-
--- | The stack name or unique stack ID that includes the resource that you want to
--- signal.
-srStackName :: Lens' SignalResource Text
-srStackName = lens _srStackName (\s a -> s { _srStackName = a })
+-- | The stack name or unique stack ID that includes the resource that you
+-- want to signal.
+sigStackName :: Lens' SignalResource Text
+sigStackName = lens _sigStackName (\ s a -> s{_sigStackName = a});
 
--- | The status of the signal, which is either success or failure. A failure
--- signal causes AWS CloudFormation to immediately fail the stack creation or
--- update.
-srStatus :: Lens' SignalResource ResourceSignalStatus
-srStatus = lens _srStatus (\s a -> s { _srStatus = a })
+-- | The logical ID of the resource that you want to signal. The logical ID
+-- is the name of the resource that given in the template.
+sigLogicalResourceId :: Lens' SignalResource Text
+sigLogicalResourceId = lens _sigLogicalResourceId (\ s a -> s{_sigLogicalResourceId = a});
 
 -- | A unique ID of the signal. When you signal Amazon EC2 instances or Auto
--- Scaling groups, specify the instance ID that you are signaling as the unique
--- ID. If you send multiple signals to a single resource (such as signaling a
--- wait condition), each signal requires a different unique ID.
-srUniqueId :: Lens' SignalResource Text
-srUniqueId = lens _srUniqueId (\s a -> s { _srUniqueId = a })
+-- Scaling groups, specify the instance ID that you are signaling as the
+-- unique ID. If you send multiple signals to a single resource (such as
+-- signaling a wait condition), each signal requires a different unique ID.
+sigUniqueId :: Lens' SignalResource Text
+sigUniqueId = lens _sigUniqueId (\ s a -> s{_sigUniqueId = a});
 
-data SignalResourceResponse = SignalResourceResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+-- | The status of the signal, which is either success or failure. A failure
+-- signal causes AWS CloudFormation to immediately fail the stack creation
+-- or update.
+sigStatus :: Lens' SignalResource ResourceSignalStatus
+sigStatus = lens _sigStatus (\ s a -> s{_sigStatus = a});
 
--- | 'SignalResourceResponse' constructor.
-signalResourceResponse :: SignalResourceResponse
-signalResourceResponse = SignalResourceResponse
+instance AWSRequest SignalResource where
+        type Sv SignalResource = CloudFormation
+        type Rs SignalResource = SignalResourceResponse
+        request = postQuery
+        response = receiveNull SignalResourceResponse'
 
+instance ToHeaders SignalResource where
+        toHeaders = const mempty
+
 instance ToPath SignalResource where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery SignalResource where
-    toQuery SignalResource{..} = mconcat
-        [ "LogicalResourceId" =? _srLogicalResourceId
-        , "StackName"         =? _srStackName
-        , "Status"            =? _srStatus
-        , "UniqueId"          =? _srUniqueId
-        ]
-
-instance ToHeaders SignalResource
+        toQuery SignalResource'{..}
+          = mconcat
+              ["Action" =: ("SignalResource" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "StackName" =: _sigStackName,
+               "LogicalResourceId" =: _sigLogicalResourceId,
+               "UniqueId" =: _sigUniqueId, "Status" =: _sigStatus]
 
-instance AWSRequest SignalResource where
-    type Sv SignalResource = CloudFormation
-    type Rs SignalResource = SignalResourceResponse
+-- | /See:/ 'signalResourceResponse' smart constructor.
+data SignalResourceResponse =
+    SignalResourceResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = post "SignalResource"
-    response = nullResponse SignalResourceResponse
+-- | Creates a value of 'SignalResourceResponse' with the minimum fields required to make a request.
+--
+signalResourceResponse
+    :: SignalResourceResponse
+signalResourceResponse = SignalResourceResponse'
diff --git a/gen/Network/AWS/CloudFormation/Types.hs b/gen/Network/AWS/CloudFormation/Types.hs
--- a/gen/Network/AWS/CloudFormation/Types.hs
+++ b/gen/Network/AWS/CloudFormation/Types.hs
@@ -1,1476 +1,217 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE ViewPatterns                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.CloudFormation.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/.
--- 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.
-
-module Network.AWS.CloudFormation.Types
-    (
-    -- * Service
-      CloudFormation
-    -- ** Error
-    , RESTError
-    -- ** XML
-    , ns
-
-    -- * Tag
-    , Tag
-    , tag
-    , tagKey
-    , tagValue
-
-    -- * StackStatus
-    , StackStatus (..)
-
-    -- * StackEvent
-    , StackEvent
-    , stackEvent
-    , seEventId
-    , seLogicalResourceId
-    , sePhysicalResourceId
-    , seResourceProperties
-    , seResourceStatus
-    , seResourceStatusReason
-    , seResourceType
-    , seStackId
-    , seStackName
-    , seTimestamp
-
-    -- * StackSummary
-    , StackSummary
-    , stackSummary
-    , ssCreationTime
-    , ssDeletionTime
-    , ssLastUpdatedTime
-    , ssStackId
-    , ssStackName
-    , ssStackStatus
-    , ssStackStatusReason
-    , ssTemplateDescription
-
-    -- * StackResourceDetail
-    , StackResourceDetail
-    , stackResourceDetail
-    , srdDescription
-    , srdLastUpdatedTimestamp
-    , srdLogicalResourceId
-    , srdMetadata
-    , srdPhysicalResourceId
-    , srdResourceStatus
-    , srdResourceStatusReason
-    , srdResourceType
-    , srdStackId
-    , srdStackName
-
-    -- * ResourceStatus
-    , ResourceStatus (..)
-
-    -- * TemplateParameter
-    , TemplateParameter
-    , templateParameter
-    , tpDefaultValue
-    , tpDescription
-    , tpNoEcho
-    , tpParameterKey
-
-    -- * ParameterDeclaration
-    , ParameterDeclaration
-    , parameterDeclaration
-    , pdDefaultValue
-    , pdDescription
-    , pdNoEcho
-    , pdParameterConstraints
-    , pdParameterKey
-    , pdParameterType
-
-    -- * StackResource
-    , StackResource
-    , stackResource
-    , sr1Description
-    , sr1LogicalResourceId
-    , sr1PhysicalResourceId
-    , sr1ResourceStatus
-    , sr1ResourceStatusReason
-    , sr1ResourceType
-    , sr1StackId
-    , sr1StackName
-    , sr1Timestamp
-
-    -- * Output
-    , Output
-    , output
-    , oDescription
-    , oOutputKey
-    , oOutputValue
-
-    -- * ParameterConstraints
-    , ParameterConstraints
-    , parameterConstraints
-    , pcAllowedValues
-
-    -- * StackResourceSummary
-    , StackResourceSummary
-    , stackResourceSummary
-    , srsLastUpdatedTimestamp
-    , srsLogicalResourceId
-    , srsPhysicalResourceId
-    , srsResourceStatus
-    , srsResourceStatusReason
-    , srsResourceType
-
-    -- * Capability
-    , Capability (..)
-
-    -- * ResourceSignalStatus
-    , ResourceSignalStatus (..)
-
-    -- * Stack
-    , Stack
-    , stack
-    , sCapabilities
-    , sCreationTime
-    , sDescription
-    , sDisableRollback
-    , sLastUpdatedTime
-    , sNotificationARNs
-    , sOutputs
-    , sParameters
-    , sStackId
-    , sStackName
-    , sStackStatus
-    , sStackStatusReason
-    , sTags
-    , sTimeoutInMinutes
-
-    -- * OnFailure
-    , OnFailure (..)
-
-    -- * Parameter
-    , Parameter
-    , parameter
-    , pParameterKey
-    , pParameterValue
-    , pUsePreviousValue
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
-
--- | Version @2010-05-15@ of the Amazon CloudFormation service.
-data CloudFormation
-
-instance AWSService CloudFormation where
-    type Sg CloudFormation = V4
-    type Er CloudFormation = RESTError
-
-    service = service'
-      where
-        service' :: Service CloudFormation
-        service' = Service
-            { _svcAbbrev       = "CloudFormation"
-            , _svcPrefix       = "cloudformation"
-            , _svcVersion      = "2010-05-15"
-            , _svcTargetPrefix = Nothing
-            , _svcJSONVersion  = Nothing
-            , _svcHandle       = handle
-            , _svcRetry        = retry
-            }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError RESTError)
-        handle = restError statusSuccess service'
-
-        retry :: Retry CloudFormation
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
-            , _retryAttempts = 5
-            , _retryCheck    = check
-            }
-
-        check :: Status
-              -> RESTError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 400 && (Just "Throttling") == e = True -- Throttling
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-ns :: Text
-ns = "http://cloudformation.amazonaws.com/doc/2010-05-15/"
-{-# INLINE ns #-}
-
-data Tag = Tag
-    { _tagKey   :: Maybe Text
-    , _tagValue :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Tag' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tagKey' @::@ 'Maybe' 'Text'
---
--- * 'tagValue' @::@ 'Maybe' 'Text'
---
-tag :: Tag
-tag = Tag
-    { _tagKey   = Nothing
-    , _tagValue = Nothing
-    }
-
--- | /Required/. A string used to identify this tag. You can specify a maximum of
--- 128 characters for a tag key. Tags owned by Amazon Web Services (AWS) have
--- the reserved prefix: 'aws:'.
-tagKey :: Lens' Tag (Maybe Text)
-tagKey = lens _tagKey (\s a -> s { _tagKey = a })
-
--- | /Required/. A string containing the value for this tag. You can specify a
--- maximum of 256 characters for a tag value.
-tagValue :: Lens' Tag (Maybe Text)
-tagValue = lens _tagValue (\s a -> s { _tagValue = a })
-
-instance FromXML Tag where
-    parseXML x = Tag
-        <$> x .@? "Key"
-        <*> x .@? "Value"
-
-instance ToQuery Tag where
-    toQuery Tag{..} = mconcat
-        [ "Key"   =? _tagKey
-        , "Value" =? _tagValue
-        ]
-
-data StackStatus
-    = CreateComplete                          -- ^ CREATE_COMPLETE
-    | CreateFailed                            -- ^ CREATE_FAILED
-    | CreateInProgress                        -- ^ CREATE_IN_PROGRESS
-    | DeleteComplete                          -- ^ DELETE_COMPLETE
-    | DeleteFailed                            -- ^ DELETE_FAILED
-    | DeleteInProgress                        -- ^ DELETE_IN_PROGRESS
-    | RollbackComplete                        -- ^ ROLLBACK_COMPLETE
-    | RollbackFailed                          -- ^ ROLLBACK_FAILED
-    | RollbackInProgress                      -- ^ ROLLBACK_IN_PROGRESS
-    | UpdateComplete                          -- ^ UPDATE_COMPLETE
-    | UpdateCompleteCleanupInProgress         -- ^ UPDATE_COMPLETE_CLEANUP_IN_PROGRESS
-    | UpdateInProgress                        -- ^ UPDATE_IN_PROGRESS
-    | UpdateRollbackComplete                  -- ^ UPDATE_ROLLBACK_COMPLETE
-    | UpdateRollbackCompleteCleanupInProgress -- ^ UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS
-    | UpdateRollbackFailed                    -- ^ UPDATE_ROLLBACK_FAILED
-    | UpdateRollbackInProgress                -- ^ UPDATE_ROLLBACK_IN_PROGRESS
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable StackStatus
-
-instance FromText StackStatus where
-    parser = takeLowerText >>= \case
-        "create_complete"                              -> pure CreateComplete
-        "create_failed"                                -> pure CreateFailed
-        "create_in_progress"                           -> pure CreateInProgress
-        "delete_complete"                              -> pure DeleteComplete
-        "delete_failed"                                -> pure DeleteFailed
-        "delete_in_progress"                           -> pure DeleteInProgress
-        "rollback_complete"                            -> pure RollbackComplete
-        "rollback_failed"                              -> pure RollbackFailed
-        "rollback_in_progress"                         -> pure RollbackInProgress
-        "update_complete"                              -> pure UpdateComplete
-        "update_complete_cleanup_in_progress"          -> pure UpdateCompleteCleanupInProgress
-        "update_in_progress"                           -> pure UpdateInProgress
-        "update_rollback_complete"                     -> pure UpdateRollbackComplete
-        "update_rollback_complete_cleanup_in_progress" -> pure UpdateRollbackCompleteCleanupInProgress
-        "update_rollback_failed"                       -> pure UpdateRollbackFailed
-        "update_rollback_in_progress"                  -> pure UpdateRollbackInProgress
-        e                                              -> fail $
-            "Failure parsing StackStatus from " ++ show e
-
-instance ToText StackStatus where
-    toText = \case
-        CreateComplete                          -> "CREATE_COMPLETE"
-        CreateFailed                            -> "CREATE_FAILED"
-        CreateInProgress                        -> "CREATE_IN_PROGRESS"
-        DeleteComplete                          -> "DELETE_COMPLETE"
-        DeleteFailed                            -> "DELETE_FAILED"
-        DeleteInProgress                        -> "DELETE_IN_PROGRESS"
-        RollbackComplete                        -> "ROLLBACK_COMPLETE"
-        RollbackFailed                          -> "ROLLBACK_FAILED"
-        RollbackInProgress                      -> "ROLLBACK_IN_PROGRESS"
-        UpdateComplete                          -> "UPDATE_COMPLETE"
-        UpdateCompleteCleanupInProgress         -> "UPDATE_COMPLETE_CLEANUP_IN_PROGRESS"
-        UpdateInProgress                        -> "UPDATE_IN_PROGRESS"
-        UpdateRollbackComplete                  -> "UPDATE_ROLLBACK_COMPLETE"
-        UpdateRollbackCompleteCleanupInProgress -> "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS"
-        UpdateRollbackFailed                    -> "UPDATE_ROLLBACK_FAILED"
-        UpdateRollbackInProgress                -> "UPDATE_ROLLBACK_IN_PROGRESS"
-
-instance ToByteString StackStatus
-instance ToHeader     StackStatus
-instance ToQuery      StackStatus
-
-instance FromXML StackStatus where
-    parseXML = parseXMLText "StackStatus"
-
-data StackEvent = StackEvent
-    { _seEventId              :: Text
-    , _seLogicalResourceId    :: Maybe Text
-    , _sePhysicalResourceId   :: Maybe Text
-    , _seResourceProperties   :: Maybe Text
-    , _seResourceStatus       :: Maybe ResourceStatus
-    , _seResourceStatusReason :: Maybe Text
-    , _seResourceType         :: Maybe Text
-    , _seStackId              :: Text
-    , _seStackName            :: Text
-    , _seTimestamp            :: ISO8601
-    } deriving (Eq, Read, Show)
-
--- | 'StackEvent' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'seEventId' @::@ 'Text'
---
--- * 'seLogicalResourceId' @::@ 'Maybe' 'Text'
---
--- * 'sePhysicalResourceId' @::@ 'Maybe' 'Text'
---
--- * 'seResourceProperties' @::@ 'Maybe' 'Text'
---
--- * 'seResourceStatus' @::@ 'Maybe' 'ResourceStatus'
---
--- * 'seResourceStatusReason' @::@ 'Maybe' 'Text'
---
--- * 'seResourceType' @::@ 'Maybe' 'Text'
---
--- * 'seStackId' @::@ 'Text'
---
--- * 'seStackName' @::@ 'Text'
---
--- * 'seTimestamp' @::@ 'UTCTime'
---
-stackEvent :: Text -- ^ 'seStackId'
-           -> Text -- ^ 'seEventId'
-           -> Text -- ^ 'seStackName'
-           -> UTCTime -- ^ 'seTimestamp'
-           -> StackEvent
-stackEvent p1 p2 p3 p4 = StackEvent
-    { _seStackId              = p1
-    , _seEventId              = p2
-    , _seStackName            = p3
-    , _seTimestamp            = withIso _Time (const id) p4
-    , _seLogicalResourceId    = Nothing
-    , _sePhysicalResourceId   = Nothing
-    , _seResourceType         = Nothing
-    , _seResourceStatus       = Nothing
-    , _seResourceStatusReason = Nothing
-    , _seResourceProperties   = Nothing
-    }
-
--- | The unique ID of this event.
-seEventId :: Lens' StackEvent Text
-seEventId = lens _seEventId (\s a -> s { _seEventId = a })
-
--- | The logical name of the resource specified in the template.
-seLogicalResourceId :: Lens' StackEvent (Maybe Text)
-seLogicalResourceId =
-    lens _seLogicalResourceId (\s a -> s { _seLogicalResourceId = a })
-
--- | The name or unique identifier associated with the physical instance of the
--- resource.
-sePhysicalResourceId :: Lens' StackEvent (Maybe Text)
-sePhysicalResourceId =
-    lens _sePhysicalResourceId (\s a -> s { _sePhysicalResourceId = a })
-
--- | BLOB of the properties used to create the resource.
-seResourceProperties :: Lens' StackEvent (Maybe Text)
-seResourceProperties =
-    lens _seResourceProperties (\s a -> s { _seResourceProperties = a })
-
--- | Current status of the resource.
-seResourceStatus :: Lens' StackEvent (Maybe ResourceStatus)
-seResourceStatus = lens _seResourceStatus (\s a -> s { _seResourceStatus = a })
-
--- | Success/failure message associated with the resource.
-seResourceStatusReason :: Lens' StackEvent (Maybe Text)
-seResourceStatusReason =
-    lens _seResourceStatusReason (\s a -> s { _seResourceStatusReason = a })
-
--- | Type of resource. (For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html  AWS Resource Types Reference>
--- in the AWS CloudFormation User Guide.)
-seResourceType :: Lens' StackEvent (Maybe Text)
-seResourceType = lens _seResourceType (\s a -> s { _seResourceType = a })
-
--- | The unique ID name of the instance of the stack.
-seStackId :: Lens' StackEvent Text
-seStackId = lens _seStackId (\s a -> s { _seStackId = a })
-
--- | The name associated with a stack.
-seStackName :: Lens' StackEvent Text
-seStackName = lens _seStackName (\s a -> s { _seStackName = a })
-
--- | Time the status was updated.
-seTimestamp :: Lens' StackEvent UTCTime
-seTimestamp = lens _seTimestamp (\s a -> s { _seTimestamp = a }) . _Time
-
-instance FromXML StackEvent where
-    parseXML x = StackEvent
-        <$> x .@  "EventId"
-        <*> x .@? "LogicalResourceId"
-        <*> x .@? "PhysicalResourceId"
-        <*> x .@? "ResourceProperties"
-        <*> x .@? "ResourceStatus"
-        <*> x .@? "ResourceStatusReason"
-        <*> x .@? "ResourceType"
-        <*> x .@  "StackId"
-        <*> x .@  "StackName"
-        <*> x .@  "Timestamp"
-
-instance ToQuery StackEvent where
-    toQuery StackEvent{..} = mconcat
-        [ "EventId"              =? _seEventId
-        , "LogicalResourceId"    =? _seLogicalResourceId
-        , "PhysicalResourceId"   =? _sePhysicalResourceId
-        , "ResourceProperties"   =? _seResourceProperties
-        , "ResourceStatus"       =? _seResourceStatus
-        , "ResourceStatusReason" =? _seResourceStatusReason
-        , "ResourceType"         =? _seResourceType
-        , "StackId"              =? _seStackId
-        , "StackName"            =? _seStackName
-        , "Timestamp"            =? _seTimestamp
-        ]
-
-data StackSummary = StackSummary
-    { _ssCreationTime        :: ISO8601
-    , _ssDeletionTime        :: Maybe ISO8601
-    , _ssLastUpdatedTime     :: Maybe ISO8601
-    , _ssStackId             :: Maybe Text
-    , _ssStackName           :: Text
-    , _ssStackStatus         :: StackStatus
-    , _ssStackStatusReason   :: Maybe Text
-    , _ssTemplateDescription :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'StackSummary' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ssCreationTime' @::@ 'UTCTime'
---
--- * 'ssDeletionTime' @::@ 'Maybe' 'UTCTime'
---
--- * 'ssLastUpdatedTime' @::@ 'Maybe' 'UTCTime'
---
--- * 'ssStackId' @::@ 'Maybe' 'Text'
---
--- * 'ssStackName' @::@ 'Text'
---
--- * 'ssStackStatus' @::@ 'StackStatus'
---
--- * 'ssStackStatusReason' @::@ 'Maybe' 'Text'
---
--- * 'ssTemplateDescription' @::@ 'Maybe' 'Text'
---
-stackSummary :: Text -- ^ 'ssStackName'
-             -> UTCTime -- ^ 'ssCreationTime'
-             -> StackStatus -- ^ 'ssStackStatus'
-             -> StackSummary
-stackSummary p1 p2 p3 = StackSummary
-    { _ssStackName           = p1
-    , _ssCreationTime        = withIso _Time (const id) p2
-    , _ssStackStatus         = p3
-    , _ssStackId             = Nothing
-    , _ssTemplateDescription = Nothing
-    , _ssLastUpdatedTime     = Nothing
-    , _ssDeletionTime        = Nothing
-    , _ssStackStatusReason   = Nothing
-    }
-
--- | The time the stack was created.
-ssCreationTime :: Lens' StackSummary UTCTime
-ssCreationTime = lens _ssCreationTime (\s a -> s { _ssCreationTime = a }) . _Time
-
--- | The time the stack was deleted.
-ssDeletionTime :: Lens' StackSummary (Maybe UTCTime)
-ssDeletionTime = lens _ssDeletionTime (\s a -> s { _ssDeletionTime = a }) . mapping _Time
-
--- | The time the stack was last updated. This field will only be returned if the
--- stack has been updated at least once.
-ssLastUpdatedTime :: Lens' StackSummary (Maybe UTCTime)
-ssLastUpdatedTime =
-    lens _ssLastUpdatedTime (\s a -> s { _ssLastUpdatedTime = a })
-        . mapping _Time
-
--- | Unique stack identifier.
-ssStackId :: Lens' StackSummary (Maybe Text)
-ssStackId = lens _ssStackId (\s a -> s { _ssStackId = a })
-
--- | The name associated with the stack.
-ssStackName :: Lens' StackSummary Text
-ssStackName = lens _ssStackName (\s a -> s { _ssStackName = a })
-
--- | The current status of the stack.
-ssStackStatus :: Lens' StackSummary StackStatus
-ssStackStatus = lens _ssStackStatus (\s a -> s { _ssStackStatus = a })
-
--- | Success/Failure message associated with the stack status.
-ssStackStatusReason :: Lens' StackSummary (Maybe Text)
-ssStackStatusReason =
-    lens _ssStackStatusReason (\s a -> s { _ssStackStatusReason = a })
-
--- | The template description of the template used to create the stack.
-ssTemplateDescription :: Lens' StackSummary (Maybe Text)
-ssTemplateDescription =
-    lens _ssTemplateDescription (\s a -> s { _ssTemplateDescription = a })
-
-instance FromXML StackSummary where
-    parseXML x = StackSummary
-        <$> x .@  "CreationTime"
-        <*> x .@? "DeletionTime"
-        <*> x .@? "LastUpdatedTime"
-        <*> x .@? "StackId"
-        <*> x .@  "StackName"
-        <*> x .@  "StackStatus"
-        <*> x .@? "StackStatusReason"
-        <*> x .@? "TemplateDescription"
-
-instance ToQuery StackSummary where
-    toQuery StackSummary{..} = mconcat
-        [ "CreationTime"        =? _ssCreationTime
-        , "DeletionTime"        =? _ssDeletionTime
-        , "LastUpdatedTime"     =? _ssLastUpdatedTime
-        , "StackId"             =? _ssStackId
-        , "StackName"           =? _ssStackName
-        , "StackStatus"         =? _ssStackStatus
-        , "StackStatusReason"   =? _ssStackStatusReason
-        , "TemplateDescription" =? _ssTemplateDescription
-        ]
-
-data StackResourceDetail = StackResourceDetail
-    { _srdDescription          :: Maybe Text
-    , _srdLastUpdatedTimestamp :: ISO8601
-    , _srdLogicalResourceId    :: Text
-    , _srdMetadata             :: Maybe Text
-    , _srdPhysicalResourceId   :: Maybe Text
-    , _srdResourceStatus       :: ResourceStatus
-    , _srdResourceStatusReason :: Maybe Text
-    , _srdResourceType         :: Text
-    , _srdStackId              :: Maybe Text
-    , _srdStackName            :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'StackResourceDetail' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'srdDescription' @::@ 'Maybe' 'Text'
---
--- * 'srdLastUpdatedTimestamp' @::@ 'UTCTime'
---
--- * 'srdLogicalResourceId' @::@ 'Text'
---
--- * 'srdMetadata' @::@ 'Maybe' 'Text'
---
--- * 'srdPhysicalResourceId' @::@ 'Maybe' 'Text'
---
--- * 'srdResourceStatus' @::@ 'ResourceStatus'
---
--- * 'srdResourceStatusReason' @::@ 'Maybe' 'Text'
---
--- * 'srdResourceType' @::@ 'Text'
---
--- * 'srdStackId' @::@ 'Maybe' 'Text'
---
--- * 'srdStackName' @::@ 'Maybe' 'Text'
---
-stackResourceDetail :: Text -- ^ 'srdLogicalResourceId'
-                    -> Text -- ^ 'srdResourceType'
-                    -> UTCTime -- ^ 'srdLastUpdatedTimestamp'
-                    -> ResourceStatus -- ^ 'srdResourceStatus'
-                    -> StackResourceDetail
-stackResourceDetail p1 p2 p3 p4 = StackResourceDetail
-    { _srdLogicalResourceId    = p1
-    , _srdResourceType         = p2
-    , _srdLastUpdatedTimestamp = withIso _Time (const id) p3
-    , _srdResourceStatus       = p4
-    , _srdStackName            = Nothing
-    , _srdStackId              = Nothing
-    , _srdPhysicalResourceId   = Nothing
-    , _srdResourceStatusReason = Nothing
-    , _srdDescription          = Nothing
-    , _srdMetadata             = Nothing
-    }
-
--- | User defined description associated with the resource.
-srdDescription :: Lens' StackResourceDetail (Maybe Text)
-srdDescription = lens _srdDescription (\s a -> s { _srdDescription = a })
-
--- | Time the status was updated.
-srdLastUpdatedTimestamp :: Lens' StackResourceDetail UTCTime
-srdLastUpdatedTimestamp =
-    lens _srdLastUpdatedTimestamp (\s a -> s { _srdLastUpdatedTimestamp = a })
-        . _Time
-
--- | The logical name of the resource specified in the template.
-srdLogicalResourceId :: Lens' StackResourceDetail Text
-srdLogicalResourceId =
-    lens _srdLogicalResourceId (\s a -> s { _srdLogicalResourceId = a })
-
--- | The JSON format content of the 'Metadata' attribute declared for the resource.
--- For more information, see <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-metadata.html Metadata Attribute> in the AWS CloudFormation User
--- Guide.
-srdMetadata :: Lens' StackResourceDetail (Maybe Text)
-srdMetadata = lens _srdMetadata (\s a -> s { _srdMetadata = a })
-
--- | The name or unique identifier that corresponds to a physical instance ID of a
--- resource supported by AWS CloudFormation.
-srdPhysicalResourceId :: Lens' StackResourceDetail (Maybe Text)
-srdPhysicalResourceId =
-    lens _srdPhysicalResourceId (\s a -> s { _srdPhysicalResourceId = a })
-
--- | Current status of the resource.
-srdResourceStatus :: Lens' StackResourceDetail ResourceStatus
-srdResourceStatus =
-    lens _srdResourceStatus (\s a -> s { _srdResourceStatus = a })
-
--- | Success/failure message associated with the resource.
-srdResourceStatusReason :: Lens' StackResourceDetail (Maybe Text)
-srdResourceStatusReason =
-    lens _srdResourceStatusReason (\s a -> s { _srdResourceStatusReason = a })
-
--- | Type of resource. ((For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html  AWS Resource Types Reference>
--- in the AWS CloudFormation User Guide.)
-srdResourceType :: Lens' StackResourceDetail Text
-srdResourceType = lens _srdResourceType (\s a -> s { _srdResourceType = a })
-
--- | Unique identifier of the stack.
-srdStackId :: Lens' StackResourceDetail (Maybe Text)
-srdStackId = lens _srdStackId (\s a -> s { _srdStackId = a })
-
--- | The name associated with the stack.
-srdStackName :: Lens' StackResourceDetail (Maybe Text)
-srdStackName = lens _srdStackName (\s a -> s { _srdStackName = a })
-
-instance FromXML StackResourceDetail where
-    parseXML x = StackResourceDetail
-        <$> x .@? "Description"
-        <*> x .@  "LastUpdatedTimestamp"
-        <*> x .@  "LogicalResourceId"
-        <*> x .@? "Metadata"
-        <*> x .@? "PhysicalResourceId"
-        <*> x .@  "ResourceStatus"
-        <*> x .@? "ResourceStatusReason"
-        <*> x .@  "ResourceType"
-        <*> x .@? "StackId"
-        <*> x .@? "StackName"
-
-instance ToQuery StackResourceDetail where
-    toQuery StackResourceDetail{..} = mconcat
-        [ "Description"          =? _srdDescription
-        , "LastUpdatedTimestamp" =? _srdLastUpdatedTimestamp
-        , "LogicalResourceId"    =? _srdLogicalResourceId
-        , "Metadata"             =? _srdMetadata
-        , "PhysicalResourceId"   =? _srdPhysicalResourceId
-        , "ResourceStatus"       =? _srdResourceStatus
-        , "ResourceStatusReason" =? _srdResourceStatusReason
-        , "ResourceType"         =? _srdResourceType
-        , "StackId"              =? _srdStackId
-        , "StackName"            =? _srdStackName
-        ]
-
-data ResourceStatus
-    = RSCreateComplete   -- ^ CREATE_COMPLETE
-    | RSCreateFailed     -- ^ CREATE_FAILED
-    | RSCreateInProgress -- ^ CREATE_IN_PROGRESS
-    | RSDeleteComplete   -- ^ DELETE_COMPLETE
-    | RSDeleteFailed     -- ^ DELETE_FAILED
-    | RSDeleteInProgress -- ^ DELETE_IN_PROGRESS
-    | RSDeleteSkipped    -- ^ DELETE_SKIPPED
-    | RSUpdateComplete   -- ^ UPDATE_COMPLETE
-    | RSUpdateFailed     -- ^ UPDATE_FAILED
-    | RSUpdateInProgress -- ^ UPDATE_IN_PROGRESS
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ResourceStatus
-
-instance FromText ResourceStatus where
-    parser = takeLowerText >>= \case
-        "create_complete"    -> pure RSCreateComplete
-        "create_failed"      -> pure RSCreateFailed
-        "create_in_progress" -> pure RSCreateInProgress
-        "delete_complete"    -> pure RSDeleteComplete
-        "delete_failed"      -> pure RSDeleteFailed
-        "delete_in_progress" -> pure RSDeleteInProgress
-        "delete_skipped"     -> pure RSDeleteSkipped
-        "update_complete"    -> pure RSUpdateComplete
-        "update_failed"      -> pure RSUpdateFailed
-        "update_in_progress" -> pure RSUpdateInProgress
-        e                    -> fail $
-            "Failure parsing ResourceStatus from " ++ show e
-
-instance ToText ResourceStatus where
-    toText = \case
-        RSCreateComplete   -> "CREATE_COMPLETE"
-        RSCreateFailed     -> "CREATE_FAILED"
-        RSCreateInProgress -> "CREATE_IN_PROGRESS"
-        RSDeleteComplete   -> "DELETE_COMPLETE"
-        RSDeleteFailed     -> "DELETE_FAILED"
-        RSDeleteInProgress -> "DELETE_IN_PROGRESS"
-        RSDeleteSkipped    -> "DELETE_SKIPPED"
-        RSUpdateComplete   -> "UPDATE_COMPLETE"
-        RSUpdateFailed     -> "UPDATE_FAILED"
-        RSUpdateInProgress -> "UPDATE_IN_PROGRESS"
-
-instance ToByteString ResourceStatus
-instance ToHeader     ResourceStatus
-instance ToQuery      ResourceStatus
-
-instance FromXML ResourceStatus where
-    parseXML = parseXMLText "ResourceStatus"
-
-data TemplateParameter = TemplateParameter
-    { _tpDefaultValue :: Maybe Text
-    , _tpDescription  :: Maybe Text
-    , _tpNoEcho       :: Maybe Bool
-    , _tpParameterKey :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'TemplateParameter' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tpDefaultValue' @::@ 'Maybe' 'Text'
---
--- * 'tpDescription' @::@ 'Maybe' 'Text'
---
--- * 'tpNoEcho' @::@ 'Maybe' 'Bool'
---
--- * 'tpParameterKey' @::@ 'Maybe' 'Text'
---
-templateParameter :: TemplateParameter
-templateParameter = TemplateParameter
-    { _tpParameterKey = Nothing
-    , _tpDefaultValue = Nothing
-    , _tpNoEcho       = Nothing
-    , _tpDescription  = Nothing
-    }
-
--- | The default value associated with the parameter.
-tpDefaultValue :: Lens' TemplateParameter (Maybe Text)
-tpDefaultValue = lens _tpDefaultValue (\s a -> s { _tpDefaultValue = a })
-
--- | User defined description associated with the parameter.
-tpDescription :: Lens' TemplateParameter (Maybe Text)
-tpDescription = lens _tpDescription (\s a -> s { _tpDescription = a })
-
--- | Flag indicating whether the parameter should be displayed as plain text in
--- logs and UIs.
-tpNoEcho :: Lens' TemplateParameter (Maybe Bool)
-tpNoEcho = lens _tpNoEcho (\s a -> s { _tpNoEcho = a })
-
--- | The name associated with the parameter.
-tpParameterKey :: Lens' TemplateParameter (Maybe Text)
-tpParameterKey = lens _tpParameterKey (\s a -> s { _tpParameterKey = a })
-
-instance FromXML TemplateParameter where
-    parseXML x = TemplateParameter
-        <$> x .@? "DefaultValue"
-        <*> x .@? "Description"
-        <*> x .@? "NoEcho"
-        <*> x .@? "ParameterKey"
-
-instance ToQuery TemplateParameter where
-    toQuery TemplateParameter{..} = mconcat
-        [ "DefaultValue" =? _tpDefaultValue
-        , "Description"  =? _tpDescription
-        , "NoEcho"       =? _tpNoEcho
-        , "ParameterKey" =? _tpParameterKey
-        ]
-
-data ParameterDeclaration = ParameterDeclaration
-    { _pdDefaultValue         :: Maybe Text
-    , _pdDescription          :: Maybe Text
-    , _pdNoEcho               :: Maybe Bool
-    , _pdParameterConstraints :: Maybe ParameterConstraints
-    , _pdParameterKey         :: Maybe Text
-    , _pdParameterType        :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'ParameterDeclaration' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pdDefaultValue' @::@ 'Maybe' 'Text'
---
--- * 'pdDescription' @::@ 'Maybe' 'Text'
---
--- * 'pdNoEcho' @::@ 'Maybe' 'Bool'
---
--- * 'pdParameterConstraints' @::@ 'Maybe' 'ParameterConstraints'
---
--- * 'pdParameterKey' @::@ 'Maybe' 'Text'
---
--- * 'pdParameterType' @::@ 'Maybe' 'Text'
---
-parameterDeclaration :: ParameterDeclaration
-parameterDeclaration = ParameterDeclaration
-    { _pdParameterKey         = Nothing
-    , _pdDefaultValue         = Nothing
-    , _pdParameterType        = Nothing
-    , _pdNoEcho               = Nothing
-    , _pdDescription          = Nothing
-    , _pdParameterConstraints = Nothing
-    }
-
--- | The default value of the parameter.
-pdDefaultValue :: Lens' ParameterDeclaration (Maybe Text)
-pdDefaultValue = lens _pdDefaultValue (\s a -> s { _pdDefaultValue = a })
-
--- | The description that is associate with the parameter.
-pdDescription :: Lens' ParameterDeclaration (Maybe Text)
-pdDescription = lens _pdDescription (\s a -> s { _pdDescription = a })
-
--- | Flag that indicates whether the parameter value is shown as plain text in
--- logs and in the AWS Management Console.
-pdNoEcho :: Lens' ParameterDeclaration (Maybe Bool)
-pdNoEcho = lens _pdNoEcho (\s a -> s { _pdNoEcho = a })
-
--- | The criteria that AWS CloudFormation uses to validate parameter values.
-pdParameterConstraints :: Lens' ParameterDeclaration (Maybe ParameterConstraints)
-pdParameterConstraints =
-    lens _pdParameterConstraints (\s a -> s { _pdParameterConstraints = a })
-
--- | The name that is associated with the parameter.
-pdParameterKey :: Lens' ParameterDeclaration (Maybe Text)
-pdParameterKey = lens _pdParameterKey (\s a -> s { _pdParameterKey = a })
-
--- | The type of parameter.
-pdParameterType :: Lens' ParameterDeclaration (Maybe Text)
-pdParameterType = lens _pdParameterType (\s a -> s { _pdParameterType = a })
-
-instance FromXML ParameterDeclaration where
-    parseXML x = ParameterDeclaration
-        <$> x .@? "DefaultValue"
-        <*> x .@? "Description"
-        <*> x .@? "NoEcho"
-        <*> x .@? "ParameterConstraints"
-        <*> x .@? "ParameterKey"
-        <*> x .@? "ParameterType"
-
-instance ToQuery ParameterDeclaration where
-    toQuery ParameterDeclaration{..} = mconcat
-        [ "DefaultValue"         =? _pdDefaultValue
-        , "Description"          =? _pdDescription
-        , "NoEcho"               =? _pdNoEcho
-        , "ParameterConstraints" =? _pdParameterConstraints
-        , "ParameterKey"         =? _pdParameterKey
-        , "ParameterType"        =? _pdParameterType
-        ]
-
-data StackResource = StackResource
-    { _sr1Description          :: Maybe Text
-    , _sr1LogicalResourceId    :: Text
-    , _sr1PhysicalResourceId   :: Maybe Text
-    , _sr1ResourceStatus       :: ResourceStatus
-    , _sr1ResourceStatusReason :: Maybe Text
-    , _sr1ResourceType         :: Text
-    , _sr1StackId              :: Maybe Text
-    , _sr1StackName            :: Maybe Text
-    , _sr1Timestamp            :: ISO8601
-    } deriving (Eq, Read, Show)
-
--- | 'StackResource' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sr1Description' @::@ 'Maybe' 'Text'
---
--- * 'sr1LogicalResourceId' @::@ 'Text'
---
--- * 'sr1PhysicalResourceId' @::@ 'Maybe' 'Text'
---
--- * 'sr1ResourceStatus' @::@ 'ResourceStatus'
---
--- * 'sr1ResourceStatusReason' @::@ 'Maybe' 'Text'
---
--- * 'sr1ResourceType' @::@ 'Text'
---
--- * 'sr1StackId' @::@ 'Maybe' 'Text'
---
--- * 'sr1StackName' @::@ 'Maybe' 'Text'
---
--- * 'sr1Timestamp' @::@ 'UTCTime'
---
-stackResource :: Text -- ^ 'sr1LogicalResourceId'
-              -> Text -- ^ 'sr1ResourceType'
-              -> UTCTime -- ^ 'sr1Timestamp'
-              -> ResourceStatus -- ^ 'sr1ResourceStatus'
-              -> StackResource
-stackResource p1 p2 p3 p4 = StackResource
-    { _sr1LogicalResourceId    = p1
-    , _sr1ResourceType         = p2
-    , _sr1Timestamp            = withIso _Time (const id) p3
-    , _sr1ResourceStatus       = p4
-    , _sr1StackName            = Nothing
-    , _sr1StackId              = Nothing
-    , _sr1PhysicalResourceId   = Nothing
-    , _sr1ResourceStatusReason = Nothing
-    , _sr1Description          = Nothing
-    }
-
--- | User defined description associated with the resource.
-sr1Description :: Lens' StackResource (Maybe Text)
-sr1Description = lens _sr1Description (\s a -> s { _sr1Description = a })
-
--- | The logical name of the resource specified in the template.
-sr1LogicalResourceId :: Lens' StackResource Text
-sr1LogicalResourceId =
-    lens _sr1LogicalResourceId (\s a -> s { _sr1LogicalResourceId = a })
-
--- | The name or unique identifier that corresponds to a physical instance ID of a
--- resource supported by AWS CloudFormation.
-sr1PhysicalResourceId :: Lens' StackResource (Maybe Text)
-sr1PhysicalResourceId =
-    lens _sr1PhysicalResourceId (\s a -> s { _sr1PhysicalResourceId = a })
-
--- | Current status of the resource.
-sr1ResourceStatus :: Lens' StackResource ResourceStatus
-sr1ResourceStatus =
-    lens _sr1ResourceStatus (\s a -> s { _sr1ResourceStatus = a })
-
--- | Success/failure message associated with the resource.
-sr1ResourceStatusReason :: Lens' StackResource (Maybe Text)
-sr1ResourceStatusReason =
-    lens _sr1ResourceStatusReason (\s a -> s { _sr1ResourceStatusReason = a })
-
--- | Type of resource. (For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html  AWS Resource Types Reference>
--- in the AWS CloudFormation User Guide.)
-sr1ResourceType :: Lens' StackResource Text
-sr1ResourceType = lens _sr1ResourceType (\s a -> s { _sr1ResourceType = a })
-
--- | Unique identifier of the stack.
-sr1StackId :: Lens' StackResource (Maybe Text)
-sr1StackId = lens _sr1StackId (\s a -> s { _sr1StackId = a })
-
--- | The name associated with the stack.
-sr1StackName :: Lens' StackResource (Maybe Text)
-sr1StackName = lens _sr1StackName (\s a -> s { _sr1StackName = a })
-
--- | Time the status was updated.
-sr1Timestamp :: Lens' StackResource UTCTime
-sr1Timestamp = lens _sr1Timestamp (\s a -> s { _sr1Timestamp = a }) . _Time
-
-instance FromXML StackResource where
-    parseXML x = StackResource
-        <$> x .@? "Description"
-        <*> x .@  "LogicalResourceId"
-        <*> x .@? "PhysicalResourceId"
-        <*> x .@  "ResourceStatus"
-        <*> x .@? "ResourceStatusReason"
-        <*> x .@  "ResourceType"
-        <*> x .@? "StackId"
-        <*> x .@? "StackName"
-        <*> x .@  "Timestamp"
-
-instance ToQuery StackResource where
-    toQuery StackResource{..} = mconcat
-        [ "Description"          =? _sr1Description
-        , "LogicalResourceId"    =? _sr1LogicalResourceId
-        , "PhysicalResourceId"   =? _sr1PhysicalResourceId
-        , "ResourceStatus"       =? _sr1ResourceStatus
-        , "ResourceStatusReason" =? _sr1ResourceStatusReason
-        , "ResourceType"         =? _sr1ResourceType
-        , "StackId"              =? _sr1StackId
-        , "StackName"            =? _sr1StackName
-        , "Timestamp"            =? _sr1Timestamp
-        ]
-
-data Output = Output
-    { _oDescription :: Maybe Text
-    , _oOutputKey   :: Maybe Text
-    , _oOutputValue :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Output' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'oDescription' @::@ 'Maybe' 'Text'
---
--- * 'oOutputKey' @::@ 'Maybe' 'Text'
---
--- * 'oOutputValue' @::@ 'Maybe' 'Text'
---
-output :: Output
-output = Output
-    { _oOutputKey   = Nothing
-    , _oOutputValue = Nothing
-    , _oDescription = Nothing
-    }
-
--- | User defined description associated with the output.
-oDescription :: Lens' Output (Maybe Text)
-oDescription = lens _oDescription (\s a -> s { _oDescription = a })
-
--- | The key associated with the output.
-oOutputKey :: Lens' Output (Maybe Text)
-oOutputKey = lens _oOutputKey (\s a -> s { _oOutputKey = a })
-
--- | The value associated with the output.
-oOutputValue :: Lens' Output (Maybe Text)
-oOutputValue = lens _oOutputValue (\s a -> s { _oOutputValue = a })
-
-instance FromXML Output where
-    parseXML x = Output
-        <$> x .@? "Description"
-        <*> x .@? "OutputKey"
-        <*> x .@? "OutputValue"
-
-instance ToQuery Output where
-    toQuery Output{..} = mconcat
-        [ "Description" =? _oDescription
-        , "OutputKey"   =? _oOutputKey
-        , "OutputValue" =? _oOutputValue
-        ]
-
-newtype ParameterConstraints = ParameterConstraints
-    { _pcAllowedValues :: List "member" Text
-    } deriving (Eq, Ord, Read, Show, Monoid, Semigroup)
-
-instance GHC.Exts.IsList ParameterConstraints where
-    type Item ParameterConstraints = Text
-
-    fromList = ParameterConstraints . GHC.Exts.fromList
-    toList   = GHC.Exts.toList . _pcAllowedValues
-
--- | 'ParameterConstraints' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pcAllowedValues' @::@ ['Text']
---
-parameterConstraints :: ParameterConstraints
-parameterConstraints = ParameterConstraints
-    { _pcAllowedValues = mempty
-    }
-
--- | A list of values that are permitted for a parameter.
-pcAllowedValues :: Lens' ParameterConstraints [Text]
-pcAllowedValues = lens _pcAllowedValues (\s a -> s { _pcAllowedValues = a }) . _List
-
-instance FromXML ParameterConstraints where
-    parseXML x = ParameterConstraints
-        <$> x .@? "AllowedValues" .!@ mempty
-
-instance ToQuery ParameterConstraints where
-    toQuery ParameterConstraints{..} = mconcat
-        [ "AllowedValues" =? _pcAllowedValues
-        ]
-
-data StackResourceSummary = StackResourceSummary
-    { _srsLastUpdatedTimestamp :: ISO8601
-    , _srsLogicalResourceId    :: Text
-    , _srsPhysicalResourceId   :: Maybe Text
-    , _srsResourceStatus       :: ResourceStatus
-    , _srsResourceStatusReason :: Maybe Text
-    , _srsResourceType         :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'StackResourceSummary' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'srsLastUpdatedTimestamp' @::@ 'UTCTime'
---
--- * 'srsLogicalResourceId' @::@ 'Text'
---
--- * 'srsPhysicalResourceId' @::@ 'Maybe' 'Text'
---
--- * 'srsResourceStatus' @::@ 'ResourceStatus'
---
--- * 'srsResourceStatusReason' @::@ 'Maybe' 'Text'
---
--- * 'srsResourceType' @::@ 'Text'
---
-stackResourceSummary :: Text -- ^ 'srsLogicalResourceId'
-                     -> Text -- ^ 'srsResourceType'
-                     -> UTCTime -- ^ 'srsLastUpdatedTimestamp'
-                     -> ResourceStatus -- ^ 'srsResourceStatus'
-                     -> StackResourceSummary
-stackResourceSummary p1 p2 p3 p4 = StackResourceSummary
-    { _srsLogicalResourceId    = p1
-    , _srsResourceType         = p2
-    , _srsLastUpdatedTimestamp = withIso _Time (const id) p3
-    , _srsResourceStatus       = p4
-    , _srsPhysicalResourceId   = Nothing
-    , _srsResourceStatusReason = Nothing
-    }
-
--- | Time the status was updated.
-srsLastUpdatedTimestamp :: Lens' StackResourceSummary UTCTime
-srsLastUpdatedTimestamp =
-    lens _srsLastUpdatedTimestamp (\s a -> s { _srsLastUpdatedTimestamp = a })
-        . _Time
-
--- | The logical name of the resource specified in the template.
-srsLogicalResourceId :: Lens' StackResourceSummary Text
-srsLogicalResourceId =
-    lens _srsLogicalResourceId (\s a -> s { _srsLogicalResourceId = a })
-
--- | The name or unique identifier that corresponds to a physical instance ID of
--- the resource.
-srsPhysicalResourceId :: Lens' StackResourceSummary (Maybe Text)
-srsPhysicalResourceId =
-    lens _srsPhysicalResourceId (\s a -> s { _srsPhysicalResourceId = a })
-
--- | Current status of the resource.
-srsResourceStatus :: Lens' StackResourceSummary ResourceStatus
-srsResourceStatus =
-    lens _srsResourceStatus (\s a -> s { _srsResourceStatus = a })
-
--- | Success/failure message associated with the resource.
-srsResourceStatusReason :: Lens' StackResourceSummary (Maybe Text)
-srsResourceStatusReason =
-    lens _srsResourceStatusReason (\s a -> s { _srsResourceStatusReason = a })
-
--- | Type of resource. (For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html  AWS Resource Types Reference>
--- in the AWS CloudFormation User Guide.)
-srsResourceType :: Lens' StackResourceSummary Text
-srsResourceType = lens _srsResourceType (\s a -> s { _srsResourceType = a })
-
-instance FromXML StackResourceSummary where
-    parseXML x = StackResourceSummary
-        <$> x .@  "LastUpdatedTimestamp"
-        <*> x .@  "LogicalResourceId"
-        <*> x .@? "PhysicalResourceId"
-        <*> x .@  "ResourceStatus"
-        <*> x .@? "ResourceStatusReason"
-        <*> x .@  "ResourceType"
-
-instance ToQuery StackResourceSummary where
-    toQuery StackResourceSummary{..} = mconcat
-        [ "LastUpdatedTimestamp" =? _srsLastUpdatedTimestamp
-        , "LogicalResourceId"    =? _srsLogicalResourceId
-        , "PhysicalResourceId"   =? _srsPhysicalResourceId
-        , "ResourceStatus"       =? _srsResourceStatus
-        , "ResourceStatusReason" =? _srsResourceStatusReason
-        , "ResourceType"         =? _srsResourceType
-        ]
-
-data Capability
-    = CapabilityIam -- ^ CAPABILITY_IAM
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Capability
-
-instance FromText Capability where
-    parser = takeLowerText >>= \case
-        "capability_iam" -> pure CapabilityIam
-        e                -> fail $
-            "Failure parsing Capability from " ++ show e
-
-instance ToText Capability where
-    toText CapabilityIam = "CAPABILITY_IAM"
-
-instance ToByteString Capability
-instance ToHeader     Capability
-instance ToQuery      Capability
-
-instance FromXML Capability where
-    parseXML = parseXMLText "Capability"
-
-data ResourceSignalStatus
-    = Failure -- ^ FAILURE
-    | Success -- ^ SUCCESS
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ResourceSignalStatus
-
-instance FromText ResourceSignalStatus where
-    parser = takeLowerText >>= \case
-        "failure" -> pure Failure
-        "success" -> pure Success
-        e         -> fail $
-            "Failure parsing ResourceSignalStatus from " ++ show e
-
-instance ToText ResourceSignalStatus where
-    toText = \case
-        Failure -> "FAILURE"
-        Success -> "SUCCESS"
-
-instance ToByteString ResourceSignalStatus
-instance ToHeader     ResourceSignalStatus
-instance ToQuery      ResourceSignalStatus
-
-instance FromXML ResourceSignalStatus where
-    parseXML = parseXMLText "ResourceSignalStatus"
-
-data Stack = Stack
-    { _sCapabilities      :: List "member" Capability
-    , _sCreationTime      :: ISO8601
-    , _sDescription       :: Maybe Text
-    , _sDisableRollback   :: Maybe Bool
-    , _sLastUpdatedTime   :: Maybe ISO8601
-    , _sNotificationARNs  :: List "member" Text
-    , _sOutputs           :: List "member" Output
-    , _sParameters        :: List "member" Parameter
-    , _sStackId           :: Maybe Text
-    , _sStackName         :: Text
-    , _sStackStatus       :: StackStatus
-    , _sStackStatusReason :: Maybe Text
-    , _sTags              :: List "member" Tag
-    , _sTimeoutInMinutes  :: Maybe Nat
-    } deriving (Eq, Read, Show)
-
--- | 'Stack' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sCapabilities' @::@ ['Capability']
---
--- * 'sCreationTime' @::@ 'UTCTime'
---
--- * 'sDescription' @::@ 'Maybe' 'Text'
---
--- * 'sDisableRollback' @::@ 'Maybe' 'Bool'
---
--- * 'sLastUpdatedTime' @::@ 'Maybe' 'UTCTime'
---
--- * 'sNotificationARNs' @::@ ['Text']
---
--- * 'sOutputs' @::@ ['Output']
---
--- * 'sParameters' @::@ ['Parameter']
---
--- * 'sStackId' @::@ 'Maybe' 'Text'
---
--- * 'sStackName' @::@ 'Text'
---
--- * 'sStackStatus' @::@ 'StackStatus'
---
--- * 'sStackStatusReason' @::@ 'Maybe' 'Text'
---
--- * 'sTags' @::@ ['Tag']
---
--- * 'sTimeoutInMinutes' @::@ 'Maybe' 'Natural'
---
-stack :: Text -- ^ 'sStackName'
-      -> UTCTime -- ^ 'sCreationTime'
-      -> StackStatus -- ^ 'sStackStatus'
-      -> Stack
-stack p1 p2 p3 = Stack
-    { _sStackName         = p1
-    , _sCreationTime      = withIso _Time (const id) p2
-    , _sStackStatus       = p3
-    , _sStackId           = Nothing
-    , _sDescription       = Nothing
-    , _sParameters        = mempty
-    , _sLastUpdatedTime   = Nothing
-    , _sStackStatusReason = Nothing
-    , _sDisableRollback   = Nothing
-    , _sNotificationARNs  = mempty
-    , _sTimeoutInMinutes  = Nothing
-    , _sCapabilities      = mempty
-    , _sOutputs           = mempty
-    , _sTags              = mempty
-    }
-
--- | The capabilities allowed in the stack.
-sCapabilities :: Lens' Stack [Capability]
-sCapabilities = lens _sCapabilities (\s a -> s { _sCapabilities = a }) . _List
-
--- | Time at which the stack was created.
-sCreationTime :: Lens' Stack UTCTime
-sCreationTime = lens _sCreationTime (\s a -> s { _sCreationTime = a }) . _Time
-
--- | User defined description associated with the stack.
-sDescription :: Lens' Stack (Maybe Text)
-sDescription = lens _sDescription (\s a -> s { _sDescription = a })
-
--- | Boolean to enable or disable rollback on stack creation failures:
---
--- 'true': disable rollback  'false': enable rollback
-sDisableRollback :: Lens' Stack (Maybe Bool)
-sDisableRollback = lens _sDisableRollback (\s a -> s { _sDisableRollback = a })
-
--- | The time the stack was last updated. This field will only be returned if the
--- stack has been updated at least once.
-sLastUpdatedTime :: Lens' Stack (Maybe UTCTime)
-sLastUpdatedTime = lens _sLastUpdatedTime (\s a -> s { _sLastUpdatedTime = a }) . mapping _Time
-
--- | SNS topic ARNs to which stack related events are published.
-sNotificationARNs :: Lens' Stack [Text]
-sNotificationARNs =
-    lens _sNotificationARNs (\s a -> s { _sNotificationARNs = a })
-        . _List
-
--- | A list of output structures.
-sOutputs :: Lens' Stack [Output]
-sOutputs = lens _sOutputs (\s a -> s { _sOutputs = a }) . _List
-
--- | A list of 'Parameter' structures.
-sParameters :: Lens' Stack [Parameter]
-sParameters = lens _sParameters (\s a -> s { _sParameters = a }) . _List
-
--- | Unique identifier of the stack.
-sStackId :: Lens' Stack (Maybe Text)
-sStackId = lens _sStackId (\s a -> s { _sStackId = a })
-
--- | The name associated with the stack.
-sStackName :: Lens' Stack Text
-sStackName = lens _sStackName (\s a -> s { _sStackName = a })
-
--- | Current status of the stack.
-sStackStatus :: Lens' Stack StackStatus
-sStackStatus = lens _sStackStatus (\s a -> s { _sStackStatus = a })
-
--- | Success/failure message associated with the stack status.
-sStackStatusReason :: Lens' Stack (Maybe Text)
-sStackStatusReason =
-    lens _sStackStatusReason (\s a -> s { _sStackStatusReason = a })
-
--- | A list of 'Tag's that specify cost allocation information for the stack.
-sTags :: Lens' Stack [Tag]
-sTags = lens _sTags (\s a -> s { _sTags = a }) . _List
-
--- | The amount of time within which stack creation should complete.
-sTimeoutInMinutes :: Lens' Stack (Maybe Natural)
-sTimeoutInMinutes =
-    lens _sTimeoutInMinutes (\s a -> s { _sTimeoutInMinutes = a })
-        . mapping _Nat
-
-instance FromXML Stack where
-    parseXML x = Stack
-        <$> x .@? "Capabilities" .!@ mempty
-        <*> x .@  "CreationTime"
-        <*> x .@? "Description"
-        <*> x .@? "DisableRollback"
-        <*> x .@? "LastUpdatedTime"
-        <*> x .@? "NotificationARNs" .!@ mempty
-        <*> x .@? "Outputs" .!@ mempty
-        <*> x .@? "Parameters" .!@ mempty
-        <*> x .@? "StackId"
-        <*> x .@  "StackName"
-        <*> x .@  "StackStatus"
-        <*> x .@? "StackStatusReason"
-        <*> x .@? "Tags" .!@ mempty
-        <*> x .@? "TimeoutInMinutes"
-
-instance ToQuery Stack where
-    toQuery Stack{..} = mconcat
-        [ "Capabilities"      =? _sCapabilities
-        , "CreationTime"      =? _sCreationTime
-        , "Description"       =? _sDescription
-        , "DisableRollback"   =? _sDisableRollback
-        , "LastUpdatedTime"   =? _sLastUpdatedTime
-        , "NotificationARNs"  =? _sNotificationARNs
-        , "Outputs"           =? _sOutputs
-        , "Parameters"        =? _sParameters
-        , "StackId"           =? _sStackId
-        , "StackName"         =? _sStackName
-        , "StackStatus"       =? _sStackStatus
-        , "StackStatusReason" =? _sStackStatusReason
-        , "Tags"              =? _sTags
-        , "TimeoutInMinutes"  =? _sTimeoutInMinutes
-        ]
-
-data OnFailure
-    = Delete'   -- ^ DELETE
-    | DoNothing -- ^ DO_NOTHING
-    | Rollback  -- ^ ROLLBACK
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable OnFailure
-
-instance FromText OnFailure where
-    parser = takeLowerText >>= \case
-        "delete"     -> pure Delete'
-        "do_nothing" -> pure DoNothing
-        "rollback"   -> pure Rollback
-        e            -> fail $
-            "Failure parsing OnFailure from " ++ show e
-
-instance ToText OnFailure where
-    toText = \case
-        Delete'   -> "DELETE"
-        DoNothing -> "DO_NOTHING"
-        Rollback  -> "ROLLBACK"
-
-instance ToByteString OnFailure
-instance ToHeader     OnFailure
-instance ToQuery      OnFailure
-
-instance FromXML OnFailure where
-    parseXML = parseXMLText "OnFailure"
-
-data Parameter = Parameter
-    { _pParameterKey     :: Maybe Text
-    , _pParameterValue   :: Maybe Text
-    , _pUsePreviousValue :: Maybe Bool
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Parameter' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pParameterKey' @::@ 'Maybe' 'Text'
---
--- * 'pParameterValue' @::@ 'Maybe' 'Text'
---
--- * 'pUsePreviousValue' @::@ 'Maybe' 'Bool'
---
-parameter :: Parameter
-parameter = Parameter
-    { _pParameterKey     = Nothing
-    , _pParameterValue   = Nothing
-    , _pUsePreviousValue = Nothing
-    }
-
--- | The key associated with the parameter. If you don't specify a key and value
--- for a particular parameter, AWS CloudFormation uses the default value that is
--- specified in your template.
-pParameterKey :: Lens' Parameter (Maybe Text)
-pParameterKey = lens _pParameterKey (\s a -> s { _pParameterKey = a })
-
--- | The value associated with the parameter.
-pParameterValue :: Lens' Parameter (Maybe Text)
-pParameterValue = lens _pParameterValue (\s a -> s { _pParameterValue = a })
-
--- | During a stack update, use the existing parameter value that the stack is
--- using for a given parameter key. If you specify 'true', do not specify a
--- parameter value.
-pUsePreviousValue :: Lens' Parameter (Maybe Bool)
-pUsePreviousValue =
-    lens _pUsePreviousValue (\s a -> s { _pUsePreviousValue = a })
-
-instance FromXML Parameter where
-    parseXML x = Parameter
-        <$> x .@? "ParameterKey"
-        <*> x .@? "ParameterValue"
-        <*> x .@? "UsePreviousValue"
-
-instance ToQuery Parameter where
-    toQuery Parameter{..} = mconcat
-        [ "ParameterKey"     =? _pParameterKey
-        , "ParameterValue"   =? _pParameterValue
-        , "UsePreviousValue" =? _pUsePreviousValue
-        ]
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudFormation.Types
+-- 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.CloudFormation.Types
+    (
+    -- * Service
+      CloudFormation
+
+    -- * Errors
+    , _InsufficientCapabilitiesException
+    , _LimitExceededException
+    , _AlreadyExistsException
+
+    -- * Capability
+    , Capability (..)
+
+    -- * OnFailure
+    , OnFailure (..)
+
+    -- * ResourceSignalStatus
+    , ResourceSignalStatus (..)
+
+    -- * ResourceStatus
+    , ResourceStatus (..)
+
+    -- * StackStatus
+    , StackStatus (..)
+
+    -- * Output
+    , Output
+    , output
+    , oOutputValue
+    , oOutputKey
+    , oDescription
+
+    -- * Parameter
+    , Parameter
+    , parameter
+    , pParameterValue
+    , pParameterKey
+    , pUsePreviousValue
+
+    -- * ParameterConstraints
+    , ParameterConstraints
+    , parameterConstraints
+    , pcAllowedValues
+
+    -- * ParameterDeclaration
+    , ParameterDeclaration
+    , parameterDeclaration
+    , pdParameterKey
+    , pdParameterType
+    , pdParameterConstraints
+    , pdDefaultValue
+    , pdNoEcho
+    , pdDescription
+
+    -- * Stack
+    , Stack
+    , stack
+    , sDisableRollback
+    , sLastUpdatedTime
+    , sNotificationARNs
+    , sStackStatusReason
+    , sOutputs
+    , sParameters
+    , sStackId
+    , sCapabilities
+    , sDescription
+    , sTags
+    , sTimeoutInMinutes
+    , sStackName
+    , sCreationTime
+    , sStackStatus
+
+    -- * StackEvent
+    , StackEvent
+    , stackEvent
+    , seLogicalResourceId
+    , seResourceStatusReason
+    , seResourceType
+    , sePhysicalResourceId
+    , seResourceProperties
+    , seResourceStatus
+    , seStackId
+    , seEventId
+    , seStackName
+    , seTimestamp
+
+    -- * StackResource
+    , StackResource
+    , stackResource
+    , srResourceStatusReason
+    , srPhysicalResourceId
+    , srStackId
+    , srDescription
+    , srStackName
+    , srLogicalResourceId
+    , srResourceType
+    , srTimestamp
+    , srResourceStatus
+
+    -- * StackResourceDetail
+    , StackResourceDetail
+    , stackResourceDetail
+    , srdResourceStatusReason
+    , srdPhysicalResourceId
+    , srdMetadata
+    , srdStackId
+    , srdDescription
+    , srdStackName
+    , srdLogicalResourceId
+    , srdResourceType
+    , srdLastUpdatedTimestamp
+    , srdResourceStatus
+
+    -- * StackResourceSummary
+    , StackResourceSummary
+    , stackResourceSummary
+    , srsResourceStatusReason
+    , srsPhysicalResourceId
+    , srsLogicalResourceId
+    , srsResourceType
+    , srsLastUpdatedTimestamp
+    , srsResourceStatus
+
+    -- * StackSummary
+    , StackSummary
+    , stackSummary
+    , ssLastUpdatedTime
+    , ssTemplateDescription
+    , ssStackStatusReason
+    , ssDeletionTime
+    , ssStackId
+    , ssStackName
+    , ssCreationTime
+    , ssStackStatus
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+
+    -- * TemplateParameter
+    , TemplateParameter
+    , templateParameter
+    , tpParameterKey
+    , tpDefaultValue
+    , tpNoEcho
+    , tpDescription
+    ) where
+
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.CloudFormation.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+
+-- | Version @2010-05-15@ of the Amazon CloudFormation SDK.
+data CloudFormation
+
+instance AWSService CloudFormation where
+    type Sg CloudFormation = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "CloudFormation"
+            , _svcPrefix = "cloudformation"
+            , _svcVersion = "2010-05-15"
+            , _svcEndpoint = defaultEndpoint svc
+            , _svcTimeout = Just 70
+            , _svcStatus = statusSuccess
+            , _svcError = parseXMLError
+            , _svcRetry = retry
+            }
+        retry =
+            Exponential
+            { _retryBase = 5.0e-2
+            , _retryGrowth = 2
+            , _retryAttempts = 5
+            , _retryCheck = check
+            }
+        check e
+          | 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
+
+-- | The template contains resources with capabilities that were not
+-- specified in the Capabilities parameter.
+_InsufficientCapabilitiesException :: AsError a => Getting (First ServiceError) a ServiceError
+_InsufficientCapabilitiesException =
+    _ServiceError . hasStatus 400 . hasCode "InsufficientCapabilitiesException"
+
+-- | Quota for the resource has already been reached.
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException =
+    _ServiceError . hasStatus 400 . hasCode "LimitExceededException"
+
+-- | Resource with the name requested already exists.
+_AlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
+_AlreadyExistsException =
+    _ServiceError . hasStatus 400 . hasCode "AlreadyExistsException"
diff --git a/gen/Network/AWS/CloudFormation/Types/Product.hs b/gen/Network/AWS/CloudFormation/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudFormation/Types/Product.hs
@@ -0,0 +1,1005 @@
+{-# 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.CloudFormation.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.CloudFormation.Types.Product where
+
+import           Network.AWS.CloudFormation.Types.Sum
+import           Network.AWS.Prelude
+
+-- | The Output data type.
+--
+-- /See:/ 'output' smart constructor.
+data Output = Output'
+    { _oOutputValue :: !(Maybe Text)
+    , _oOutputKey   :: !(Maybe Text)
+    , _oDescription :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Output' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oOutputValue'
+--
+-- * 'oOutputKey'
+--
+-- * 'oDescription'
+output
+    :: Output
+output =
+    Output'
+    { _oOutputValue = Nothing
+    , _oOutputKey = Nothing
+    , _oDescription = Nothing
+    }
+
+-- | The value associated with the output.
+oOutputValue :: Lens' Output (Maybe Text)
+oOutputValue = lens _oOutputValue (\ s a -> s{_oOutputValue = a});
+
+-- | The key associated with the output.
+oOutputKey :: Lens' Output (Maybe Text)
+oOutputKey = lens _oOutputKey (\ s a -> s{_oOutputKey = a});
+
+-- | User defined description associated with the output.
+oDescription :: Lens' Output (Maybe Text)
+oDescription = lens _oDescription (\ s a -> s{_oDescription = a});
+
+instance FromXML Output where
+        parseXML x
+          = Output' <$>
+              (x .@? "OutputValue") <*> (x .@? "OutputKey") <*>
+                (x .@? "Description")
+
+-- | The Parameter data type.
+--
+-- /See:/ 'parameter' smart constructor.
+data Parameter = Parameter'
+    { _pParameterValue   :: !(Maybe Text)
+    , _pParameterKey     :: !(Maybe Text)
+    , _pUsePreviousValue :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Parameter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pParameterValue'
+--
+-- * 'pParameterKey'
+--
+-- * 'pUsePreviousValue'
+parameter
+    :: Parameter
+parameter =
+    Parameter'
+    { _pParameterValue = Nothing
+    , _pParameterKey = Nothing
+    , _pUsePreviousValue = Nothing
+    }
+
+-- | The value associated with the parameter.
+pParameterValue :: Lens' Parameter (Maybe Text)
+pParameterValue = lens _pParameterValue (\ s a -> s{_pParameterValue = a});
+
+-- | The key associated with the parameter. If you don\'t specify a key and
+-- value for a particular parameter, AWS CloudFormation uses the default
+-- value that is specified in your template.
+pParameterKey :: Lens' Parameter (Maybe Text)
+pParameterKey = lens _pParameterKey (\ s a -> s{_pParameterKey = a});
+
+-- | During a stack update, use the existing parameter value that the stack
+-- is using for a given parameter key. If you specify 'true', do not
+-- specify a parameter value.
+pUsePreviousValue :: Lens' Parameter (Maybe Bool)
+pUsePreviousValue = lens _pUsePreviousValue (\ s a -> s{_pUsePreviousValue = a});
+
+instance FromXML Parameter where
+        parseXML x
+          = Parameter' <$>
+              (x .@? "ParameterValue") <*> (x .@? "ParameterKey")
+                <*> (x .@? "UsePreviousValue")
+
+instance ToQuery Parameter where
+        toQuery Parameter'{..}
+          = mconcat
+              ["ParameterValue" =: _pParameterValue,
+               "ParameterKey" =: _pParameterKey,
+               "UsePreviousValue" =: _pUsePreviousValue]
+
+-- | A set of criteria that AWS CloudFormation uses to validate parameter
+-- values. Although other constraints might be defined in the stack
+-- template, AWS CloudFormation returns only the 'AllowedValues' property.
+--
+-- /See:/ 'parameterConstraints' smart constructor.
+newtype ParameterConstraints = ParameterConstraints'
+    { _pcAllowedValues :: Maybe [Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ParameterConstraints' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcAllowedValues'
+parameterConstraints
+    :: ParameterConstraints
+parameterConstraints =
+    ParameterConstraints'
+    { _pcAllowedValues = Nothing
+    }
+
+-- | A list of values that are permitted for a parameter.
+pcAllowedValues :: Lens' ParameterConstraints [Text]
+pcAllowedValues = lens _pcAllowedValues (\ s a -> s{_pcAllowedValues = a}) . _Default . _Coerce;
+
+instance FromXML ParameterConstraints where
+        parseXML x
+          = ParameterConstraints' <$>
+              (x .@? "AllowedValues" .!@ mempty >>=
+                 may (parseXMLList "member"))
+
+-- | The ParameterDeclaration data type.
+--
+-- /See:/ 'parameterDeclaration' smart constructor.
+data ParameterDeclaration = ParameterDeclaration'
+    { _pdParameterKey         :: !(Maybe Text)
+    , _pdParameterType        :: !(Maybe Text)
+    , _pdParameterConstraints :: !(Maybe ParameterConstraints)
+    , _pdDefaultValue         :: !(Maybe Text)
+    , _pdNoEcho               :: !(Maybe Bool)
+    , _pdDescription          :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ParameterDeclaration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdParameterKey'
+--
+-- * 'pdParameterType'
+--
+-- * 'pdParameterConstraints'
+--
+-- * 'pdDefaultValue'
+--
+-- * 'pdNoEcho'
+--
+-- * 'pdDescription'
+parameterDeclaration
+    :: ParameterDeclaration
+parameterDeclaration =
+    ParameterDeclaration'
+    { _pdParameterKey = Nothing
+    , _pdParameterType = Nothing
+    , _pdParameterConstraints = Nothing
+    , _pdDefaultValue = Nothing
+    , _pdNoEcho = Nothing
+    , _pdDescription = Nothing
+    }
+
+-- | The name that is associated with the parameter.
+pdParameterKey :: Lens' ParameterDeclaration (Maybe Text)
+pdParameterKey = lens _pdParameterKey (\ s a -> s{_pdParameterKey = a});
+
+-- | The type of parameter.
+pdParameterType :: Lens' ParameterDeclaration (Maybe Text)
+pdParameterType = lens _pdParameterType (\ s a -> s{_pdParameterType = a});
+
+-- | The criteria that AWS CloudFormation uses to validate parameter values.
+pdParameterConstraints :: Lens' ParameterDeclaration (Maybe ParameterConstraints)
+pdParameterConstraints = lens _pdParameterConstraints (\ s a -> s{_pdParameterConstraints = a});
+
+-- | The default value of the parameter.
+pdDefaultValue :: Lens' ParameterDeclaration (Maybe Text)
+pdDefaultValue = lens _pdDefaultValue (\ s a -> s{_pdDefaultValue = a});
+
+-- | Flag that indicates whether the parameter value is shown as plain text
+-- in logs and in the AWS Management Console.
+pdNoEcho :: Lens' ParameterDeclaration (Maybe Bool)
+pdNoEcho = lens _pdNoEcho (\ s a -> s{_pdNoEcho = a});
+
+-- | The description that is associate with the parameter.
+pdDescription :: Lens' ParameterDeclaration (Maybe Text)
+pdDescription = lens _pdDescription (\ s a -> s{_pdDescription = a});
+
+instance FromXML ParameterDeclaration where
+        parseXML x
+          = ParameterDeclaration' <$>
+              (x .@? "ParameterKey") <*> (x .@? "ParameterType")
+                <*> (x .@? "ParameterConstraints")
+                <*> (x .@? "DefaultValue")
+                <*> (x .@? "NoEcho")
+                <*> (x .@? "Description")
+
+-- | The Stack data type.
+--
+-- /See:/ 'stack' smart constructor.
+data Stack = Stack'
+    { _sDisableRollback   :: !(Maybe Bool)
+    , _sLastUpdatedTime   :: !(Maybe ISO8601)
+    , _sNotificationARNs  :: !(Maybe [Text])
+    , _sStackStatusReason :: !(Maybe Text)
+    , _sOutputs           :: !(Maybe [Output])
+    , _sParameters        :: !(Maybe [Parameter])
+    , _sStackId           :: !(Maybe Text)
+    , _sCapabilities      :: !(Maybe [Capability])
+    , _sDescription       :: !(Maybe Text)
+    , _sTags              :: !(Maybe [Tag])
+    , _sTimeoutInMinutes  :: !(Maybe Nat)
+    , _sStackName         :: !Text
+    , _sCreationTime      :: !ISO8601
+    , _sStackStatus       :: !StackStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Stack' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDisableRollback'
+--
+-- * 'sLastUpdatedTime'
+--
+-- * 'sNotificationARNs'
+--
+-- * 'sStackStatusReason'
+--
+-- * 'sOutputs'
+--
+-- * 'sParameters'
+--
+-- * 'sStackId'
+--
+-- * 'sCapabilities'
+--
+-- * 'sDescription'
+--
+-- * 'sTags'
+--
+-- * 'sTimeoutInMinutes'
+--
+-- * 'sStackName'
+--
+-- * 'sCreationTime'
+--
+-- * 'sStackStatus'
+stack
+    :: Text -- ^ 'sStackName'
+    -> UTCTime -- ^ 'sCreationTime'
+    -> StackStatus -- ^ 'sStackStatus'
+    -> Stack
+stack pStackName_ pCreationTime_ pStackStatus_ =
+    Stack'
+    { _sDisableRollback = Nothing
+    , _sLastUpdatedTime = Nothing
+    , _sNotificationARNs = Nothing
+    , _sStackStatusReason = Nothing
+    , _sOutputs = Nothing
+    , _sParameters = Nothing
+    , _sStackId = Nothing
+    , _sCapabilities = Nothing
+    , _sDescription = Nothing
+    , _sTags = Nothing
+    , _sTimeoutInMinutes = Nothing
+    , _sStackName = pStackName_
+    , _sCreationTime = _Time # pCreationTime_
+    , _sStackStatus = pStackStatus_
+    }
+
+-- | Boolean to enable or disable rollback on stack creation failures:
+--
+-- -   'true': disable rollback
+-- -   'false': enable rollback
+sDisableRollback :: Lens' Stack (Maybe Bool)
+sDisableRollback = lens _sDisableRollback (\ s a -> s{_sDisableRollback = a});
+
+-- | The time the stack was last updated. This field will only be returned if
+-- the stack has been updated at least once.
+sLastUpdatedTime :: Lens' Stack (Maybe UTCTime)
+sLastUpdatedTime = lens _sLastUpdatedTime (\ s a -> s{_sLastUpdatedTime = a}) . mapping _Time;
+
+-- | SNS topic ARNs to which stack related events are published.
+sNotificationARNs :: Lens' Stack [Text]
+sNotificationARNs = lens _sNotificationARNs (\ s a -> s{_sNotificationARNs = a}) . _Default . _Coerce;
+
+-- | Success\/failure message associated with the stack status.
+sStackStatusReason :: Lens' Stack (Maybe Text)
+sStackStatusReason = lens _sStackStatusReason (\ s a -> s{_sStackStatusReason = a});
+
+-- | A list of output structures.
+sOutputs :: Lens' Stack [Output]
+sOutputs = lens _sOutputs (\ s a -> s{_sOutputs = a}) . _Default . _Coerce;
+
+-- | A list of 'Parameter' structures.
+sParameters :: Lens' Stack [Parameter]
+sParameters = lens _sParameters (\ s a -> s{_sParameters = a}) . _Default . _Coerce;
+
+-- | Unique identifier of the stack.
+sStackId :: Lens' Stack (Maybe Text)
+sStackId = lens _sStackId (\ s a -> s{_sStackId = a});
+
+-- | The capabilities allowed in the stack.
+sCapabilities :: Lens' Stack [Capability]
+sCapabilities = lens _sCapabilities (\ s a -> s{_sCapabilities = a}) . _Default . _Coerce;
+
+-- | User defined description associated with the stack.
+sDescription :: Lens' Stack (Maybe Text)
+sDescription = lens _sDescription (\ s a -> s{_sDescription = a});
+
+-- | A list of 'Tag's that specify cost allocation information for the stack.
+sTags :: Lens' Stack [Tag]
+sTags = lens _sTags (\ s a -> s{_sTags = a}) . _Default . _Coerce;
+
+-- | The amount of time within which stack creation should complete.
+sTimeoutInMinutes :: Lens' Stack (Maybe Natural)
+sTimeoutInMinutes = lens _sTimeoutInMinutes (\ s a -> s{_sTimeoutInMinutes = a}) . mapping _Nat;
+
+-- | The name associated with the stack.
+sStackName :: Lens' Stack Text
+sStackName = lens _sStackName (\ s a -> s{_sStackName = a});
+
+-- | Time at which the stack was created.
+sCreationTime :: Lens' Stack UTCTime
+sCreationTime = lens _sCreationTime (\ s a -> s{_sCreationTime = a}) . _Time;
+
+-- | Current status of the stack.
+sStackStatus :: Lens' Stack StackStatus
+sStackStatus = lens _sStackStatus (\ s a -> s{_sStackStatus = a});
+
+instance FromXML Stack where
+        parseXML x
+          = Stack' <$>
+              (x .@? "DisableRollback") <*>
+                (x .@? "LastUpdatedTime")
+                <*>
+                (x .@? "NotificationARNs" .!@ mempty >>=
+                   may (parseXMLList "member"))
+                <*> (x .@? "StackStatusReason")
+                <*>
+                (x .@? "Outputs" .!@ mempty >>=
+                   may (parseXMLList "member"))
+                <*>
+                (x .@? "Parameters" .!@ mempty >>=
+                   may (parseXMLList "member"))
+                <*> (x .@? "StackId")
+                <*>
+                (x .@? "Capabilities" .!@ mempty >>=
+                   may (parseXMLList "member"))
+                <*> (x .@? "Description")
+                <*>
+                (x .@? "Tags" .!@ mempty >>=
+                   may (parseXMLList "member"))
+                <*> (x .@? "TimeoutInMinutes")
+                <*> (x .@ "StackName")
+                <*> (x .@ "CreationTime")
+                <*> (x .@ "StackStatus")
+
+-- | The StackEvent data type.
+--
+-- /See:/ 'stackEvent' smart constructor.
+data StackEvent = StackEvent'
+    { _seLogicalResourceId    :: !(Maybe Text)
+    , _seResourceStatusReason :: !(Maybe Text)
+    , _seResourceType         :: !(Maybe Text)
+    , _sePhysicalResourceId   :: !(Maybe Text)
+    , _seResourceProperties   :: !(Maybe Text)
+    , _seResourceStatus       :: !(Maybe ResourceStatus)
+    , _seStackId              :: !Text
+    , _seEventId              :: !Text
+    , _seStackName            :: !Text
+    , _seTimestamp            :: !ISO8601
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StackEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'seLogicalResourceId'
+--
+-- * 'seResourceStatusReason'
+--
+-- * 'seResourceType'
+--
+-- * 'sePhysicalResourceId'
+--
+-- * 'seResourceProperties'
+--
+-- * 'seResourceStatus'
+--
+-- * 'seStackId'
+--
+-- * 'seEventId'
+--
+-- * 'seStackName'
+--
+-- * 'seTimestamp'
+stackEvent
+    :: Text -- ^ 'seStackId'
+    -> Text -- ^ 'seEventId'
+    -> Text -- ^ 'seStackName'
+    -> UTCTime -- ^ 'seTimestamp'
+    -> StackEvent
+stackEvent pStackId_ pEventId_ pStackName_ pTimestamp_ =
+    StackEvent'
+    { _seLogicalResourceId = Nothing
+    , _seResourceStatusReason = Nothing
+    , _seResourceType = Nothing
+    , _sePhysicalResourceId = Nothing
+    , _seResourceProperties = Nothing
+    , _seResourceStatus = Nothing
+    , _seStackId = pStackId_
+    , _seEventId = pEventId_
+    , _seStackName = pStackName_
+    , _seTimestamp = _Time # pTimestamp_
+    }
+
+-- | The logical name of the resource specified in the template.
+seLogicalResourceId :: Lens' StackEvent (Maybe Text)
+seLogicalResourceId = lens _seLogicalResourceId (\ s a -> s{_seLogicalResourceId = a});
+
+-- | Success\/failure message associated with the resource.
+seResourceStatusReason :: Lens' StackEvent (Maybe Text)
+seResourceStatusReason = lens _seResourceStatusReason (\ s a -> s{_seResourceStatusReason = a});
+
+-- | Type of resource. (For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html AWS Resource Types Reference>
+-- in the AWS CloudFormation User Guide.)
+seResourceType :: Lens' StackEvent (Maybe Text)
+seResourceType = lens _seResourceType (\ s a -> s{_seResourceType = a});
+
+-- | The name or unique identifier associated with the physical instance of
+-- the resource.
+sePhysicalResourceId :: Lens' StackEvent (Maybe Text)
+sePhysicalResourceId = lens _sePhysicalResourceId (\ s a -> s{_sePhysicalResourceId = a});
+
+-- | BLOB of the properties used to create the resource.
+seResourceProperties :: Lens' StackEvent (Maybe Text)
+seResourceProperties = lens _seResourceProperties (\ s a -> s{_seResourceProperties = a});
+
+-- | Current status of the resource.
+seResourceStatus :: Lens' StackEvent (Maybe ResourceStatus)
+seResourceStatus = lens _seResourceStatus (\ s a -> s{_seResourceStatus = a});
+
+-- | The unique ID name of the instance of the stack.
+seStackId :: Lens' StackEvent Text
+seStackId = lens _seStackId (\ s a -> s{_seStackId = a});
+
+-- | The unique ID of this event.
+seEventId :: Lens' StackEvent Text
+seEventId = lens _seEventId (\ s a -> s{_seEventId = a});
+
+-- | The name associated with a stack.
+seStackName :: Lens' StackEvent Text
+seStackName = lens _seStackName (\ s a -> s{_seStackName = a});
+
+-- | Time the status was updated.
+seTimestamp :: Lens' StackEvent UTCTime
+seTimestamp = lens _seTimestamp (\ s a -> s{_seTimestamp = a}) . _Time;
+
+instance FromXML StackEvent where
+        parseXML x
+          = StackEvent' <$>
+              (x .@? "LogicalResourceId") <*>
+                (x .@? "ResourceStatusReason")
+                <*> (x .@? "ResourceType")
+                <*> (x .@? "PhysicalResourceId")
+                <*> (x .@? "ResourceProperties")
+                <*> (x .@? "ResourceStatus")
+                <*> (x .@ "StackId")
+                <*> (x .@ "EventId")
+                <*> (x .@ "StackName")
+                <*> (x .@ "Timestamp")
+
+-- | The StackResource data type.
+--
+-- /See:/ 'stackResource' smart constructor.
+data StackResource = StackResource'
+    { _srResourceStatusReason :: !(Maybe Text)
+    , _srPhysicalResourceId   :: !(Maybe Text)
+    , _srStackId              :: !(Maybe Text)
+    , _srDescription          :: !(Maybe Text)
+    , _srStackName            :: !(Maybe Text)
+    , _srLogicalResourceId    :: !Text
+    , _srResourceType         :: !Text
+    , _srTimestamp            :: !ISO8601
+    , _srResourceStatus       :: !ResourceStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StackResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srResourceStatusReason'
+--
+-- * 'srPhysicalResourceId'
+--
+-- * 'srStackId'
+--
+-- * 'srDescription'
+--
+-- * 'srStackName'
+--
+-- * 'srLogicalResourceId'
+--
+-- * 'srResourceType'
+--
+-- * 'srTimestamp'
+--
+-- * 'srResourceStatus'
+stackResource
+    :: Text -- ^ 'srLogicalResourceId'
+    -> Text -- ^ 'srResourceType'
+    -> UTCTime -- ^ 'srTimestamp'
+    -> ResourceStatus -- ^ 'srResourceStatus'
+    -> StackResource
+stackResource pLogicalResourceId_ pResourceType_ pTimestamp_ pResourceStatus_ =
+    StackResource'
+    { _srResourceStatusReason = Nothing
+    , _srPhysicalResourceId = Nothing
+    , _srStackId = Nothing
+    , _srDescription = Nothing
+    , _srStackName = Nothing
+    , _srLogicalResourceId = pLogicalResourceId_
+    , _srResourceType = pResourceType_
+    , _srTimestamp = _Time # pTimestamp_
+    , _srResourceStatus = pResourceStatus_
+    }
+
+-- | Success\/failure message associated with the resource.
+srResourceStatusReason :: Lens' StackResource (Maybe Text)
+srResourceStatusReason = lens _srResourceStatusReason (\ s a -> s{_srResourceStatusReason = a});
+
+-- | The name or unique identifier that corresponds to a physical instance ID
+-- of a resource supported by AWS CloudFormation.
+srPhysicalResourceId :: Lens' StackResource (Maybe Text)
+srPhysicalResourceId = lens _srPhysicalResourceId (\ s a -> s{_srPhysicalResourceId = a});
+
+-- | Unique identifier of the stack.
+srStackId :: Lens' StackResource (Maybe Text)
+srStackId = lens _srStackId (\ s a -> s{_srStackId = a});
+
+-- | User defined description associated with the resource.
+srDescription :: Lens' StackResource (Maybe Text)
+srDescription = lens _srDescription (\ s a -> s{_srDescription = a});
+
+-- | The name associated with the stack.
+srStackName :: Lens' StackResource (Maybe Text)
+srStackName = lens _srStackName (\ s a -> s{_srStackName = a});
+
+-- | The logical name of the resource specified in the template.
+srLogicalResourceId :: Lens' StackResource Text
+srLogicalResourceId = lens _srLogicalResourceId (\ s a -> s{_srLogicalResourceId = a});
+
+-- | Type of resource. (For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html AWS Resource Types Reference>
+-- in the AWS CloudFormation User Guide.)
+srResourceType :: Lens' StackResource Text
+srResourceType = lens _srResourceType (\ s a -> s{_srResourceType = a});
+
+-- | Time the status was updated.
+srTimestamp :: Lens' StackResource UTCTime
+srTimestamp = lens _srTimestamp (\ s a -> s{_srTimestamp = a}) . _Time;
+
+-- | Current status of the resource.
+srResourceStatus :: Lens' StackResource ResourceStatus
+srResourceStatus = lens _srResourceStatus (\ s a -> s{_srResourceStatus = a});
+
+instance FromXML StackResource where
+        parseXML x
+          = StackResource' <$>
+              (x .@? "ResourceStatusReason") <*>
+                (x .@? "PhysicalResourceId")
+                <*> (x .@? "StackId")
+                <*> (x .@? "Description")
+                <*> (x .@? "StackName")
+                <*> (x .@ "LogicalResourceId")
+                <*> (x .@ "ResourceType")
+                <*> (x .@ "Timestamp")
+                <*> (x .@ "ResourceStatus")
+
+-- | Contains detailed information about the specified stack resource.
+--
+-- /See:/ 'stackResourceDetail' smart constructor.
+data StackResourceDetail = StackResourceDetail'
+    { _srdResourceStatusReason :: !(Maybe Text)
+    , _srdPhysicalResourceId   :: !(Maybe Text)
+    , _srdMetadata             :: !(Maybe Text)
+    , _srdStackId              :: !(Maybe Text)
+    , _srdDescription          :: !(Maybe Text)
+    , _srdStackName            :: !(Maybe Text)
+    , _srdLogicalResourceId    :: !Text
+    , _srdResourceType         :: !Text
+    , _srdLastUpdatedTimestamp :: !ISO8601
+    , _srdResourceStatus       :: !ResourceStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StackResourceDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srdResourceStatusReason'
+--
+-- * 'srdPhysicalResourceId'
+--
+-- * 'srdMetadata'
+--
+-- * 'srdStackId'
+--
+-- * 'srdDescription'
+--
+-- * 'srdStackName'
+--
+-- * 'srdLogicalResourceId'
+--
+-- * 'srdResourceType'
+--
+-- * 'srdLastUpdatedTimestamp'
+--
+-- * 'srdResourceStatus'
+stackResourceDetail
+    :: Text -- ^ 'srdLogicalResourceId'
+    -> Text -- ^ 'srdResourceType'
+    -> UTCTime -- ^ 'srdLastUpdatedTimestamp'
+    -> ResourceStatus -- ^ 'srdResourceStatus'
+    -> StackResourceDetail
+stackResourceDetail pLogicalResourceId_ pResourceType_ pLastUpdatedTimestamp_ pResourceStatus_ =
+    StackResourceDetail'
+    { _srdResourceStatusReason = Nothing
+    , _srdPhysicalResourceId = Nothing
+    , _srdMetadata = Nothing
+    , _srdStackId = Nothing
+    , _srdDescription = Nothing
+    , _srdStackName = Nothing
+    , _srdLogicalResourceId = pLogicalResourceId_
+    , _srdResourceType = pResourceType_
+    , _srdLastUpdatedTimestamp = _Time # pLastUpdatedTimestamp_
+    , _srdResourceStatus = pResourceStatus_
+    }
+
+-- | Success\/failure message associated with the resource.
+srdResourceStatusReason :: Lens' StackResourceDetail (Maybe Text)
+srdResourceStatusReason = lens _srdResourceStatusReason (\ s a -> s{_srdResourceStatusReason = a});
+
+-- | The name or unique identifier that corresponds to a physical instance ID
+-- of a resource supported by AWS CloudFormation.
+srdPhysicalResourceId :: Lens' StackResourceDetail (Maybe Text)
+srdPhysicalResourceId = lens _srdPhysicalResourceId (\ s a -> s{_srdPhysicalResourceId = a});
+
+-- | The JSON format content of the 'Metadata' attribute declared for the
+-- resource. For more information, see
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-metadata.html Metadata Attribute>
+-- in the AWS CloudFormation User Guide.
+srdMetadata :: Lens' StackResourceDetail (Maybe Text)
+srdMetadata = lens _srdMetadata (\ s a -> s{_srdMetadata = a});
+
+-- | Unique identifier of the stack.
+srdStackId :: Lens' StackResourceDetail (Maybe Text)
+srdStackId = lens _srdStackId (\ s a -> s{_srdStackId = a});
+
+-- | User defined description associated with the resource.
+srdDescription :: Lens' StackResourceDetail (Maybe Text)
+srdDescription = lens _srdDescription (\ s a -> s{_srdDescription = a});
+
+-- | The name associated with the stack.
+srdStackName :: Lens' StackResourceDetail (Maybe Text)
+srdStackName = lens _srdStackName (\ s a -> s{_srdStackName = a});
+
+-- | The logical name of the resource specified in the template.
+srdLogicalResourceId :: Lens' StackResourceDetail Text
+srdLogicalResourceId = lens _srdLogicalResourceId (\ s a -> s{_srdLogicalResourceId = a});
+
+-- | Type of resource. ((For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html AWS Resource Types Reference>
+-- in the AWS CloudFormation User Guide.)
+srdResourceType :: Lens' StackResourceDetail Text
+srdResourceType = lens _srdResourceType (\ s a -> s{_srdResourceType = a});
+
+-- | Time the status was updated.
+srdLastUpdatedTimestamp :: Lens' StackResourceDetail UTCTime
+srdLastUpdatedTimestamp = lens _srdLastUpdatedTimestamp (\ s a -> s{_srdLastUpdatedTimestamp = a}) . _Time;
+
+-- | Current status of the resource.
+srdResourceStatus :: Lens' StackResourceDetail ResourceStatus
+srdResourceStatus = lens _srdResourceStatus (\ s a -> s{_srdResourceStatus = a});
+
+instance FromXML StackResourceDetail where
+        parseXML x
+          = StackResourceDetail' <$>
+              (x .@? "ResourceStatusReason") <*>
+                (x .@? "PhysicalResourceId")
+                <*> (x .@? "Metadata")
+                <*> (x .@? "StackId")
+                <*> (x .@? "Description")
+                <*> (x .@? "StackName")
+                <*> (x .@ "LogicalResourceId")
+                <*> (x .@ "ResourceType")
+                <*> (x .@ "LastUpdatedTimestamp")
+                <*> (x .@ "ResourceStatus")
+
+-- | Contains high-level information about the specified stack resource.
+--
+-- /See:/ 'stackResourceSummary' smart constructor.
+data StackResourceSummary = StackResourceSummary'
+    { _srsResourceStatusReason :: !(Maybe Text)
+    , _srsPhysicalResourceId   :: !(Maybe Text)
+    , _srsLogicalResourceId    :: !Text
+    , _srsResourceType         :: !Text
+    , _srsLastUpdatedTimestamp :: !ISO8601
+    , _srsResourceStatus       :: !ResourceStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StackResourceSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsResourceStatusReason'
+--
+-- * 'srsPhysicalResourceId'
+--
+-- * 'srsLogicalResourceId'
+--
+-- * 'srsResourceType'
+--
+-- * 'srsLastUpdatedTimestamp'
+--
+-- * 'srsResourceStatus'
+stackResourceSummary
+    :: Text -- ^ 'srsLogicalResourceId'
+    -> Text -- ^ 'srsResourceType'
+    -> UTCTime -- ^ 'srsLastUpdatedTimestamp'
+    -> ResourceStatus -- ^ 'srsResourceStatus'
+    -> StackResourceSummary
+stackResourceSummary pLogicalResourceId_ pResourceType_ pLastUpdatedTimestamp_ pResourceStatus_ =
+    StackResourceSummary'
+    { _srsResourceStatusReason = Nothing
+    , _srsPhysicalResourceId = Nothing
+    , _srsLogicalResourceId = pLogicalResourceId_
+    , _srsResourceType = pResourceType_
+    , _srsLastUpdatedTimestamp = _Time # pLastUpdatedTimestamp_
+    , _srsResourceStatus = pResourceStatus_
+    }
+
+-- | Success\/failure message associated with the resource.
+srsResourceStatusReason :: Lens' StackResourceSummary (Maybe Text)
+srsResourceStatusReason = lens _srsResourceStatusReason (\ s a -> s{_srsResourceStatusReason = a});
+
+-- | The name or unique identifier that corresponds to a physical instance ID
+-- of the resource.
+srsPhysicalResourceId :: Lens' StackResourceSummary (Maybe Text)
+srsPhysicalResourceId = lens _srsPhysicalResourceId (\ s a -> s{_srsPhysicalResourceId = a});
+
+-- | The logical name of the resource specified in the template.
+srsLogicalResourceId :: Lens' StackResourceSummary Text
+srsLogicalResourceId = lens _srsLogicalResourceId (\ s a -> s{_srsLogicalResourceId = a});
+
+-- | Type of resource. (For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html AWS Resource Types Reference>
+-- in the AWS CloudFormation User Guide.)
+srsResourceType :: Lens' StackResourceSummary Text
+srsResourceType = lens _srsResourceType (\ s a -> s{_srsResourceType = a});
+
+-- | Time the status was updated.
+srsLastUpdatedTimestamp :: Lens' StackResourceSummary UTCTime
+srsLastUpdatedTimestamp = lens _srsLastUpdatedTimestamp (\ s a -> s{_srsLastUpdatedTimestamp = a}) . _Time;
+
+-- | Current status of the resource.
+srsResourceStatus :: Lens' StackResourceSummary ResourceStatus
+srsResourceStatus = lens _srsResourceStatus (\ s a -> s{_srsResourceStatus = a});
+
+instance FromXML StackResourceSummary where
+        parseXML x
+          = StackResourceSummary' <$>
+              (x .@? "ResourceStatusReason") <*>
+                (x .@? "PhysicalResourceId")
+                <*> (x .@ "LogicalResourceId")
+                <*> (x .@ "ResourceType")
+                <*> (x .@ "LastUpdatedTimestamp")
+                <*> (x .@ "ResourceStatus")
+
+-- | The StackSummary Data Type
+--
+-- /See:/ 'stackSummary' smart constructor.
+data StackSummary = StackSummary'
+    { _ssLastUpdatedTime     :: !(Maybe ISO8601)
+    , _ssTemplateDescription :: !(Maybe Text)
+    , _ssStackStatusReason   :: !(Maybe Text)
+    , _ssDeletionTime        :: !(Maybe ISO8601)
+    , _ssStackId             :: !(Maybe Text)
+    , _ssStackName           :: !Text
+    , _ssCreationTime        :: !ISO8601
+    , _ssStackStatus         :: !StackStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StackSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssLastUpdatedTime'
+--
+-- * 'ssTemplateDescription'
+--
+-- * 'ssStackStatusReason'
+--
+-- * 'ssDeletionTime'
+--
+-- * 'ssStackId'
+--
+-- * 'ssStackName'
+--
+-- * 'ssCreationTime'
+--
+-- * 'ssStackStatus'
+stackSummary
+    :: Text -- ^ 'ssStackName'
+    -> UTCTime -- ^ 'ssCreationTime'
+    -> StackStatus -- ^ 'ssStackStatus'
+    -> StackSummary
+stackSummary pStackName_ pCreationTime_ pStackStatus_ =
+    StackSummary'
+    { _ssLastUpdatedTime = Nothing
+    , _ssTemplateDescription = Nothing
+    , _ssStackStatusReason = Nothing
+    , _ssDeletionTime = Nothing
+    , _ssStackId = Nothing
+    , _ssStackName = pStackName_
+    , _ssCreationTime = _Time # pCreationTime_
+    , _ssStackStatus = pStackStatus_
+    }
+
+-- | The time the stack was last updated. This field will only be returned if
+-- the stack has been updated at least once.
+ssLastUpdatedTime :: Lens' StackSummary (Maybe UTCTime)
+ssLastUpdatedTime = lens _ssLastUpdatedTime (\ s a -> s{_ssLastUpdatedTime = a}) . mapping _Time;
+
+-- | The template description of the template used to create the stack.
+ssTemplateDescription :: Lens' StackSummary (Maybe Text)
+ssTemplateDescription = lens _ssTemplateDescription (\ s a -> s{_ssTemplateDescription = a});
+
+-- | Success\/Failure message associated with the stack status.
+ssStackStatusReason :: Lens' StackSummary (Maybe Text)
+ssStackStatusReason = lens _ssStackStatusReason (\ s a -> s{_ssStackStatusReason = a});
+
+-- | The time the stack was deleted.
+ssDeletionTime :: Lens' StackSummary (Maybe UTCTime)
+ssDeletionTime = lens _ssDeletionTime (\ s a -> s{_ssDeletionTime = a}) . mapping _Time;
+
+-- | Unique stack identifier.
+ssStackId :: Lens' StackSummary (Maybe Text)
+ssStackId = lens _ssStackId (\ s a -> s{_ssStackId = a});
+
+-- | The name associated with the stack.
+ssStackName :: Lens' StackSummary Text
+ssStackName = lens _ssStackName (\ s a -> s{_ssStackName = a});
+
+-- | The time the stack was created.
+ssCreationTime :: Lens' StackSummary UTCTime
+ssCreationTime = lens _ssCreationTime (\ s a -> s{_ssCreationTime = a}) . _Time;
+
+-- | The current status of the stack.
+ssStackStatus :: Lens' StackSummary StackStatus
+ssStackStatus = lens _ssStackStatus (\ s a -> s{_ssStackStatus = a});
+
+instance FromXML StackSummary where
+        parseXML x
+          = StackSummary' <$>
+              (x .@? "LastUpdatedTime") <*>
+                (x .@? "TemplateDescription")
+                <*> (x .@? "StackStatusReason")
+                <*> (x .@? "DeletionTime")
+                <*> (x .@? "StackId")
+                <*> (x .@ "StackName")
+                <*> (x .@ "CreationTime")
+                <*> (x .@ "StackStatus")
+
+-- | The Tag type is used by 'CreateStack' in the 'Tags' parameter. It allows
+-- you to specify a key\/value pair that can be used to store information
+-- related to cost allocation for an AWS CloudFormation stack.
+--
+-- /See:/ 'tag' smart constructor.
+data Tag = Tag'
+    { _tagValue :: !(Maybe Text)
+    , _tagKey   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagValue'
+--
+-- * 'tagKey'
+tag
+    :: Tag
+tag =
+    Tag'
+    { _tagValue = Nothing
+    , _tagKey = Nothing
+    }
+
+-- | /Required/. A string containing the value for this tag. You can specify
+-- a maximum of 256 characters for a tag value.
+tagValue :: Lens' Tag (Maybe Text)
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+-- | /Required/. A string used to identify this tag. You can specify a
+-- maximum of 128 characters for a tag key. Tags owned by Amazon Web
+-- Services (AWS) have the reserved prefix: 'aws:'.
+tagKey :: Lens' Tag (Maybe Text)
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+instance FromXML Tag where
+        parseXML x
+          = Tag' <$> (x .@? "Value") <*> (x .@? "Key")
+
+instance ToQuery Tag where
+        toQuery Tag'{..}
+          = mconcat ["Value" =: _tagValue, "Key" =: _tagKey]
+
+-- | The TemplateParameter data type.
+--
+-- /See:/ 'templateParameter' smart constructor.
+data TemplateParameter = TemplateParameter'
+    { _tpParameterKey :: !(Maybe Text)
+    , _tpDefaultValue :: !(Maybe Text)
+    , _tpNoEcho       :: !(Maybe Bool)
+    , _tpDescription  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TemplateParameter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpParameterKey'
+--
+-- * 'tpDefaultValue'
+--
+-- * 'tpNoEcho'
+--
+-- * 'tpDescription'
+templateParameter
+    :: TemplateParameter
+templateParameter =
+    TemplateParameter'
+    { _tpParameterKey = Nothing
+    , _tpDefaultValue = Nothing
+    , _tpNoEcho = Nothing
+    , _tpDescription = Nothing
+    }
+
+-- | The name associated with the parameter.
+tpParameterKey :: Lens' TemplateParameter (Maybe Text)
+tpParameterKey = lens _tpParameterKey (\ s a -> s{_tpParameterKey = a});
+
+-- | The default value associated with the parameter.
+tpDefaultValue :: Lens' TemplateParameter (Maybe Text)
+tpDefaultValue = lens _tpDefaultValue (\ s a -> s{_tpDefaultValue = a});
+
+-- | Flag indicating whether the parameter should be displayed as plain text
+-- in logs and UIs.
+tpNoEcho :: Lens' TemplateParameter (Maybe Bool)
+tpNoEcho = lens _tpNoEcho (\ s a -> s{_tpNoEcho = a});
+
+-- | User defined description associated with the parameter.
+tpDescription :: Lens' TemplateParameter (Maybe Text)
+tpDescription = lens _tpDescription (\ s a -> s{_tpDescription = a});
+
+instance FromXML TemplateParameter where
+        parseXML x
+          = TemplateParameter' <$>
+              (x .@? "ParameterKey") <*> (x .@? "DefaultValue") <*>
+                (x .@? "NoEcho")
+                <*> (x .@? "Description")
diff --git a/gen/Network/AWS/CloudFormation/Types/Sum.hs b/gen/Network/AWS/CloudFormation/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudFormation/Types/Sum.hs
@@ -0,0 +1,205 @@
+{-# 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.CloudFormation.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.CloudFormation.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data Capability =
+    CapabilityIAM
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Capability where
+    parser = takeLowerText >>= \case
+        "capability_iam" -> pure CapabilityIAM
+        e -> fromTextError $ "Failure parsing Capability from value: '" <> e
+           <> "'. Accepted values: capability_iam"
+
+instance ToText Capability where
+    toText = \case
+        CapabilityIAM -> "capability_iam"
+
+instance Hashable     Capability
+instance ToByteString Capability
+instance ToQuery      Capability
+instance ToHeader     Capability
+
+instance FromXML Capability where
+    parseXML = parseXMLText "Capability"
+
+data OnFailure
+    = Delete
+    | DoNothing
+    | Rollback
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText OnFailure where
+    parser = takeLowerText >>= \case
+        "delete" -> pure Delete
+        "do_nothing" -> pure DoNothing
+        "rollback" -> pure Rollback
+        e -> fromTextError $ "Failure parsing OnFailure from value: '" <> e
+           <> "'. Accepted values: delete, do_nothing, rollback"
+
+instance ToText OnFailure where
+    toText = \case
+        Delete -> "delete"
+        DoNothing -> "do_nothing"
+        Rollback -> "rollback"
+
+instance Hashable     OnFailure
+instance ToByteString OnFailure
+instance ToQuery      OnFailure
+instance ToHeader     OnFailure
+
+data ResourceSignalStatus
+    = Failure
+    | Success
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ResourceSignalStatus where
+    parser = takeLowerText >>= \case
+        "failure" -> pure Failure
+        "success" -> pure Success
+        e -> fromTextError $ "Failure parsing ResourceSignalStatus from value: '" <> e
+           <> "'. Accepted values: failure, success"
+
+instance ToText ResourceSignalStatus where
+    toText = \case
+        Failure -> "failure"
+        Success -> "success"
+
+instance Hashable     ResourceSignalStatus
+instance ToByteString ResourceSignalStatus
+instance ToQuery      ResourceSignalStatus
+instance ToHeader     ResourceSignalStatus
+
+data ResourceStatus
+    = CreateComplete
+    | CreateFailed
+    | CreateInProgress
+    | DeleteComplete
+    | DeleteFailed
+    | DeleteInProgress
+    | DeleteSkipped
+    | UpdateComplete
+    | UpdateFailed
+    | UpdateInProgress
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ResourceStatus where
+    parser = takeLowerText >>= \case
+        "create_complete" -> pure CreateComplete
+        "create_failed" -> pure CreateFailed
+        "create_in_progress" -> pure CreateInProgress
+        "delete_complete" -> pure DeleteComplete
+        "delete_failed" -> pure DeleteFailed
+        "delete_in_progress" -> pure DeleteInProgress
+        "delete_skipped" -> pure DeleteSkipped
+        "update_complete" -> pure UpdateComplete
+        "update_failed" -> pure UpdateFailed
+        "update_in_progress" -> pure UpdateInProgress
+        e -> fromTextError $ "Failure parsing ResourceStatus from value: '" <> e
+           <> "'. Accepted values: create_complete, create_failed, create_in_progress, delete_complete, delete_failed, delete_in_progress, delete_skipped, update_complete, update_failed, update_in_progress"
+
+instance ToText ResourceStatus where
+    toText = \case
+        CreateComplete -> "create_complete"
+        CreateFailed -> "create_failed"
+        CreateInProgress -> "create_in_progress"
+        DeleteComplete -> "delete_complete"
+        DeleteFailed -> "delete_failed"
+        DeleteInProgress -> "delete_in_progress"
+        DeleteSkipped -> "delete_skipped"
+        UpdateComplete -> "update_complete"
+        UpdateFailed -> "update_failed"
+        UpdateInProgress -> "update_in_progress"
+
+instance Hashable     ResourceStatus
+instance ToByteString ResourceStatus
+instance ToQuery      ResourceStatus
+instance ToHeader     ResourceStatus
+
+instance FromXML ResourceStatus where
+    parseXML = parseXMLText "ResourceStatus"
+
+data StackStatus
+    = SSCreateComplete
+    | SSCreateFailed
+    | SSCreateInProgress
+    | SSDeleteComplete
+    | SSDeleteFailed
+    | SSDeleteInProgress
+    | SSRollbackComplete
+    | SSRollbackFailed
+    | SSRollbackInProgress
+    | SSUpdateComplete
+    | SSUpdateCompleteCleanupInProgress
+    | SSUpdateInProgress
+    | SSUpdateRollbackComplete
+    | SSUpdateRollbackCompleteCleanupInProgress
+    | SSUpdateRollbackFailed
+    | SSUpdateRollbackInProgress
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText StackStatus where
+    parser = takeLowerText >>= \case
+        "create_complete" -> pure SSCreateComplete
+        "create_failed" -> pure SSCreateFailed
+        "create_in_progress" -> pure SSCreateInProgress
+        "delete_complete" -> pure SSDeleteComplete
+        "delete_failed" -> pure SSDeleteFailed
+        "delete_in_progress" -> pure SSDeleteInProgress
+        "rollback_complete" -> pure SSRollbackComplete
+        "rollback_failed" -> pure SSRollbackFailed
+        "rollback_in_progress" -> pure SSRollbackInProgress
+        "update_complete" -> pure SSUpdateComplete
+        "update_complete_cleanup_in_progress" -> pure SSUpdateCompleteCleanupInProgress
+        "update_in_progress" -> pure SSUpdateInProgress
+        "update_rollback_complete" -> pure SSUpdateRollbackComplete
+        "update_rollback_complete_cleanup_in_progress" -> pure SSUpdateRollbackCompleteCleanupInProgress
+        "update_rollback_failed" -> pure SSUpdateRollbackFailed
+        "update_rollback_in_progress" -> pure SSUpdateRollbackInProgress
+        e -> fromTextError $ "Failure parsing StackStatus from value: '" <> e
+           <> "'. Accepted values: create_complete, create_failed, create_in_progress, delete_complete, delete_failed, delete_in_progress, rollback_complete, rollback_failed, rollback_in_progress, update_complete, update_complete_cleanup_in_progress, update_in_progress, update_rollback_complete, update_rollback_complete_cleanup_in_progress, update_rollback_failed, update_rollback_in_progress"
+
+instance ToText StackStatus where
+    toText = \case
+        SSCreateComplete -> "create_complete"
+        SSCreateFailed -> "create_failed"
+        SSCreateInProgress -> "create_in_progress"
+        SSDeleteComplete -> "delete_complete"
+        SSDeleteFailed -> "delete_failed"
+        SSDeleteInProgress -> "delete_in_progress"
+        SSRollbackComplete -> "rollback_complete"
+        SSRollbackFailed -> "rollback_failed"
+        SSRollbackInProgress -> "rollback_in_progress"
+        SSUpdateComplete -> "update_complete"
+        SSUpdateCompleteCleanupInProgress -> "update_complete_cleanup_in_progress"
+        SSUpdateInProgress -> "update_in_progress"
+        SSUpdateRollbackComplete -> "update_rollback_complete"
+        SSUpdateRollbackCompleteCleanupInProgress -> "update_rollback_complete_cleanup_in_progress"
+        SSUpdateRollbackFailed -> "update_rollback_failed"
+        SSUpdateRollbackInProgress -> "update_rollback_in_progress"
+
+instance Hashable     StackStatus
+instance ToByteString StackStatus
+instance ToQuery      StackStatus
+instance ToHeader     StackStatus
+
+instance FromXML StackStatus where
+    parseXML = parseXMLText "StackStatus"
diff --git a/gen/Network/AWS/CloudFormation/UpdateStack.hs b/gen/Network/AWS/CloudFormation/UpdateStack.hs
--- a/gen/Network/AWS/CloudFormation/UpdateStack.hs
+++ b/gen/Network/AWS/CloudFormation/UpdateStack.hs
@@ -1,272 +1,305 @@
-{-# 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.CloudFormation.UpdateStack
--- 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.
-
--- | Updates a stack as specified in the template. After the call completes
--- successfully, the stack update starts. You can check the status of the stack
--- via the 'DescribeStacks' action.
+-- Updates a stack as specified in the template. After the call completes
+-- successfully, the stack update starts. You can check the status of the
+-- stack via the DescribeStacks action.
 --
--- To get a copy of the template for an existing stack, you can use the 'GetTemplate' action.
+-- To get a copy of the template for an existing stack, you can use the
+-- GetTemplate action.
 --
--- Tags that were associated with this stack during creation time will still be
--- associated with the stack after an 'UpdateStack' operation.
+-- Tags that were associated with this stack during creation time will
+-- still be associated with the stack after an 'UpdateStack' operation.
 --
--- For more information about creating an update template, updating a stack,
--- and monitoring the progress of the update, see <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html Updating a Stack>.
+-- For more information about creating an update template, updating a
+-- stack, and monitoring the progress of the update, see
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html Updating a Stack>.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStack.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStack.html AWS API Reference> for UpdateStack.
 module Network.AWS.CloudFormation.UpdateStack
     (
-    -- * Request
-      UpdateStack
-    -- ** Request constructor
-    , updateStack
-    -- ** Request lenses
-    , usCapabilities
+    -- * Creating a Request
+      updateStack
+    , UpdateStack
+    -- * Request Lenses
+    , usUsePreviousTemplate
     , usNotificationARNs
-    , usParameters
-    , usStackName
     , usStackPolicyBody
     , usStackPolicyDuringUpdateBody
     , usStackPolicyDuringUpdateURL
+    , usParameters
     , usStackPolicyURL
     , usTemplateBody
     , usTemplateURL
-    , usUsePreviousTemplate
+    , usCapabilities
+    , usStackName
 
-    -- * Response
-    , UpdateStackResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateStackResponse
-    -- ** Response lenses
-    , usrStackId
+    , UpdateStackResponse
+    -- * Response Lenses
+    , usrsStackId
+    , usrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data UpdateStack = UpdateStack
-    { _usCapabilities                :: List "member" Capability
-    , _usNotificationARNs            :: List "member" Text
-    , _usParameters                  :: List "member" Parameter
-    , _usStackName                   :: Text
-    , _usStackPolicyBody             :: Maybe Text
-    , _usStackPolicyDuringUpdateBody :: Maybe Text
-    , _usStackPolicyDuringUpdateURL  :: Maybe Text
-    , _usStackPolicyURL              :: Maybe Text
-    , _usTemplateBody                :: Maybe Text
-    , _usTemplateURL                 :: Maybe Text
-    , _usUsePreviousTemplate         :: Maybe Bool
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'UpdateStack' constructor.
+-- | The input for UpdateStack action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateStack' smart constructor.
+data UpdateStack = UpdateStack'
+    { _usUsePreviousTemplate         :: !(Maybe Bool)
+    , _usNotificationARNs            :: !(Maybe [Text])
+    , _usStackPolicyBody             :: !(Maybe Text)
+    , _usStackPolicyDuringUpdateBody :: !(Maybe Text)
+    , _usStackPolicyDuringUpdateURL  :: !(Maybe Text)
+    , _usParameters                  :: !(Maybe [Parameter])
+    , _usStackPolicyURL              :: !(Maybe Text)
+    , _usTemplateBody                :: !(Maybe Text)
+    , _usTemplateURL                 :: !(Maybe Text)
+    , _usCapabilities                :: !(Maybe [Capability])
+    , _usStackName                   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateStack' with the minimum fields required to make a request.
 --
--- * 'usCapabilities' @::@ ['Capability']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'usNotificationARNs' @::@ ['Text']
+-- * 'usUsePreviousTemplate'
 --
--- * 'usParameters' @::@ ['Parameter']
+-- * 'usNotificationARNs'
 --
--- * 'usStackName' @::@ 'Text'
+-- * 'usStackPolicyBody'
 --
--- * 'usStackPolicyBody' @::@ 'Maybe' 'Text'
+-- * 'usStackPolicyDuringUpdateBody'
 --
--- * 'usStackPolicyDuringUpdateBody' @::@ 'Maybe' 'Text'
+-- * 'usStackPolicyDuringUpdateURL'
 --
--- * 'usStackPolicyDuringUpdateURL' @::@ 'Maybe' 'Text'
+-- * 'usParameters'
 --
--- * 'usStackPolicyURL' @::@ 'Maybe' 'Text'
+-- * 'usStackPolicyURL'
 --
--- * 'usTemplateBody' @::@ 'Maybe' 'Text'
+-- * 'usTemplateBody'
 --
--- * 'usTemplateURL' @::@ 'Maybe' 'Text'
+-- * 'usTemplateURL'
 --
--- * 'usUsePreviousTemplate' @::@ 'Maybe' 'Bool'
+-- * 'usCapabilities'
 --
-updateStack :: Text -- ^ 'usStackName'
-            -> UpdateStack
-updateStack p1 = UpdateStack
-    { _usStackName                   = p1
-    , _usTemplateBody                = Nothing
-    , _usTemplateURL                 = Nothing
-    , _usUsePreviousTemplate         = Nothing
+-- * 'usStackName'
+updateStack
+    :: Text -- ^ 'usStackName'
+    -> UpdateStack
+updateStack pStackName_ =
+    UpdateStack'
+    { _usUsePreviousTemplate = Nothing
+    , _usNotificationARNs = Nothing
+    , _usStackPolicyBody = Nothing
     , _usStackPolicyDuringUpdateBody = Nothing
-    , _usStackPolicyDuringUpdateURL  = Nothing
-    , _usParameters                  = mempty
-    , _usCapabilities                = mempty
-    , _usStackPolicyBody             = Nothing
-    , _usStackPolicyURL              = Nothing
-    , _usNotificationARNs            = mempty
+    , _usStackPolicyDuringUpdateURL = Nothing
+    , _usParameters = Nothing
+    , _usStackPolicyURL = Nothing
+    , _usTemplateBody = Nothing
+    , _usTemplateURL = Nothing
+    , _usCapabilities = Nothing
+    , _usStackName = pStackName_
     }
 
--- | A list of capabilities that you must specify before AWS CloudFormation can
--- create or update certain stacks. Some stack templates might include resources
--- that can affect permissions in your AWS account. For those stacks, you must
--- explicitly acknowledge their capabilities by specifying this parameter.
--- Currently, the only valid value is 'CAPABILITY_IAM', which is required for the
--- following resources: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html  AWS::IAM::AccessKey>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html  AWS::IAM::Group>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html AWS::IAM::InstanceProfile>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html  AWS::IAM::Policy>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html  AWS::IAM::Role>, <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html  AWS::IAM::User>
--- , and <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html  AWS::IAM::UserToGroupAddition>. If your stack template contains these
--- resources, we recommend that you review any permissions associated with them.
--- If you don't specify this parameter, this action returns an
--- InsufficientCapabilities error.
-usCapabilities :: Lens' UpdateStack [Capability]
-usCapabilities = lens _usCapabilities (\s a -> s { _usCapabilities = a }) . _List
+-- | Reuse the existing template that is associated with the stack that you
+-- are updating.
+usUsePreviousTemplate :: Lens' UpdateStack (Maybe Bool)
+usUsePreviousTemplate = lens _usUsePreviousTemplate (\ s a -> s{_usUsePreviousTemplate = a});
 
--- | Update the ARNs for the Amazon SNS topics that are associated with the stack.
+-- | Update the ARNs for the Amazon SNS topics that are associated with the
+-- stack.
 usNotificationARNs :: Lens' UpdateStack [Text]
-usNotificationARNs =
-    lens _usNotificationARNs (\s a -> s { _usNotificationARNs = a })
-        . _List
-
--- | A list of 'Parameter' structures that specify input parameters for the stack.
--- For more information, see the <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html Parameter> data type.
-usParameters :: Lens' UpdateStack [Parameter]
-usParameters = lens _usParameters (\s a -> s { _usParameters = a }) . _List
-
--- | The name or unique stack ID of the stack to update.
-usStackName :: Lens' UpdateStack Text
-usStackName = lens _usStackName (\s a -> s { _usStackName = a })
+usNotificationARNs = lens _usNotificationARNs (\ s a -> s{_usNotificationARNs = a}) . _Default . _Coerce;
 
--- | Structure containing a new stack policy body. You can specify either the 'StackPolicyBody' or the 'StackPolicyURL' parameter, but not both.
+-- | Structure containing a new stack policy body. You can specify either the
+-- 'StackPolicyBody' or the 'StackPolicyURL' parameter, but not both.
 --
--- You might update the stack policy, for example, in order to protect a new
--- resource that you created during a stack update. If you do not specify a
--- stack policy, the current policy that is associated with the stack is
--- unchanged.
+-- You might update the stack policy, for example, in order to protect a
+-- new resource that you created during a stack update. If you do not
+-- specify a stack policy, the current policy that is associated with the
+-- stack is unchanged.
 usStackPolicyBody :: Lens' UpdateStack (Maybe Text)
-usStackPolicyBody =
-    lens _usStackPolicyBody (\s a -> s { _usStackPolicyBody = a })
+usStackPolicyBody = lens _usStackPolicyBody (\ s a -> s{_usStackPolicyBody = a});
 
 -- | Structure containing the temporary overriding stack policy body. You can
--- specify either the 'StackPolicyDuringUpdateBody' or the 'StackPolicyDuringUpdateURL' parameter, but not both.
+-- specify either the 'StackPolicyDuringUpdateBody' or the
+-- 'StackPolicyDuringUpdateURL' parameter, but not both.
 --
--- If you want to update protected resources, specify a temporary overriding
--- stack policy during this update. If you do not specify a stack policy, the
--- current policy that is associated with the stack will be used.
+-- If you want to update protected resources, specify a temporary
+-- overriding stack policy during this update. If you do not specify a
+-- stack policy, the current policy that is associated with the stack will
+-- be used.
 usStackPolicyDuringUpdateBody :: Lens' UpdateStack (Maybe Text)
-usStackPolicyDuringUpdateBody =
-    lens _usStackPolicyDuringUpdateBody
-        (\s a -> s { _usStackPolicyDuringUpdateBody = a })
+usStackPolicyDuringUpdateBody = lens _usStackPolicyDuringUpdateBody (\ s a -> s{_usStackPolicyDuringUpdateBody = a});
 
--- | Location of a file containing the temporary overriding stack policy. The URL
--- must point to a policy (max size: 16KB) located in an S3 bucket in the same
--- region as the stack. You can specify either the 'StackPolicyDuringUpdateBody'
--- or the 'StackPolicyDuringUpdateURL' parameter, but not both.
+-- | Location of a file containing the temporary overriding stack policy. The
+-- URL must point to a policy (max size: 16KB) located in an S3 bucket in
+-- the same region as the stack. You can specify either the
+-- 'StackPolicyDuringUpdateBody' or the 'StackPolicyDuringUpdateURL'
+-- parameter, but not both.
 --
--- If you want to update protected resources, specify a temporary overriding
--- stack policy during this update. If you do not specify a stack policy, the
--- current policy that is associated with the stack will be used.
+-- If you want to update protected resources, specify a temporary
+-- overriding stack policy during this update. If you do not specify a
+-- stack policy, the current policy that is associated with the stack will
+-- be used.
 usStackPolicyDuringUpdateURL :: Lens' UpdateStack (Maybe Text)
-usStackPolicyDuringUpdateURL =
-    lens _usStackPolicyDuringUpdateURL
-        (\s a -> s { _usStackPolicyDuringUpdateURL = a })
+usStackPolicyDuringUpdateURL = lens _usStackPolicyDuringUpdateURL (\ s a -> s{_usStackPolicyDuringUpdateURL = a});
 
--- | Location of a file containing the updated stack policy. The URL must point to
--- a policy (max size: 16KB) located in an S3 bucket in the same region as the
--- stack. You can specify either the 'StackPolicyBody' or the 'StackPolicyURL'
--- parameter, but not both.
+-- | A list of 'Parameter' structures that specify input parameters for the
+-- stack. For more information, see the
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Parameter.html Parameter>
+-- data type.
+usParameters :: Lens' UpdateStack [Parameter]
+usParameters = lens _usParameters (\ s a -> s{_usParameters = a}) . _Default . _Coerce;
+
+-- | Location of a file containing the updated stack policy. The URL must
+-- point to a policy (max size: 16KB) located in an S3 bucket in the same
+-- region as the stack. You can specify either the 'StackPolicyBody' or the
+-- 'StackPolicyURL' parameter, but not both.
 --
--- You might update the stack policy, for example, in order to protect a new
--- resource that you created during a stack update. If you do not specify a
--- stack policy, the current policy that is associated with the stack is
--- unchanged.
+-- You might update the stack policy, for example, in order to protect a
+-- new resource that you created during a stack update. If you do not
+-- specify a stack policy, the current policy that is associated with the
+-- stack is unchanged.
 usStackPolicyURL :: Lens' UpdateStack (Maybe Text)
-usStackPolicyURL = lens _usStackPolicyURL (\s a -> s { _usStackPolicyURL = a })
+usStackPolicyURL = lens _usStackPolicyURL (\ s a -> s{_usStackPolicyURL = a});
 
--- | Structure containing the template body with a minimum length of 1 byte and a
--- maximum length of 51,200 bytes. (For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- | Structure containing the template body with a minimum length of 1 byte
+-- and a maximum length of 51,200 bytes. (For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
 -- in the AWS CloudFormation User Guide.)
 --
--- Conditional: You must specify either the 'TemplateBody' or the 'TemplateURL'
--- parameter, but not both.
+-- Conditional: You must specify either the 'TemplateBody' or the
+-- 'TemplateURL' parameter, but not both.
 usTemplateBody :: Lens' UpdateStack (Maybe Text)
-usTemplateBody = lens _usTemplateBody (\s a -> s { _usTemplateBody = a })
+usTemplateBody = lens _usTemplateBody (\ s a -> s{_usTemplateBody = a});
 
 -- | Location of file containing the template body. The URL must point to a
--- template located in an S3 bucket in the same region as the stack. For more
--- information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy> in the AWS CloudFormation User Guide.
+-- template located in an S3 bucket in the same region as the stack. For
+-- more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- in the AWS CloudFormation User Guide.
 --
--- Conditional: You must specify either the 'TemplateBody' or the 'TemplateURL'
--- parameter, but not both.
+-- Conditional: You must specify either the 'TemplateBody' or the
+-- 'TemplateURL' parameter, but not both.
 usTemplateURL :: Lens' UpdateStack (Maybe Text)
-usTemplateURL = lens _usTemplateURL (\s a -> s { _usTemplateURL = a })
+usTemplateURL = lens _usTemplateURL (\ s a -> s{_usTemplateURL = a});
 
--- | Reuse the existing template that is associated with the stack that you are
--- updating.
-usUsePreviousTemplate :: Lens' UpdateStack (Maybe Bool)
-usUsePreviousTemplate =
-    lens _usUsePreviousTemplate (\s a -> s { _usUsePreviousTemplate = a })
+-- | A list of capabilities that you must specify before AWS CloudFormation
+-- can create or update certain stacks. Some stack templates might include
+-- resources that can affect permissions in your AWS account. For those
+-- stacks, you must explicitly acknowledge their capabilities by specifying
+-- this parameter. Currently, the only valid value is 'CAPABILITY_IAM',
+-- which is required for the following resources:
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html AWS::IAM::AccessKey>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html AWS::IAM::Group>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html AWS::IAM::InstanceProfile>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html AWS::IAM::Policy>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html AWS::IAM::Role>,
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html AWS::IAM::User>,
+-- and
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html AWS::IAM::UserToGroupAddition>.
+-- If your stack template contains these resources, we recommend that you
+-- review any permissions associated with them. If you don\'t specify this
+-- parameter, this action returns an InsufficientCapabilities error.
+usCapabilities :: Lens' UpdateStack [Capability]
+usCapabilities = lens _usCapabilities (\ s a -> s{_usCapabilities = a}) . _Default . _Coerce;
 
-newtype UpdateStackResponse = UpdateStackResponse
-    { _usrStackId :: Maybe Text
-    } deriving (Eq, Ord, Read, Show, Monoid)
+-- | The name or unique stack ID of the stack to update.
+usStackName :: Lens' UpdateStack Text
+usStackName = lens _usStackName (\ s a -> s{_usStackName = a});
 
--- | 'UpdateStackResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'usrStackId' @::@ 'Maybe' 'Text'
---
-updateStackResponse :: UpdateStackResponse
-updateStackResponse = UpdateStackResponse
-    { _usrStackId = Nothing
-    }
+instance AWSRequest UpdateStack where
+        type Sv UpdateStack = CloudFormation
+        type Rs UpdateStack = UpdateStackResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "UpdateStackResult"
+              (\ s h x ->
+                 UpdateStackResponse' <$>
+                   (x .@? "StackId") <*> (pure (fromEnum s)))
 
--- | Unique identifier of the stack.
-usrStackId :: Lens' UpdateStackResponse (Maybe Text)
-usrStackId = lens _usrStackId (\s a -> s { _usrStackId = a })
+instance ToHeaders UpdateStack where
+        toHeaders = const mempty
 
 instance ToPath UpdateStack where
-    toPath = const "/"
+        toPath = const "/"
 
 instance ToQuery UpdateStack where
-    toQuery UpdateStack{..} = mconcat
-        [ "Capabilities"                =? _usCapabilities
-        , "NotificationARNs"            =? _usNotificationARNs
-        , "Parameters"                  =? _usParameters
-        , "StackName"                   =? _usStackName
-        , "StackPolicyBody"             =? _usStackPolicyBody
-        , "StackPolicyDuringUpdateBody" =? _usStackPolicyDuringUpdateBody
-        , "StackPolicyDuringUpdateURL"  =? _usStackPolicyDuringUpdateURL
-        , "StackPolicyURL"              =? _usStackPolicyURL
-        , "TemplateBody"                =? _usTemplateBody
-        , "TemplateURL"                 =? _usTemplateURL
-        , "UsePreviousTemplate"         =? _usUsePreviousTemplate
-        ]
+        toQuery UpdateStack'{..}
+          = mconcat
+              ["Action" =: ("UpdateStack" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "UsePreviousTemplate" =: _usUsePreviousTemplate,
+               "NotificationARNs" =:
+                 toQuery
+                   (toQueryList "member" <$> _usNotificationARNs),
+               "StackPolicyBody" =: _usStackPolicyBody,
+               "StackPolicyDuringUpdateBody" =:
+                 _usStackPolicyDuringUpdateBody,
+               "StackPolicyDuringUpdateURL" =:
+                 _usStackPolicyDuringUpdateURL,
+               "Parameters" =:
+                 toQuery (toQueryList "member" <$> _usParameters),
+               "StackPolicyURL" =: _usStackPolicyURL,
+               "TemplateBody" =: _usTemplateBody,
+               "TemplateURL" =: _usTemplateURL,
+               "Capabilities" =:
+                 toQuery (toQueryList "member" <$> _usCapabilities),
+               "StackName" =: _usStackName]
 
-instance ToHeaders UpdateStack
+-- | The output for a UpdateStack action.
+--
+-- /See:/ 'updateStackResponse' smart constructor.
+data UpdateStackResponse = UpdateStackResponse'
+    { _usrsStackId :: !(Maybe Text)
+    , _usrsStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest UpdateStack where
-    type Sv UpdateStack = CloudFormation
-    type Rs UpdateStack = UpdateStackResponse
+-- | Creates a value of 'UpdateStackResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usrsStackId'
+--
+-- * 'usrsStatus'
+updateStackResponse
+    :: Int -- ^ 'usrsStatus'
+    -> UpdateStackResponse
+updateStackResponse pStatus_ =
+    UpdateStackResponse'
+    { _usrsStackId = Nothing
+    , _usrsStatus = pStatus_
+    }
 
-    request  = post "UpdateStack"
-    response = xmlResponse
+-- | Unique identifier of the stack.
+usrsStackId :: Lens' UpdateStackResponse (Maybe Text)
+usrsStackId = lens _usrsStackId (\ s a -> s{_usrsStackId = a});
 
-instance FromXML UpdateStackResponse where
-    parseXML = withElement "UpdateStackResult" $ \x -> UpdateStackResponse
-        <$> x .@? "StackId"
+-- | The response status code.
+usrsStatus :: Lens' UpdateStackResponse Int
+usrsStatus = lens _usrsStatus (\ s a -> s{_usrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/ValidateTemplate.hs b/gen/Network/AWS/CloudFormation/ValidateTemplate.hs
--- a/gen/Network/AWS/CloudFormation/ValidateTemplate.hs
+++ b/gen/Network/AWS/CloudFormation/ValidateTemplate.hs
@@ -1,164 +1,185 @@
-{-# 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.CloudFormation.ValidateTemplate
--- 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.
-
--- | Validates a specified template.
+-- Validates a specified template.
 --
--- <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ValidateTemplate.html>
+-- /See:/ <http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_ValidateTemplate.html AWS API Reference> for ValidateTemplate.
 module Network.AWS.CloudFormation.ValidateTemplate
     (
-    -- * Request
-      ValidateTemplate
-    -- ** Request constructor
-    , validateTemplate
-    -- ** Request lenses
+    -- * Creating a Request
+      validateTemplate
+    , ValidateTemplate
+    -- * Request Lenses
     , vtTemplateBody
     , vtTemplateURL
 
-    -- * Response
-    , ValidateTemplateResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , validateTemplateResponse
-    -- ** Response lenses
-    , vtrCapabilities
-    , vtrCapabilitiesReason
-    , vtrDescription
-    , vtrParameters
+    , ValidateTemplateResponse
+    -- * Response Lenses
+    , vtrsParameters
+    , vtrsCapabilitiesReason
+    , vtrsCapabilities
+    , vtrsDescription
+    , vtrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.Query
-import Network.AWS.CloudFormation.Types
-import qualified GHC.Exts
-
-data ValidateTemplate = ValidateTemplate
-    { _vtTemplateBody :: Maybe Text
-    , _vtTemplateURL  :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.CloudFormation.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ValidateTemplate' constructor.
+-- | The input for ValidateTemplate action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'validateTemplate' smart constructor.
+data ValidateTemplate = ValidateTemplate'
+    { _vtTemplateBody :: !(Maybe Text)
+    , _vtTemplateURL  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ValidateTemplate' with the minimum fields required to make a request.
 --
--- * 'vtTemplateBody' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'vtTemplateURL' @::@ 'Maybe' 'Text'
+-- * 'vtTemplateBody'
 --
-validateTemplate :: ValidateTemplate
-validateTemplate = ValidateTemplate
+-- * 'vtTemplateURL'
+validateTemplate
+    :: ValidateTemplate
+validateTemplate =
+    ValidateTemplate'
     { _vtTemplateBody = Nothing
-    , _vtTemplateURL  = Nothing
+    , _vtTemplateURL = Nothing
     }
 
--- | Structure containing the template body with a minimum length of 1 byte and a
--- maximum length of 51,200 bytes. For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- | Structure containing the template body with a minimum length of 1 byte
+-- and a maximum length of 51,200 bytes. For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
 -- in the AWS CloudFormation User Guide.
 --
--- Conditional: You must pass 'TemplateURL' or 'TemplateBody'. If both are passed,
--- only 'TemplateBody' is used.
+-- Conditional: You must pass 'TemplateURL' or 'TemplateBody'. If both are
+-- passed, only 'TemplateBody' is used.
 vtTemplateBody :: Lens' ValidateTemplate (Maybe Text)
-vtTemplateBody = lens _vtTemplateBody (\s a -> s { _vtTemplateBody = a })
+vtTemplateBody = lens _vtTemplateBody (\ s a -> s{_vtTemplateBody = a});
 
 -- | Location of file containing the template body. The URL must point to a
--- template (max size: 460,800 bytes) located in an S3 bucket in the same region
--- as the stack. For more information, go to <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy> in the AWS
--- CloudFormation User Guide.
+-- template (max size: 460,800 bytes) located in an S3 bucket in the same
+-- region as the stack. For more information, go to
+-- <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-anatomy.html Template Anatomy>
+-- in the AWS CloudFormation User Guide.
 --
--- Conditional: You must pass 'TemplateURL' or 'TemplateBody'. If both are passed,
--- only 'TemplateBody' is used.
+-- Conditional: You must pass 'TemplateURL' or 'TemplateBody'. If both are
+-- passed, only 'TemplateBody' is used.
 vtTemplateURL :: Lens' ValidateTemplate (Maybe Text)
-vtTemplateURL = lens _vtTemplateURL (\s a -> s { _vtTemplateURL = a })
+vtTemplateURL = lens _vtTemplateURL (\ s a -> s{_vtTemplateURL = a});
 
-data ValidateTemplateResponse = ValidateTemplateResponse
-    { _vtrCapabilities       :: List "member" Capability
-    , _vtrCapabilitiesReason :: Maybe Text
-    , _vtrDescription        :: Maybe Text
-    , _vtrParameters         :: List "member" TemplateParameter
-    } deriving (Eq, Read, Show)
+instance AWSRequest ValidateTemplate where
+        type Sv ValidateTemplate = CloudFormation
+        type Rs ValidateTemplate = ValidateTemplateResponse
+        request = postQuery
+        response
+          = receiveXMLWrapper "ValidateTemplateResult"
+              (\ s h x ->
+                 ValidateTemplateResponse' <$>
+                   (x .@? "Parameters" .!@ mempty >>=
+                      may (parseXMLList "member"))
+                     <*> (x .@? "CapabilitiesReason")
+                     <*>
+                     (x .@? "Capabilities" .!@ mempty >>=
+                        may (parseXMLList "member"))
+                     <*> (x .@? "Description")
+                     <*> (pure (fromEnum s)))
 
--- | 'ValidateTemplateResponse' constructor.
+instance ToHeaders ValidateTemplate where
+        toHeaders = const mempty
+
+instance ToPath ValidateTemplate where
+        toPath = const "/"
+
+instance ToQuery ValidateTemplate where
+        toQuery ValidateTemplate'{..}
+          = mconcat
+              ["Action" =: ("ValidateTemplate" :: ByteString),
+               "Version" =: ("2010-05-15" :: ByteString),
+               "TemplateBody" =: _vtTemplateBody,
+               "TemplateURL" =: _vtTemplateURL]
+
+-- | The output for ValidateTemplate action.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'validateTemplateResponse' smart constructor.
+data ValidateTemplateResponse = ValidateTemplateResponse'
+    { _vtrsParameters         :: !(Maybe [TemplateParameter])
+    , _vtrsCapabilitiesReason :: !(Maybe Text)
+    , _vtrsCapabilities       :: !(Maybe [Capability])
+    , _vtrsDescription        :: !(Maybe Text)
+    , _vtrsStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ValidateTemplateResponse' with the minimum fields required to make a request.
 --
--- * 'vtrCapabilities' @::@ ['Capability']
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'vtrCapabilitiesReason' @::@ 'Maybe' 'Text'
+-- * 'vtrsParameters'
 --
--- * 'vtrDescription' @::@ 'Maybe' 'Text'
+-- * 'vtrsCapabilitiesReason'
 --
--- * 'vtrParameters' @::@ ['TemplateParameter']
+-- * 'vtrsCapabilities'
 --
-validateTemplateResponse :: ValidateTemplateResponse
-validateTemplateResponse = ValidateTemplateResponse
-    { _vtrParameters         = mempty
-    , _vtrDescription        = Nothing
-    , _vtrCapabilities       = mempty
-    , _vtrCapabilitiesReason = Nothing
+-- * 'vtrsDescription'
+--
+-- * 'vtrsStatus'
+validateTemplateResponse
+    :: Int -- ^ 'vtrsStatus'
+    -> ValidateTemplateResponse
+validateTemplateResponse pStatus_ =
+    ValidateTemplateResponse'
+    { _vtrsParameters = Nothing
+    , _vtrsCapabilitiesReason = Nothing
+    , _vtrsCapabilities = Nothing
+    , _vtrsDescription = Nothing
+    , _vtrsStatus = pStatus_
     }
 
--- | The capabilities found within the template. Currently, AWS CloudFormation
--- supports only the CAPABILITY_IAM capability. If your template contains IAM
--- resources, you must specify the CAPABILITY_IAM value for this parameter when
--- you use the 'CreateStack' or 'UpdateStack' actions with your template; otherwise,
--- those actions return an InsufficientCapabilities error.
-vtrCapabilities :: Lens' ValidateTemplateResponse [Capability]
-vtrCapabilities = lens _vtrCapabilities (\s a -> s { _vtrCapabilities = a }) . _List
-
--- | The list of resources that generated the values in the 'Capabilities' response
--- element.
-vtrCapabilitiesReason :: Lens' ValidateTemplateResponse (Maybe Text)
-vtrCapabilitiesReason =
-    lens _vtrCapabilitiesReason (\s a -> s { _vtrCapabilitiesReason = a })
-
--- | The description found within the template.
-vtrDescription :: Lens' ValidateTemplateResponse (Maybe Text)
-vtrDescription = lens _vtrDescription (\s a -> s { _vtrDescription = a })
-
 -- | A list of 'TemplateParameter' structures.
-vtrParameters :: Lens' ValidateTemplateResponse [TemplateParameter]
-vtrParameters = lens _vtrParameters (\s a -> s { _vtrParameters = a }) . _List
-
-instance ToPath ValidateTemplate where
-    toPath = const "/"
-
-instance ToQuery ValidateTemplate where
-    toQuery ValidateTemplate{..} = mconcat
-        [ "TemplateBody" =? _vtTemplateBody
-        , "TemplateURL"  =? _vtTemplateURL
-        ]
+vtrsParameters :: Lens' ValidateTemplateResponse [TemplateParameter]
+vtrsParameters = lens _vtrsParameters (\ s a -> s{_vtrsParameters = a}) . _Default . _Coerce;
 
-instance ToHeaders ValidateTemplate
+-- | The list of resources that generated the values in the 'Capabilities'
+-- response element.
+vtrsCapabilitiesReason :: Lens' ValidateTemplateResponse (Maybe Text)
+vtrsCapabilitiesReason = lens _vtrsCapabilitiesReason (\ s a -> s{_vtrsCapabilitiesReason = a});
 
-instance AWSRequest ValidateTemplate where
-    type Sv ValidateTemplate = CloudFormation
-    type Rs ValidateTemplate = ValidateTemplateResponse
+-- | The capabilities found within the template. Currently, AWS
+-- CloudFormation supports only the CAPABILITY_IAM capability. If your
+-- template contains IAM resources, you must specify the CAPABILITY_IAM
+-- value for this parameter when you use the CreateStack or UpdateStack
+-- actions with your template; otherwise, those actions return an
+-- InsufficientCapabilities error.
+vtrsCapabilities :: Lens' ValidateTemplateResponse [Capability]
+vtrsCapabilities = lens _vtrsCapabilities (\ s a -> s{_vtrsCapabilities = a}) . _Default . _Coerce;
 
-    request  = post "ValidateTemplate"
-    response = xmlResponse
+-- | The description found within the template.
+vtrsDescription :: Lens' ValidateTemplateResponse (Maybe Text)
+vtrsDescription = lens _vtrsDescription (\ s a -> s{_vtrsDescription = a});
 
-instance FromXML ValidateTemplateResponse where
-    parseXML = withElement "ValidateTemplateResult" $ \x -> ValidateTemplateResponse
-        <$> x .@? "Capabilities" .!@ mempty
-        <*> x .@? "CapabilitiesReason"
-        <*> x .@? "Description"
-        <*> x .@? "Parameters" .!@ mempty
+-- | The response status code.
+vtrsStatus :: Lens' ValidateTemplateResponse Int
+vtrsStatus = lens _vtrsStatus (\ s a -> s{_vtrsStatus = a});
diff --git a/gen/Network/AWS/CloudFormation/Waiters.hs b/gen/Network/AWS/CloudFormation/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudFormation/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.CloudFormation.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.CloudFormation.Waiters where
+
+import           Network.AWS.CloudFormation.Types
+import           Network.AWS.Prelude
+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.CloudFormation
+import Test.AWS.CloudFormation.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "CloudFormation"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/CloudFormation.hs b/test/Test/AWS/CloudFormation.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudFormation.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.CloudFormation
+-- 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.CloudFormation
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.CloudFormation
+import           Test.AWS.Gen.CloudFormation
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/CloudFormation/Internal.hs b/test/Test/AWS/CloudFormation/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudFormation/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.CloudFormation.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.CloudFormation.Internal where
+
+import Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/CloudFormation.hs b/test/Test/AWS/Gen/CloudFormation.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/CloudFormation.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.CloudFormation
+-- 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.CloudFormation where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.CloudFormation
+import Test.AWS.CloudFormation.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"
+--         [ testDeleteStack $
+--             deleteStack
+--
+--         , testUpdateStack $
+--             updateStack
+--
+--         , testGetTemplateSummary $
+--             getTemplateSummary
+--
+--         , testListStackResources $
+--             listStackResources
+--
+--         , testDescribeStacks $
+--             describeStacks
+--
+--         , testGetStackPolicy $
+--             getStackPolicy
+--
+--         , testValidateTemplate $
+--             validateTemplate
+--
+--         , testCancelUpdateStack $
+--             cancelUpdateStack
+--
+--         , testSetStackPolicy $
+--             setStackPolicy
+--
+--         , testDescribeStackEvents $
+--             describeStackEvents
+--
+--         , testSignalResource $
+--             signalResource
+--
+--         , testListStacks $
+--             listStacks
+--
+--         , testCreateStack $
+--             createStack
+--
+--         , testDescribeStackResources $
+--             describeStackResources
+--
+--         , testEstimateTemplateCost $
+--             estimateTemplateCost
+--
+--         , testGetTemplate $
+--             getTemplate
+--
+--         , testDescribeStackResource $
+--             describeStackResource
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testDeleteStackResponse $
+--             deleteStackResponse
+--
+--         , testUpdateStackResponse $
+--             updateStackResponse
+--
+--         , testGetTemplateSummaryResponse $
+--             getTemplateSummaryResponse
+--
+--         , testListStackResourcesResponse $
+--             listStackResourcesResponse
+--
+--         , testDescribeStacksResponse $
+--             describeStacksResponse
+--
+--         , testGetStackPolicyResponse $
+--             getStackPolicyResponse
+--
+--         , testValidateTemplateResponse $
+--             validateTemplateResponse
+--
+--         , testCancelUpdateStackResponse $
+--             cancelUpdateStackResponse
+--
+--         , testSetStackPolicyResponse $
+--             setStackPolicyResponse
+--
+--         , testDescribeStackEventsResponse $
+--             describeStackEventsResponse
+--
+--         , testSignalResourceResponse $
+--             signalResourceResponse
+--
+--         , testListStacksResponse $
+--             listStacksResponse
+--
+--         , testCreateStackResponse $
+--             createStackResponse
+--
+--         , testDescribeStackResourcesResponse $
+--             describeStackResourcesResponse
+--
+--         , testEstimateTemplateCostResponse $
+--             estimateTemplateCostResponse
+--
+--         , testGetTemplateResponse $
+--             getTemplateResponse
+--
+--         , testDescribeStackResourceResponse $
+--             describeStackResourceResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testDeleteStack :: DeleteStack -> TestTree
+testDeleteStack = req
+    "DeleteStack"
+    "fixture/DeleteStack"
+
+testUpdateStack :: UpdateStack -> TestTree
+testUpdateStack = req
+    "UpdateStack"
+    "fixture/UpdateStack"
+
+testGetTemplateSummary :: GetTemplateSummary -> TestTree
+testGetTemplateSummary = req
+    "GetTemplateSummary"
+    "fixture/GetTemplateSummary"
+
+testListStackResources :: ListStackResources -> TestTree
+testListStackResources = req
+    "ListStackResources"
+    "fixture/ListStackResources"
+
+testDescribeStacks :: DescribeStacks -> TestTree
+testDescribeStacks = req
+    "DescribeStacks"
+    "fixture/DescribeStacks"
+
+testGetStackPolicy :: GetStackPolicy -> TestTree
+testGetStackPolicy = req
+    "GetStackPolicy"
+    "fixture/GetStackPolicy"
+
+testValidateTemplate :: ValidateTemplate -> TestTree
+testValidateTemplate = req
+    "ValidateTemplate"
+    "fixture/ValidateTemplate"
+
+testCancelUpdateStack :: CancelUpdateStack -> TestTree
+testCancelUpdateStack = req
+    "CancelUpdateStack"
+    "fixture/CancelUpdateStack"
+
+testSetStackPolicy :: SetStackPolicy -> TestTree
+testSetStackPolicy = req
+    "SetStackPolicy"
+    "fixture/SetStackPolicy"
+
+testDescribeStackEvents :: DescribeStackEvents -> TestTree
+testDescribeStackEvents = req
+    "DescribeStackEvents"
+    "fixture/DescribeStackEvents"
+
+testSignalResource :: SignalResource -> TestTree
+testSignalResource = req
+    "SignalResource"
+    "fixture/SignalResource"
+
+testListStacks :: ListStacks -> TestTree
+testListStacks = req
+    "ListStacks"
+    "fixture/ListStacks"
+
+testCreateStack :: CreateStack -> TestTree
+testCreateStack = req
+    "CreateStack"
+    "fixture/CreateStack"
+
+testDescribeStackResources :: DescribeStackResources -> TestTree
+testDescribeStackResources = req
+    "DescribeStackResources"
+    "fixture/DescribeStackResources"
+
+testEstimateTemplateCost :: EstimateTemplateCost -> TestTree
+testEstimateTemplateCost = req
+    "EstimateTemplateCost"
+    "fixture/EstimateTemplateCost"
+
+testGetTemplate :: GetTemplate -> TestTree
+testGetTemplate = req
+    "GetTemplate"
+    "fixture/GetTemplate"
+
+testDescribeStackResource :: DescribeStackResource -> TestTree
+testDescribeStackResource = req
+    "DescribeStackResource"
+    "fixture/DescribeStackResource"
+
+-- Responses
+
+testDeleteStackResponse :: DeleteStackResponse -> TestTree
+testDeleteStackResponse = res
+    "DeleteStackResponse"
+    "fixture/DeleteStackResponse"
+    (Proxy :: Proxy DeleteStack)
+
+testUpdateStackResponse :: UpdateStackResponse -> TestTree
+testUpdateStackResponse = res
+    "UpdateStackResponse"
+    "fixture/UpdateStackResponse"
+    (Proxy :: Proxy UpdateStack)
+
+testGetTemplateSummaryResponse :: GetTemplateSummaryResponse -> TestTree
+testGetTemplateSummaryResponse = res
+    "GetTemplateSummaryResponse"
+    "fixture/GetTemplateSummaryResponse"
+    (Proxy :: Proxy GetTemplateSummary)
+
+testListStackResourcesResponse :: ListStackResourcesResponse -> TestTree
+testListStackResourcesResponse = res
+    "ListStackResourcesResponse"
+    "fixture/ListStackResourcesResponse"
+    (Proxy :: Proxy ListStackResources)
+
+testDescribeStacksResponse :: DescribeStacksResponse -> TestTree
+testDescribeStacksResponse = res
+    "DescribeStacksResponse"
+    "fixture/DescribeStacksResponse"
+    (Proxy :: Proxy DescribeStacks)
+
+testGetStackPolicyResponse :: GetStackPolicyResponse -> TestTree
+testGetStackPolicyResponse = res
+    "GetStackPolicyResponse"
+    "fixture/GetStackPolicyResponse"
+    (Proxy :: Proxy GetStackPolicy)
+
+testValidateTemplateResponse :: ValidateTemplateResponse -> TestTree
+testValidateTemplateResponse = res
+    "ValidateTemplateResponse"
+    "fixture/ValidateTemplateResponse"
+    (Proxy :: Proxy ValidateTemplate)
+
+testCancelUpdateStackResponse :: CancelUpdateStackResponse -> TestTree
+testCancelUpdateStackResponse = res
+    "CancelUpdateStackResponse"
+    "fixture/CancelUpdateStackResponse"
+    (Proxy :: Proxy CancelUpdateStack)
+
+testSetStackPolicyResponse :: SetStackPolicyResponse -> TestTree
+testSetStackPolicyResponse = res
+    "SetStackPolicyResponse"
+    "fixture/SetStackPolicyResponse"
+    (Proxy :: Proxy SetStackPolicy)
+
+testDescribeStackEventsResponse :: DescribeStackEventsResponse -> TestTree
+testDescribeStackEventsResponse = res
+    "DescribeStackEventsResponse"
+    "fixture/DescribeStackEventsResponse"
+    (Proxy :: Proxy DescribeStackEvents)
+
+testSignalResourceResponse :: SignalResourceResponse -> TestTree
+testSignalResourceResponse = res
+    "SignalResourceResponse"
+    "fixture/SignalResourceResponse"
+    (Proxy :: Proxy SignalResource)
+
+testListStacksResponse :: ListStacksResponse -> TestTree
+testListStacksResponse = res
+    "ListStacksResponse"
+    "fixture/ListStacksResponse"
+    (Proxy :: Proxy ListStacks)
+
+testCreateStackResponse :: CreateStackResponse -> TestTree
+testCreateStackResponse = res
+    "CreateStackResponse"
+    "fixture/CreateStackResponse"
+    (Proxy :: Proxy CreateStack)
+
+testDescribeStackResourcesResponse :: DescribeStackResourcesResponse -> TestTree
+testDescribeStackResourcesResponse = res
+    "DescribeStackResourcesResponse"
+    "fixture/DescribeStackResourcesResponse"
+    (Proxy :: Proxy DescribeStackResources)
+
+testEstimateTemplateCostResponse :: EstimateTemplateCostResponse -> TestTree
+testEstimateTemplateCostResponse = res
+    "EstimateTemplateCostResponse"
+    "fixture/EstimateTemplateCostResponse"
+    (Proxy :: Proxy EstimateTemplateCost)
+
+testGetTemplateResponse :: GetTemplateResponse -> TestTree
+testGetTemplateResponse = res
+    "GetTemplateResponse"
+    "fixture/GetTemplateResponse"
+    (Proxy :: Proxy GetTemplate)
+
+testDescribeStackResourceResponse :: DescribeStackResourceResponse -> TestTree
+testDescribeStackResourceResponse = res
+    "DescribeStackResourceResponse"
+    "fixture/DescribeStackResourceResponse"
+    (Proxy :: Proxy DescribeStackResource)
