diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,28 +1,41 @@
 # Amazon CloudFront SDK
 
-> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
-
+* [Version](#version)
 * [Description](#description)
 * [Contribute](#contribute)
 * [Licence](#licence)
 
+
+## Version
+
+`1.0.0`
+
+
 ## Description
 
-Amazon CloudFront is a web service that speeds up distribution of your static
-and dynamic web content, for example, .html, .css, .php, image, and media
-files, to end users. CloudFront delivers your content through a worldwide
-network of edge locations. When an end user requests content that you're
-serving with CloudFront, the user is routed to the edge location that
-provides the lowest latency, so content is delivered with the best possible
-performance. If the content is already in that edge location, CloudFront
-delivers it immediately. If the content is not currently in that edge
-location, CloudFront retrieves it from an Amazon S3 bucket or an HTTP server
-(for example, a web server) that you have identified as the source for the
-definitive version of your content.
+Amazon CloudFront is a web service that speeds up distribution of your
+static and dynamic web content, for example, .html, .css, .php, image,
+and media files, to end users. CloudFront delivers your content through
+a worldwide network of edge locations. When an end user requests content
+that you\'re serving with CloudFront, the user is routed to the edge
+location that provides the lowest latency, so content is delivered with
+the best possible performance. If the content is already in that edge
+location, CloudFront delivers it immediately. If the content is not
+currently in that edge location, CloudFront retrieves it from an Amazon
+S3 bucket or an HTTP server (for example, a web server) that you have
+identified as the source for the definitive version of your content.
 
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-cloudfront)
 and the [AWS API Reference](http://docs.aws.amazon.com/AmazonCloudFront/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-cloudfront.cabal b/amazonka-cloudfront.cabal
--- a/amazonka-cloudfront.cabal
+++ b/amazonka-cloudfront.cabal
@@ -1,35 +1,43 @@
 name:                  amazonka-cloudfront
-version:               0.3.6
+version:               1.0.0
 synopsis:              Amazon CloudFront SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2014 Brendan Hay
+copyright:             Copyright (c) 2013-2015 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 extra-source-files:    README.md
 cabal-version:         >= 1.10
 
 description:
-    Amazon CloudFront is a web service that speeds up distribution of your static
-    and dynamic web content, for example, .html, .css, .php, image, and media
-    files, to end users. CloudFront delivers your content through a worldwide
-    network of edge locations. When an end user requests content that you're
-    serving with CloudFront, the user is routed to the edge location that
-    provides the lowest latency, so content is delivered with the best possible
-    performance. If the content is already in that edge location, CloudFront
-    delivers it immediately. If the content is not currently in that edge
-    location, CloudFront retrieves it from an Amazon S3 bucket or an HTTP server
-    (for example, a web server) that you have identified as the source for the
-    definitive version of your content.
-
+    Amazon CloudFront is a web service that speeds up distribution of your
+    static and dynamic web content, for example, .html, .css, .php, image,
+    and media files, to end users. CloudFront delivers your content through
+    a worldwide network of edge locations. When an end user requests content
+    that you\'re serving with CloudFront, the user is routed to the edge
+    location that provides the lowest latency, so content is delivered with
+    the best possible performance. If the content is already in that edge
+    location, CloudFront delivers it immediately. If the content is not
+    currently in that edge location, CloudFront retrieves it from an Amazon
+    S3 bucket or an HTTP server (for example, a web server) that you have
+    identified as the source for the definitive version of your content.
     .
-    /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/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.CloudFront" and the <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/Welcome.html AWS API Reference>
+    to get started.
 
 source-repository head
     type:     git
@@ -65,9 +73,40 @@
         , Network.AWS.CloudFront.UpdateCloudFrontOriginAccessIdentity
         , Network.AWS.CloudFront.UpdateDistribution
         , Network.AWS.CloudFront.UpdateStreamingDistribution
+        , Network.AWS.CloudFront.Waiters
 
     other-modules:
+          Network.AWS.CloudFront.Types.Product
+        , Network.AWS.CloudFront.Types.Sum
 
     build-depends:
-          amazonka-core == 0.3.6.*
+          amazonka-core == 1.0.0.*
         , base          >= 4.7     && < 5
+
+test-suite amazonka-cloudfront-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.CloudFront
+        , Test.AWS.Gen.CloudFront
+        , Test.AWS.CloudFront.Internal
+
+    build-depends:
+          amazonka-core == 1.0.0
+        , amazonka-test == 1.0.0
+        , amazonka-cloudfront == 1.0.0
+        , base
+        , bytestring
+        , lens
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/gen/Network/AWS/CloudFront.hs b/gen/Network/AWS/CloudFront.hs
--- a/gen/Network/AWS/CloudFront.hs
+++ b/gen/Network/AWS/CloudFront.hs
@@ -1,70 +1,681 @@
+{-# 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.CloudFront
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Copyright   : (c) 2013-2015 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
+-- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Amazon CloudFront is a web service that speeds up distribution of your static
--- and dynamic web content, for example, .html, .css, .php, image, and media
--- files, to end users. CloudFront delivers your content through a worldwide
--- network of edge locations. When an end user requests content that you're
--- serving with CloudFront, the user is routed to the edge location that
--- provides the lowest latency, so content is delivered with the best possible
--- performance. If the content is already in that edge location, CloudFront
--- delivers it immediately. If the content is not currently in that edge
--- location, CloudFront retrieves it from an Amazon S3 bucket or an HTTP server
--- (for example, a web server) that you have identified as the source for the
--- definitive version of your content.
+-- Amazon CloudFront is a web service that speeds up distribution of your
+-- static and dynamic web content, for example, .html, .css, .php, image,
+-- and media files, to end users. CloudFront delivers your content through
+-- a worldwide network of edge locations. When an end user requests content
+-- that you\'re serving with CloudFront, the user is routed to the edge
+-- location that provides the lowest latency, so content is delivered with
+-- the best possible performance. If the content is already in that edge
+-- location, CloudFront delivers it immediately. If the content is not
+-- currently in that edge location, CloudFront retrieves it from an Amazon
+-- S3 bucket or an HTTP server (for example, a web server) that you have
+-- identified as the source for the definitive version of your content.
+--
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.CloudFront
-    ( module Network.AWS.CloudFront.CreateCloudFrontOriginAccessIdentity
-    , module Network.AWS.CloudFront.CreateDistribution
-    , module Network.AWS.CloudFront.CreateInvalidation
-    , module Network.AWS.CloudFront.CreateStreamingDistribution
-    , module Network.AWS.CloudFront.DeleteCloudFrontOriginAccessIdentity
-    , module Network.AWS.CloudFront.DeleteDistribution
+    (
+    -- * Service
+      CloudFront
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidErrorCode
+    , _InvalidErrorCode
+
+    -- ** TooManyCacheBehaviors
+    , _TooManyCacheBehaviors
+
+    -- ** DistributionNotDisabled
+    , _DistributionNotDisabled
+
+    -- ** InvalidOriginAccessIdentity
+    , _InvalidOriginAccessIdentity
+
+    -- ** TooManyCloudFrontOriginAccessIdentities
+    , _TooManyCloudFrontOriginAccessIdentities
+
+    -- ** TooManyStreamingDistributions
+    , _TooManyStreamingDistributions
+
+    -- ** InvalidArgument
+    , _InvalidArgument
+
+    -- ** NoSuchCloudFrontOriginAccessIdentity
+    , _NoSuchCloudFrontOriginAccessIdentity
+
+    -- ** NoSuchStreamingDistribution
+    , _NoSuchStreamingDistribution
+
+    -- ** CloudFrontOriginAccessIdentityInUse
+    , _CloudFrontOriginAccessIdentityInUse
+
+    -- ** InconsistentQuantities
+    , _InconsistentQuantities
+
+    -- ** TooManyInvalidationsInProgress
+    , _TooManyInvalidationsInProgress
+
+    -- ** TooManyDistributionCNAMEs
+    , _TooManyDistributionCNAMEs
+
+    -- ** InvalidForwardCookies
+    , _InvalidForwardCookies
+
+    -- ** TooManyCookieNamesInWhiteList
+    , _TooManyCookieNamesInWhiteList
+
+    -- ** BatchTooLarge
+    , _BatchTooLarge
+
+    -- ** InvalidOrigin
+    , _InvalidOrigin
+
+    -- ** TooManyTrustedSigners
+    , _TooManyTrustedSigners
+
+    -- ** NoSuchOrigin
+    , _NoSuchOrigin
+
+    -- ** NoSuchInvalidation
+    , _NoSuchInvalidation
+
+    -- ** StreamingDistributionNotDisabled
+    , _StreamingDistributionNotDisabled
+
+    -- ** InvalidTTLOrder
+    , _InvalidTTLOrder
+
+    -- ** TooManyStreamingDistributionCNAMEs
+    , _TooManyStreamingDistributionCNAMEs
+
+    -- ** TooManyDistributions
+    , _TooManyDistributions
+
+    -- ** InvalidRequiredProtocol
+    , _InvalidRequiredProtocol
+
+    -- ** TooManyHeadersInForwardedValues
+    , _TooManyHeadersInForwardedValues
+
+    -- ** TooManyCertificates
+    , _TooManyCertificates
+
+    -- ** MissingBody
+    , _MissingBody
+
+    -- ** DistributionAlreadyExists
+    , _DistributionAlreadyExists
+
+    -- ** IllegalUpdate
+    , _IllegalUpdate
+
+    -- ** InvalidResponseCode
+    , _InvalidResponseCode
+
+    -- ** InvalidIfMatchVersion
+    , _InvalidIfMatchVersion
+
+    -- ** PreconditionFailed
+    , _PreconditionFailed
+
+    -- ** InvalidProtocolSettings
+    , _InvalidProtocolSettings
+
+    -- ** TrustedSignerDoesNotExist
+    , _TrustedSignerDoesNotExist
+
+    -- ** InvalidHeadersForS3Origin
+    , _InvalidHeadersForS3Origin
+
+    -- ** CNAMEAlreadyExists
+    , _CNAMEAlreadyExists
+
+    -- ** StreamingDistributionAlreadyExists
+    , _StreamingDistributionAlreadyExists
+
+    -- ** TooManyOrigins
+    , _TooManyOrigins
+
+    -- ** CloudFrontOriginAccessIdentityAlreadyExists
+    , _CloudFrontOriginAccessIdentityAlreadyExists
+
+    -- ** InvalidRelativePath
+    , _InvalidRelativePath
+
+    -- ** InvalidMinimumProtocolVersion
+    , _InvalidMinimumProtocolVersion
+
+    -- ** AccessDenied
+    , _AccessDenied
+
+    -- ** NoSuchDistribution
+    , _NoSuchDistribution
+
+    -- ** InvalidViewerCertificate
+    , _InvalidViewerCertificate
+
+    -- ** InvalidDefaultRootObject
+    , _InvalidDefaultRootObject
+
+    -- ** InvalidLocationCode
+    , _InvalidLocationCode
+
+    -- ** InvalidGeoRestrictionParameter
+    , _InvalidGeoRestrictionParameter
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DeleteStreamingDistribution
     , module Network.AWS.CloudFront.DeleteStreamingDistribution
-    , module Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentity
-    , module Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentityConfig
-    , module Network.AWS.CloudFront.GetDistribution
+
+    -- ** UpdateStreamingDistribution
+    , module Network.AWS.CloudFront.UpdateStreamingDistribution
+
+    -- ** CreateDistribution
+    , module Network.AWS.CloudFront.CreateDistribution
+
+    -- ** GetDistributionConfig
     , module Network.AWS.CloudFront.GetDistributionConfig
-    , module Network.AWS.CloudFront.GetInvalidation
-    , module Network.AWS.CloudFront.GetStreamingDistribution
+
+    -- ** GetDistribution
+    , module Network.AWS.CloudFront.GetDistribution
+
+    -- ** DeleteCloudFrontOriginAccessIdentity
+    , module Network.AWS.CloudFront.DeleteCloudFrontOriginAccessIdentity
+
+    -- ** UpdateCloudFrontOriginAccessIdentity
+    , module Network.AWS.CloudFront.UpdateCloudFrontOriginAccessIdentity
+
+    -- ** ListStreamingDistributions
+    , module Network.AWS.CloudFront.ListStreamingDistributions
+
+    -- ** GetStreamingDistributionConfig
     , module Network.AWS.CloudFront.GetStreamingDistributionConfig
+
+    -- ** GetCloudFrontOriginAccessIdentityConfig
+    , module Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentityConfig
+
+    -- ** CreateStreamingDistribution
+    , module Network.AWS.CloudFront.CreateStreamingDistribution
+
+    -- ** CreateCloudFrontOriginAccessIdentity
+    , module Network.AWS.CloudFront.CreateCloudFrontOriginAccessIdentity
+
+    -- ** ListCloudFrontOriginAccessIdentities
     , module Network.AWS.CloudFront.ListCloudFrontOriginAccessIdentities
-    , module Network.AWS.CloudFront.ListDistributions
+
+    -- ** GetInvalidation
+    , module Network.AWS.CloudFront.GetInvalidation
+
+    -- ** ListInvalidations
     , module Network.AWS.CloudFront.ListInvalidations
-    , module Network.AWS.CloudFront.ListStreamingDistributions
-    , module Network.AWS.CloudFront.Types
-    , module Network.AWS.CloudFront.UpdateCloudFrontOriginAccessIdentity
+
+    -- ** GetStreamingDistribution
+    , module Network.AWS.CloudFront.GetStreamingDistribution
+
+    -- ** GetCloudFrontOriginAccessIdentity
+    , module Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentity
+
+    -- ** CreateInvalidation
+    , module Network.AWS.CloudFront.CreateInvalidation
+
+    -- ** UpdateDistribution
     , module Network.AWS.CloudFront.UpdateDistribution
-    , module Network.AWS.CloudFront.UpdateStreamingDistribution
+
+    -- ** DeleteDistribution
+    , module Network.AWS.CloudFront.DeleteDistribution
+
+    -- ** ListDistributions
+    , module Network.AWS.CloudFront.ListDistributions
+
+    -- * Types
+
+    -- ** GeoRestrictionType
+    , GeoRestrictionType (..)
+
+    -- ** ItemSelection
+    , ItemSelection (..)
+
+    -- ** Method
+    , Method (..)
+
+    -- ** MinimumProtocolVersion
+    , MinimumProtocolVersion (..)
+
+    -- ** OriginProtocolPolicy
+    , OriginProtocolPolicy (..)
+
+    -- ** PriceClass
+    , PriceClass (..)
+
+    -- ** SSLSupportMethod
+    , SSLSupportMethod (..)
+
+    -- ** ViewerProtocolPolicy
+    , ViewerProtocolPolicy (..)
+
+    -- ** ActiveTrustedSigners
+    , ActiveTrustedSigners
+    , activeTrustedSigners
+    , atsItems
+    , atsEnabled
+    , atsQuantity
+
+    -- ** Aliases
+    , Aliases
+    , aliases
+    , aItems
+    , aQuantity
+
+    -- ** AllowedMethods
+    , AllowedMethods
+    , allowedMethods
+    , amCachedMethods
+    , amQuantity
+    , amItems
+
+    -- ** CacheBehavior
+    , CacheBehavior
+    , cacheBehavior
+    , cbAllowedMethods
+    , cbMaxTTL
+    , cbSmoothStreaming
+    , cbDefaultTTL
+    , cbPathPattern
+    , cbTargetOriginId
+    , cbForwardedValues
+    , cbTrustedSigners
+    , cbViewerProtocolPolicy
+    , cbMinTTL
+
+    -- ** CacheBehaviors
+    , CacheBehaviors
+    , cacheBehaviors
+    , cbItems
+    , cbQuantity
+
+    -- ** CachedMethods
+    , CachedMethods
+    , cachedMethods
+    , cmQuantity
+    , cmItems
+
+    -- ** CloudFrontOriginAccessIdentity
+    , CloudFrontOriginAccessIdentity
+    , cloudFrontOriginAccessIdentity
+    , cfoaiCloudFrontOriginAccessIdentityConfig
+    , cfoaiId
+    , cfoaiS3CanonicalUserId
+
+    -- ** CloudFrontOriginAccessIdentityConfig
+    , CloudFrontOriginAccessIdentityConfig
+    , cloudFrontOriginAccessIdentityConfig
+    , cfoaicCallerReference
+    , cfoaicComment
+
+    -- ** CloudFrontOriginAccessIdentityList
+    , CloudFrontOriginAccessIdentityList
+    , cloudFrontOriginAccessIdentityList
+    , cfoailItems
+    , cfoailNextMarker
+    , cfoailMarker
+    , cfoailMaxItems
+    , cfoailIsTruncated
+    , cfoailQuantity
+
+    -- ** CloudFrontOriginAccessIdentitySummary
+    , CloudFrontOriginAccessIdentitySummary
+    , cloudFrontOriginAccessIdentitySummary
+    , cfoaisId
+    , cfoaisS3CanonicalUserId
+    , cfoaisComment
+
+    -- ** CookieNames
+    , CookieNames
+    , cookieNames
+    , cnItems
+    , cnQuantity
+
+    -- ** CookiePreference
+    , CookiePreference
+    , cookiePreference
+    , cpWhitelistedNames
+    , cpForward
+
+    -- ** CustomErrorResponse
+    , CustomErrorResponse
+    , customErrorResponse
+    , ceResponsePagePath
+    , ceResponseCode
+    , ceErrorCachingMinTTL
+    , ceErrorCode
+
+    -- ** CustomErrorResponses
+    , CustomErrorResponses
+    , customErrorResponses
+    , cerItems
+    , cerQuantity
+
+    -- ** CustomOriginConfig
+    , CustomOriginConfig
+    , customOriginConfig
+    , cocHTTPPort
+    , cocHTTPSPort
+    , cocOriginProtocolPolicy
+
+    -- ** DefaultCacheBehavior
+    , DefaultCacheBehavior
+    , defaultCacheBehavior
+    , dcbAllowedMethods
+    , dcbMaxTTL
+    , dcbSmoothStreaming
+    , dcbDefaultTTL
+    , dcbTargetOriginId
+    , dcbForwardedValues
+    , dcbTrustedSigners
+    , dcbViewerProtocolPolicy
+    , dcbMinTTL
+
+    -- ** Distribution
+    , Distribution
+    , distribution
+    , dId
+    , dStatus
+    , dLastModifiedTime
+    , dInProgressInvalidationBatches
+    , dDomainName
+    , dActiveTrustedSigners
+    , dDistributionConfig
+
+    -- ** DistributionConfig
+    , DistributionConfig
+    , distributionConfig
+    , dcDefaultRootObject
+    , dcAliases
+    , dcCustomErrorResponses
+    , dcPriceClass
+    , dcViewerCertificate
+    , dcRestrictions
+    , dcCacheBehaviors
+    , dcLogging
+    , dcCallerReference
+    , dcOrigins
+    , dcDefaultCacheBehavior
+    , dcComment
+    , dcEnabled
+
+    -- ** DistributionList
+    , DistributionList
+    , distributionList
+    , dlItems
+    , dlNextMarker
+    , dlMarker
+    , dlMaxItems
+    , dlIsTruncated
+    , dlQuantity
+
+    -- ** DistributionSummary
+    , DistributionSummary
+    , distributionSummary
+    , dsId
+    , dsStatus
+    , dsLastModifiedTime
+    , dsDomainName
+    , dsAliases
+    , dsOrigins
+    , dsDefaultCacheBehavior
+    , dsCacheBehaviors
+    , dsCustomErrorResponses
+    , dsComment
+    , dsPriceClass
+    , dsEnabled
+    , dsViewerCertificate
+    , dsRestrictions
+
+    -- ** ForwardedValues
+    , ForwardedValues
+    , forwardedValues
+    , fvHeaders
+    , fvQueryString
+    , fvCookies
+
+    -- ** GeoRestriction
+    , GeoRestriction
+    , geoRestriction
+    , grItems
+    , grRestrictionType
+    , grQuantity
+
+    -- ** Headers
+    , Headers
+    , headers
+    , hItems
+    , hQuantity
+
+    -- ** Invalidation
+    , Invalidation
+    , invalidation
+    , iId
+    , iStatus
+    , iCreateTime
+    , iInvalidationBatch
+
+    -- ** InvalidationBatch
+    , InvalidationBatch
+    , invalidationBatch
+    , ibPaths
+    , ibCallerReference
+
+    -- ** InvalidationList
+    , InvalidationList
+    , invalidationList
+    , ilItems
+    , ilNextMarker
+    , ilMarker
+    , ilMaxItems
+    , ilIsTruncated
+    , ilQuantity
+
+    -- ** InvalidationSummary
+    , InvalidationSummary
+    , invalidationSummary
+    , isId
+    , isCreateTime
+    , isStatus
+
+    -- ** KeyPairIds
+    , KeyPairIds
+    , keyPairIds
+    , kpiItems
+    , kpiQuantity
+
+    -- ** LoggingConfig
+    , LoggingConfig
+    , loggingConfig
+    , lcEnabled
+    , lcIncludeCookies
+    , lcBucket
+    , lcPrefix
+
+    -- ** Origin
+    , Origin
+    , origin
+    , oCustomOriginConfig
+    , oS3OriginConfig
+    , oOriginPath
+    , oId
+    , oDomainName
+
+    -- ** Origins
+    , Origins
+    , origins
+    , oItems
+    , oQuantity
+
+    -- ** Paths
+    , Paths
+    , paths
+    , pItems
+    , pQuantity
+
+    -- ** Restrictions
+    , Restrictions
+    , restrictions
+    , rGeoRestriction
+
+    -- ** S3Origin
+    , S3Origin
+    , s3Origin
+    , soDomainName
+    , soOriginAccessIdentity
+
+    -- ** S3OriginConfig
+    , S3OriginConfig
+    , s3OriginConfig
+    , socOriginAccessIdentity
+
+    -- ** Signer
+    , Signer
+    , signer
+    , sAWSAccountNumber
+    , sKeyPairIds
+
+    -- ** StreamingDistribution
+    , StreamingDistribution
+    , streamingDistribution
+    , sdLastModifiedTime
+    , sdId
+    , sdStatus
+    , sdDomainName
+    , sdActiveTrustedSigners
+    , sdStreamingDistributionConfig
+
+    -- ** StreamingDistributionConfig
+    , StreamingDistributionConfig
+    , streamingDistributionConfig
+    , sdcAliases
+    , sdcPriceClass
+    , sdcLogging
+    , sdcCallerReference
+    , sdcS3Origin
+    , sdcComment
+    , sdcTrustedSigners
+    , sdcEnabled
+
+    -- ** StreamingDistributionList
+    , StreamingDistributionList
+    , streamingDistributionList
+    , sdlItems
+    , sdlNextMarker
+    , sdlMarker
+    , sdlMaxItems
+    , sdlIsTruncated
+    , sdlQuantity
+
+    -- ** StreamingDistributionSummary
+    , StreamingDistributionSummary
+    , streamingDistributionSummary
+    , sdsId
+    , sdsStatus
+    , sdsLastModifiedTime
+    , sdsDomainName
+    , sdsS3Origin
+    , sdsAliases
+    , sdsTrustedSigners
+    , sdsComment
+    , sdsPriceClass
+    , sdsEnabled
+
+    -- ** StreamingLoggingConfig
+    , StreamingLoggingConfig
+    , streamingLoggingConfig
+    , slcEnabled
+    , slcBucket
+    , slcPrefix
+
+    -- ** TrustedSigners
+    , TrustedSigners
+    , trustedSigners
+    , tsItems
+    , tsEnabled
+    , tsQuantity
+
+    -- ** ViewerCertificate
+    , ViewerCertificate
+    , viewerCertificate
+    , vcSSLSupportMethod
+    , vcMinimumProtocolVersion
+    , vcIAMCertificateId
+    , vcCloudFrontDefaultCertificate
     ) where
 
-import Network.AWS.CloudFront.CreateCloudFrontOriginAccessIdentity
-import Network.AWS.CloudFront.CreateDistribution
-import Network.AWS.CloudFront.CreateInvalidation
-import Network.AWS.CloudFront.CreateStreamingDistribution
-import Network.AWS.CloudFront.DeleteCloudFrontOriginAccessIdentity
-import Network.AWS.CloudFront.DeleteDistribution
-import Network.AWS.CloudFront.DeleteStreamingDistribution
-import Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentity
-import Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentityConfig
-import Network.AWS.CloudFront.GetDistribution
-import Network.AWS.CloudFront.GetDistributionConfig
-import Network.AWS.CloudFront.GetInvalidation
-import Network.AWS.CloudFront.GetStreamingDistribution
-import Network.AWS.CloudFront.GetStreamingDistributionConfig
-import Network.AWS.CloudFront.ListCloudFrontOriginAccessIdentities
-import Network.AWS.CloudFront.ListDistributions
-import Network.AWS.CloudFront.ListInvalidations
-import Network.AWS.CloudFront.ListStreamingDistributions
-import Network.AWS.CloudFront.Types
-import Network.AWS.CloudFront.UpdateCloudFrontOriginAccessIdentity
-import Network.AWS.CloudFront.UpdateDistribution
-import Network.AWS.CloudFront.UpdateStreamingDistribution
+import           Network.AWS.CloudFront.CreateCloudFrontOriginAccessIdentity
+import           Network.AWS.CloudFront.CreateDistribution
+import           Network.AWS.CloudFront.CreateInvalidation
+import           Network.AWS.CloudFront.CreateStreamingDistribution
+import           Network.AWS.CloudFront.DeleteCloudFrontOriginAccessIdentity
+import           Network.AWS.CloudFront.DeleteDistribution
+import           Network.AWS.CloudFront.DeleteStreamingDistribution
+import           Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentity
+import           Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentityConfig
+import           Network.AWS.CloudFront.GetDistribution
+import           Network.AWS.CloudFront.GetDistributionConfig
+import           Network.AWS.CloudFront.GetInvalidation
+import           Network.AWS.CloudFront.GetStreamingDistribution
+import           Network.AWS.CloudFront.GetStreamingDistributionConfig
+import           Network.AWS.CloudFront.ListCloudFrontOriginAccessIdentities
+import           Network.AWS.CloudFront.ListDistributions
+import           Network.AWS.CloudFront.ListInvalidations
+import           Network.AWS.CloudFront.ListStreamingDistributions
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.UpdateCloudFrontOriginAccessIdentity
+import           Network.AWS.CloudFront.UpdateDistribution
+import           Network.AWS.CloudFront.UpdateStreamingDistribution
+import           Network.AWS.CloudFront.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 'CloudFront'.
+-}
+
+{- $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/CloudFront/CreateCloudFrontOriginAccessIdentity.hs b/gen/Network/AWS/CloudFront/CreateCloudFrontOriginAccessIdentity.hs
--- a/gen/Network/AWS/CloudFront/CreateCloudFrontOriginAccessIdentity.hs
+++ b/gen/Network/AWS/CloudFront/CreateCloudFrontOriginAccessIdentity.hs
@@ -1,136 +1,157 @@
-{-# 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.CloudFront.CreateCloudFrontOriginAccessIdentity
--- 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.
-
--- | Create a new origin access identity.
+-- Create a new origin access identity.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateCloudFrontOriginAccessIdentity.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateCloudFrontOriginAccessIdentity.html AWS API Reference> for CreateCloudFrontOriginAccessIdentity.
 module Network.AWS.CloudFront.CreateCloudFrontOriginAccessIdentity
     (
-    -- * Request
-      CreateCloudFrontOriginAccessIdentity
-    -- ** Request constructor
-    , createCloudFrontOriginAccessIdentity
-    -- ** Request lenses
+    -- * Creating a Request
+      createCloudFrontOriginAccessIdentity
+    , CreateCloudFrontOriginAccessIdentity
+    -- * Request Lenses
     , ccfoaiCloudFrontOriginAccessIdentityConfig
 
-    -- * Response
-    , CreateCloudFrontOriginAccessIdentityResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createCloudFrontOriginAccessIdentityResponse
-    -- ** Response lenses
-    , ccfoairCloudFrontOriginAccessIdentity
-    , ccfoairETag
-    , ccfoairLocation
+    , CreateCloudFrontOriginAccessIdentityResponse
+    -- * Response Lenses
+    , ccfoairsETag
+    , ccfoairsLocation
+    , ccfoairsCloudFrontOriginAccessIdentity
+    , ccfoairsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype CreateCloudFrontOriginAccessIdentity = CreateCloudFrontOriginAccessIdentity
+-- | The request to create a new origin access identity.
+--
+-- /See:/ 'createCloudFrontOriginAccessIdentity' smart constructor.
+newtype CreateCloudFrontOriginAccessIdentity = CreateCloudFrontOriginAccessIdentity'
     { _ccfoaiCloudFrontOriginAccessIdentityConfig :: CloudFrontOriginAccessIdentityConfig
-    } deriving (Eq, Read, Show)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateCloudFrontOriginAccessIdentity' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateCloudFrontOriginAccessIdentity' with the minimum fields required to make a request.
 --
--- * 'ccfoaiCloudFrontOriginAccessIdentityConfig' @::@ 'CloudFrontOriginAccessIdentityConfig'
+-- Use one of the following lenses to modify other fields as desired:
 --
-createCloudFrontOriginAccessIdentity :: CloudFrontOriginAccessIdentityConfig -- ^ 'ccfoaiCloudFrontOriginAccessIdentityConfig'
-                                     -> CreateCloudFrontOriginAccessIdentity
-createCloudFrontOriginAccessIdentity p1 = CreateCloudFrontOriginAccessIdentity
-    { _ccfoaiCloudFrontOriginAccessIdentityConfig = p1
+-- * 'ccfoaiCloudFrontOriginAccessIdentityConfig'
+createCloudFrontOriginAccessIdentity
+    :: CloudFrontOriginAccessIdentityConfig -- ^ 'ccfoaiCloudFrontOriginAccessIdentityConfig'
+    -> CreateCloudFrontOriginAccessIdentity
+createCloudFrontOriginAccessIdentity pCloudFrontOriginAccessIdentityConfig_ =
+    CreateCloudFrontOriginAccessIdentity'
+    { _ccfoaiCloudFrontOriginAccessIdentityConfig = pCloudFrontOriginAccessIdentityConfig_
     }
 
--- | The origin access identity's configuration information.
+-- | The origin access identity\'s configuration information.
 ccfoaiCloudFrontOriginAccessIdentityConfig :: Lens' CreateCloudFrontOriginAccessIdentity CloudFrontOriginAccessIdentityConfig
-ccfoaiCloudFrontOriginAccessIdentityConfig =
-    lens _ccfoaiCloudFrontOriginAccessIdentityConfig
-        (\s a -> s { _ccfoaiCloudFrontOriginAccessIdentityConfig = a })
+ccfoaiCloudFrontOriginAccessIdentityConfig = lens _ccfoaiCloudFrontOriginAccessIdentityConfig (\ s a -> s{_ccfoaiCloudFrontOriginAccessIdentityConfig = a});
 
-data CreateCloudFrontOriginAccessIdentityResponse = CreateCloudFrontOriginAccessIdentityResponse
-    { _ccfoairCloudFrontOriginAccessIdentity :: Maybe CloudFrontOriginAccessIdentity
-    , _ccfoairETag                           :: Maybe Text
-    , _ccfoairLocation                       :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSRequest
+         CreateCloudFrontOriginAccessIdentity where
+        type Sv CreateCloudFrontOriginAccessIdentity =
+             CloudFront
+        type Rs CreateCloudFrontOriginAccessIdentity =
+             CreateCloudFrontOriginAccessIdentityResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateCloudFrontOriginAccessIdentityResponse' <$>
+                   (h .#? "ETag") <*> (h .#? "Location") <*>
+                     (parseXML x)
+                     <*> (pure (fromEnum s)))
 
--- | 'CreateCloudFrontOriginAccessIdentityResponse' constructor.
+instance ToElement
+         CreateCloudFrontOriginAccessIdentity where
+        toElement
+          = mkElement
+              "{http://cloudfront.amazonaws.com/doc/2015-04-17/}CloudFrontOriginAccessIdentityConfig"
+              .
+              _ccfoaiCloudFrontOriginAccessIdentityConfig
+
+instance ToHeaders
+         CreateCloudFrontOriginAccessIdentity where
+        toHeaders = const mempty
+
+instance ToPath CreateCloudFrontOriginAccessIdentity
+         where
+        toPath
+          = const
+              "/2015-04-17/origin-access-identity/cloudfront"
+
+instance ToQuery CreateCloudFrontOriginAccessIdentity
+         where
+        toQuery = const mempty
+
+-- | The returned result of the corresponding request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createCloudFrontOriginAccessIdentityResponse' smart constructor.
+data CreateCloudFrontOriginAccessIdentityResponse = CreateCloudFrontOriginAccessIdentityResponse'
+    { _ccfoairsETag                           :: !(Maybe Text)
+    , _ccfoairsLocation                       :: !(Maybe Text)
+    , _ccfoairsCloudFrontOriginAccessIdentity :: !(Maybe CloudFrontOriginAccessIdentity)
+    , _ccfoairsStatus                         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateCloudFrontOriginAccessIdentityResponse' with the minimum fields required to make a request.
 --
--- * 'ccfoairCloudFrontOriginAccessIdentity' @::@ 'Maybe' 'CloudFrontOriginAccessIdentity'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ccfoairETag' @::@ 'Maybe' 'Text'
+-- * 'ccfoairsETag'
 --
--- * 'ccfoairLocation' @::@ 'Maybe' 'Text'
+-- * 'ccfoairsLocation'
 --
-createCloudFrontOriginAccessIdentityResponse :: CreateCloudFrontOriginAccessIdentityResponse
-createCloudFrontOriginAccessIdentityResponse = CreateCloudFrontOriginAccessIdentityResponse
-    { _ccfoairCloudFrontOriginAccessIdentity = Nothing
-    , _ccfoairLocation                       = Nothing
-    , _ccfoairETag                           = Nothing
+-- * 'ccfoairsCloudFrontOriginAccessIdentity'
+--
+-- * 'ccfoairsStatus'
+createCloudFrontOriginAccessIdentityResponse
+    :: Int -- ^ 'ccfoairsStatus'
+    -> CreateCloudFrontOriginAccessIdentityResponse
+createCloudFrontOriginAccessIdentityResponse pStatus_ =
+    CreateCloudFrontOriginAccessIdentityResponse'
+    { _ccfoairsETag = Nothing
+    , _ccfoairsLocation = Nothing
+    , _ccfoairsCloudFrontOriginAccessIdentity = Nothing
+    , _ccfoairsStatus = pStatus_
     }
 
--- | The origin access identity's information.
-ccfoairCloudFrontOriginAccessIdentity :: Lens' CreateCloudFrontOriginAccessIdentityResponse (Maybe CloudFrontOriginAccessIdentity)
-ccfoairCloudFrontOriginAccessIdentity =
-    lens _ccfoairCloudFrontOriginAccessIdentity
-        (\s a -> s { _ccfoairCloudFrontOriginAccessIdentity = a })
-
 -- | The current version of the origin access identity created.
-ccfoairETag :: Lens' CreateCloudFrontOriginAccessIdentityResponse (Maybe Text)
-ccfoairETag = lens _ccfoairETag (\s a -> s { _ccfoairETag = a })
-
--- | The fully qualified URI of the new origin access identity just created. For
--- example:
--- https://cloudfront.amazonaws.com/2010-11-01/origin-access-identity/cloudfront/E74FTE3AJFJ256A.
-ccfoairLocation :: Lens' CreateCloudFrontOriginAccessIdentityResponse (Maybe Text)
-ccfoairLocation = lens _ccfoairLocation (\s a -> s { _ccfoairLocation = a })
-
-instance ToPath CreateCloudFrontOriginAccessIdentity where
-    toPath = const "/2014-11-06/origin-access-identity/cloudfront"
-
-instance ToQuery CreateCloudFrontOriginAccessIdentity where
-    toQuery = const mempty
-
-instance ToHeaders CreateCloudFrontOriginAccessIdentity
-
-instance ToXMLRoot CreateCloudFrontOriginAccessIdentity where
-    toXMLRoot CreateCloudFrontOriginAccessIdentity{..} = namespaced ns "CreateCloudFrontOriginAccessIdentity"
-        [ "CloudFrontOriginAccessIdentityConfig" =@ _ccfoaiCloudFrontOriginAccessIdentityConfig
-        ]
+ccfoairsETag :: Lens' CreateCloudFrontOriginAccessIdentityResponse (Maybe Text)
+ccfoairsETag = lens _ccfoairsETag (\ s a -> s{_ccfoairsETag = a});
 
-instance ToXML CreateCloudFrontOriginAccessIdentity
+-- | The fully qualified URI of the new origin access identity just created.
+-- For example:
+-- https:\/\/cloudfront.amazonaws.com\/2010-11-01\/origin-access-identity\/cloudfront\/E74FTE3AJFJ256A.
+ccfoairsLocation :: Lens' CreateCloudFrontOriginAccessIdentityResponse (Maybe Text)
+ccfoairsLocation = lens _ccfoairsLocation (\ s a -> s{_ccfoairsLocation = a});
 
-instance AWSRequest CreateCloudFrontOriginAccessIdentity where
-    type Sv CreateCloudFrontOriginAccessIdentity = CloudFront
-    type Rs CreateCloudFrontOriginAccessIdentity = CreateCloudFrontOriginAccessIdentityResponse
+-- | The origin access identity\'s information.
+ccfoairsCloudFrontOriginAccessIdentity :: Lens' CreateCloudFrontOriginAccessIdentityResponse (Maybe CloudFrontOriginAccessIdentity)
+ccfoairsCloudFrontOriginAccessIdentity = lens _ccfoairsCloudFrontOriginAccessIdentity (\ s a -> s{_ccfoairsCloudFrontOriginAccessIdentity = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CreateCloudFrontOriginAccessIdentityResponse
-        <$> x .@? "CloudFrontOriginAccessIdentity"
-        <*> h ~:? "ETag"
-        <*> h ~:? "Location"
+-- | The response status code.
+ccfoairsStatus :: Lens' CreateCloudFrontOriginAccessIdentityResponse Int
+ccfoairsStatus = lens _ccfoairsStatus (\ s a -> s{_ccfoairsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/CreateDistribution.hs b/gen/Network/AWS/CloudFront/CreateDistribution.hs
--- a/gen/Network/AWS/CloudFront/CreateDistribution.hs
+++ b/gen/Network/AWS/CloudFront/CreateDistribution.hs
@@ -1,133 +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.CloudFront.CreateDistribution
--- 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.
-
--- | Create a new distribution.
+-- Create a new distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateDistribution.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateDistribution.html AWS API Reference> for CreateDistribution.
 module Network.AWS.CloudFront.CreateDistribution
     (
-    -- * Request
-      CreateDistribution
-    -- ** Request constructor
-    , createDistribution
-    -- ** Request lenses
+    -- * Creating a Request
+      createDistribution
+    , CreateDistribution
+    -- * Request Lenses
     , cdDistributionConfig
 
-    -- * Response
-    , CreateDistributionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createDistributionResponse
-    -- ** Response lenses
-    , cdrDistribution
-    , cdrETag
-    , cdrLocation
+    , CreateDistributionResponse
+    -- * Response Lenses
+    , cdrsETag
+    , cdrsDistribution
+    , cdrsLocation
+    , cdrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype CreateDistribution = CreateDistribution
+-- | The request to create a new distribution.
+--
+-- /See:/ 'createDistribution' smart constructor.
+newtype CreateDistribution = CreateDistribution'
     { _cdDistributionConfig :: DistributionConfig
-    } deriving (Eq, Read, Show)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateDistribution' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateDistribution' with the minimum fields required to make a request.
 --
--- * 'cdDistributionConfig' @::@ 'DistributionConfig'
+-- Use one of the following lenses to modify other fields as desired:
 --
-createDistribution :: DistributionConfig -- ^ 'cdDistributionConfig'
-                   -> CreateDistribution
-createDistribution p1 = CreateDistribution
-    { _cdDistributionConfig = p1
+-- * 'cdDistributionConfig'
+createDistribution
+    :: DistributionConfig -- ^ 'cdDistributionConfig'
+    -> CreateDistribution
+createDistribution pDistributionConfig_ =
+    CreateDistribution'
+    { _cdDistributionConfig = pDistributionConfig_
     }
 
--- | The distribution's configuration information.
+-- | The distribution\'s configuration information.
 cdDistributionConfig :: Lens' CreateDistribution DistributionConfig
-cdDistributionConfig =
-    lens _cdDistributionConfig (\s a -> s { _cdDistributionConfig = a })
+cdDistributionConfig = lens _cdDistributionConfig (\ s a -> s{_cdDistributionConfig = a});
 
-data CreateDistributionResponse = CreateDistributionResponse
-    { _cdrDistribution :: Maybe Distribution
-    , _cdrETag         :: Maybe Text
-    , _cdrLocation     :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSRequest CreateDistribution where
+        type Sv CreateDistribution = CloudFront
+        type Rs CreateDistribution =
+             CreateDistributionResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateDistributionResponse' <$>
+                   (h .#? "ETag") <*> (parseXML x) <*>
+                     (h .#? "Location")
+                     <*> (pure (fromEnum s)))
 
--- | 'CreateDistributionResponse' constructor.
+instance ToElement CreateDistribution where
+        toElement
+          = mkElement
+              "{http://cloudfront.amazonaws.com/doc/2015-04-17/}DistributionConfig"
+              .
+              _cdDistributionConfig
+
+instance ToHeaders CreateDistribution where
+        toHeaders = const mempty
+
+instance ToPath CreateDistribution where
+        toPath = const "/2015-04-17/distribution"
+
+instance ToQuery CreateDistribution where
+        toQuery = const mempty
+
+-- | The returned result of the corresponding request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createDistributionResponse' smart constructor.
+data CreateDistributionResponse = CreateDistributionResponse'
+    { _cdrsETag         :: !(Maybe Text)
+    , _cdrsDistribution :: !(Maybe Distribution)
+    , _cdrsLocation     :: !(Maybe Text)
+    , _cdrsStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateDistributionResponse' with the minimum fields required to make a request.
 --
--- * 'cdrDistribution' @::@ 'Maybe' 'Distribution'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'cdrETag' @::@ 'Maybe' 'Text'
+-- * 'cdrsETag'
 --
--- * 'cdrLocation' @::@ 'Maybe' 'Text'
+-- * 'cdrsDistribution'
 --
-createDistributionResponse :: CreateDistributionResponse
-createDistributionResponse = CreateDistributionResponse
-    { _cdrDistribution = Nothing
-    , _cdrLocation     = Nothing
-    , _cdrETag         = Nothing
+-- * 'cdrsLocation'
+--
+-- * 'cdrsStatus'
+createDistributionResponse
+    :: Int -- ^ 'cdrsStatus'
+    -> CreateDistributionResponse
+createDistributionResponse pStatus_ =
+    CreateDistributionResponse'
+    { _cdrsETag = Nothing
+    , _cdrsDistribution = Nothing
+    , _cdrsLocation = Nothing
+    , _cdrsStatus = pStatus_
     }
 
--- | The distribution's information.
-cdrDistribution :: Lens' CreateDistributionResponse (Maybe Distribution)
-cdrDistribution = lens _cdrDistribution (\s a -> s { _cdrDistribution = a })
-
 -- | The current version of the distribution created.
-cdrETag :: Lens' CreateDistributionResponse (Maybe Text)
-cdrETag = lens _cdrETag (\s a -> s { _cdrETag = a })
-
--- | The fully qualified URI of the new distribution resource just created. For
--- example:
--- https://cloudfront.amazonaws.com/2010-11-01/distribution/EDFDVBD632BHDS5.
-cdrLocation :: Lens' CreateDistributionResponse (Maybe Text)
-cdrLocation = lens _cdrLocation (\s a -> s { _cdrLocation = a })
-
-instance ToPath CreateDistribution where
-    toPath = const "/2014-11-06/distribution"
-
-instance ToQuery CreateDistribution where
-    toQuery = const mempty
-
-instance ToHeaders CreateDistribution
-
-instance ToXMLRoot CreateDistribution where
-    toXMLRoot CreateDistribution{..} = namespaced ns "CreateDistribution"
-        [ "DistributionConfig" =@ _cdDistributionConfig
-        ]
+cdrsETag :: Lens' CreateDistributionResponse (Maybe Text)
+cdrsETag = lens _cdrsETag (\ s a -> s{_cdrsETag = a});
 
-instance ToXML CreateDistribution
+-- | The distribution\'s information.
+cdrsDistribution :: Lens' CreateDistributionResponse (Maybe Distribution)
+cdrsDistribution = lens _cdrsDistribution (\ s a -> s{_cdrsDistribution = a});
 
-instance AWSRequest CreateDistribution where
-    type Sv CreateDistribution = CloudFront
-    type Rs CreateDistribution = CreateDistributionResponse
+-- | The fully qualified URI of the new distribution resource just created.
+-- For example:
+-- https:\/\/cloudfront.amazonaws.com\/2010-11-01\/distribution\/EDFDVBD632BHDS5.
+cdrsLocation :: Lens' CreateDistributionResponse (Maybe Text)
+cdrsLocation = lens _cdrsLocation (\ s a -> s{_cdrsLocation = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CreateDistributionResponse
-        <$> x .@? "Distribution"
-        <*> h ~:? "ETag"
-        <*> h ~:? "Location"
+-- | The response status code.
+cdrsStatus :: Lens' CreateDistributionResponse Int
+cdrsStatus = lens _cdrsStatus (\ s a -> s{_cdrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/CreateInvalidation.hs b/gen/Network/AWS/CloudFront/CreateInvalidation.hs
--- a/gen/Network/AWS/CloudFront/CreateInvalidation.hs
+++ b/gen/Network/AWS/CloudFront/CreateInvalidation.hs
@@ -1,136 +1,151 @@
-{-# 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.CloudFront.CreateInvalidation
--- 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.
-
--- | Create a new invalidation.
+-- Create a new invalidation.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateInvalidation.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateInvalidation.html AWS API Reference> for CreateInvalidation.
 module Network.AWS.CloudFront.CreateInvalidation
     (
-    -- * Request
-      CreateInvalidation
-    -- ** Request constructor
-    , createInvalidation
-    -- ** Request lenses
+    -- * Creating a Request
+      createInvalidation
+    , CreateInvalidation
+    -- * Request Lenses
     , ciDistributionId
     , ciInvalidationBatch
 
-    -- * Response
-    , CreateInvalidationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createInvalidationResponse
-    -- ** Response lenses
-    , cirInvalidation
-    , cirLocation
+    , CreateInvalidationResponse
+    -- * Response Lenses
+    , cirsInvalidation
+    , cirsLocation
+    , cirsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data CreateInvalidation = CreateInvalidation
-    { _ciDistributionId    :: Text
-    , _ciInvalidationBatch :: InvalidationBatch
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'CreateInvalidation' constructor.
+-- | The request to create an invalidation.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createInvalidation' smart constructor.
+data CreateInvalidation = CreateInvalidation'
+    { _ciDistributionId    :: !Text
+    , _ciInvalidationBatch :: !InvalidationBatch
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateInvalidation' with the minimum fields required to make a request.
 --
--- * 'ciDistributionId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ciInvalidationBatch' @::@ 'InvalidationBatch'
+-- * 'ciDistributionId'
 --
-createInvalidation :: Text -- ^ 'ciDistributionId'
-                   -> InvalidationBatch -- ^ 'ciInvalidationBatch'
-                   -> CreateInvalidation
-createInvalidation p1 p2 = CreateInvalidation
-    { _ciDistributionId    = p1
-    , _ciInvalidationBatch = p2
+-- * 'ciInvalidationBatch'
+createInvalidation
+    :: Text -- ^ 'ciDistributionId'
+    -> InvalidationBatch -- ^ 'ciInvalidationBatch'
+    -> CreateInvalidation
+createInvalidation pDistributionId_ pInvalidationBatch_ =
+    CreateInvalidation'
+    { _ciDistributionId = pDistributionId_
+    , _ciInvalidationBatch = pInvalidationBatch_
     }
 
--- | The distribution's id.
+-- | The distribution\'s id.
 ciDistributionId :: Lens' CreateInvalidation Text
-ciDistributionId = lens _ciDistributionId (\s a -> s { _ciDistributionId = a })
+ciDistributionId = lens _ciDistributionId (\ s a -> s{_ciDistributionId = a});
 
 -- | The batch information for the invalidation.
 ciInvalidationBatch :: Lens' CreateInvalidation InvalidationBatch
-ciInvalidationBatch =
-    lens _ciInvalidationBatch (\s a -> s { _ciInvalidationBatch = a })
-
-data CreateInvalidationResponse = CreateInvalidationResponse
-    { _cirInvalidation :: Maybe Invalidation
-    , _cirLocation     :: Maybe Text
-    } deriving (Eq, Read, Show)
+ciInvalidationBatch = lens _ciInvalidationBatch (\ s a -> s{_ciInvalidationBatch = a});
 
--- | 'CreateInvalidationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cirInvalidation' @::@ 'Maybe' 'Invalidation'
---
--- * 'cirLocation' @::@ 'Maybe' 'Text'
---
-createInvalidationResponse :: CreateInvalidationResponse
-createInvalidationResponse = CreateInvalidationResponse
-    { _cirLocation     = Nothing
-    , _cirInvalidation = Nothing
-    }
+instance AWSRequest CreateInvalidation where
+        type Sv CreateInvalidation = CloudFront
+        type Rs CreateInvalidation =
+             CreateInvalidationResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateInvalidationResponse' <$>
+                   (parseXML x) <*> (h .#? "Location") <*>
+                     (pure (fromEnum s)))
 
--- | The invalidation's information.
-cirInvalidation :: Lens' CreateInvalidationResponse (Maybe Invalidation)
-cirInvalidation = lens _cirInvalidation (\s a -> s { _cirInvalidation = a })
+instance ToElement CreateInvalidation where
+        toElement
+          = mkElement
+              "{http://cloudfront.amazonaws.com/doc/2015-04-17/}InvalidationBatch"
+              .
+              _ciInvalidationBatch
 
--- | The fully qualified URI of the distribution and invalidation batch request,
--- including the Invalidation ID.
-cirLocation :: Lens' CreateInvalidationResponse (Maybe Text)
-cirLocation = lens _cirLocation (\s a -> s { _cirLocation = a })
+instance ToHeaders CreateInvalidation where
+        toHeaders = const mempty
 
 instance ToPath CreateInvalidation where
-    toPath CreateInvalidation{..} = mconcat
-        [ "/2014-11-06/distribution/"
-        , toText _ciDistributionId
-        , "/invalidation"
-        ]
+        toPath CreateInvalidation'{..}
+          = mconcat
+              ["/2015-04-17/distribution/", toBS _ciDistributionId,
+               "/invalidation"]
 
 instance ToQuery CreateInvalidation where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders CreateInvalidation
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'createInvalidationResponse' smart constructor.
+data CreateInvalidationResponse = CreateInvalidationResponse'
+    { _cirsInvalidation :: !(Maybe Invalidation)
+    , _cirsLocation     :: !(Maybe Text)
+    , _cirsStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot CreateInvalidation where
-    toXMLRoot CreateInvalidation{..} = namespaced ns "CreateInvalidation"
-        [ "InvalidationBatch" =@ _ciInvalidationBatch
-        ]
+-- | Creates a value of 'CreateInvalidationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cirsInvalidation'
+--
+-- * 'cirsLocation'
+--
+-- * 'cirsStatus'
+createInvalidationResponse
+    :: Int -- ^ 'cirsStatus'
+    -> CreateInvalidationResponse
+createInvalidationResponse pStatus_ =
+    CreateInvalidationResponse'
+    { _cirsInvalidation = Nothing
+    , _cirsLocation = Nothing
+    , _cirsStatus = pStatus_
+    }
 
-instance ToXML CreateInvalidation
+-- | The invalidation\'s information.
+cirsInvalidation :: Lens' CreateInvalidationResponse (Maybe Invalidation)
+cirsInvalidation = lens _cirsInvalidation (\ s a -> s{_cirsInvalidation = a});
 
-instance AWSRequest CreateInvalidation where
-    type Sv CreateInvalidation = CloudFront
-    type Rs CreateInvalidation = CreateInvalidationResponse
+-- | The fully qualified URI of the distribution and invalidation batch
+-- request, including the Invalidation ID.
+cirsLocation :: Lens' CreateInvalidationResponse (Maybe Text)
+cirsLocation = lens _cirsLocation (\ s a -> s{_cirsLocation = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CreateInvalidationResponse
-        <$> x .@? "Invalidation"
-        <*> h ~:? "Location"
+-- | The response status code.
+cirsStatus :: Lens' CreateInvalidationResponse Int
+cirsStatus = lens _cirsStatus (\ s a -> s{_cirsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/CreateStreamingDistribution.hs b/gen/Network/AWS/CloudFront/CreateStreamingDistribution.hs
--- a/gen/Network/AWS/CloudFront/CreateStreamingDistribution.hs
+++ b/gen/Network/AWS/CloudFront/CreateStreamingDistribution.hs
@@ -1,136 +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.CloudFront.CreateStreamingDistribution
--- 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.
-
--- | Create a new streaming distribution.
+-- Create a new streaming distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateStreamingDistribution.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/CreateStreamingDistribution.html AWS API Reference> for CreateStreamingDistribution.
 module Network.AWS.CloudFront.CreateStreamingDistribution
     (
-    -- * Request
-      CreateStreamingDistribution
-    -- ** Request constructor
-    , createStreamingDistribution
-    -- ** Request lenses
+    -- * Creating a Request
+      createStreamingDistribution
+    , CreateStreamingDistribution
+    -- * Request Lenses
     , csdStreamingDistributionConfig
 
-    -- * Response
-    , CreateStreamingDistributionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , createStreamingDistributionResponse
-    -- ** Response lenses
-    , csdrETag
-    , csdrLocation
-    , csdrStreamingDistribution
+    , CreateStreamingDistributionResponse
+    -- * Response Lenses
+    , csdrsETag
+    , csdrsLocation
+    , csdrsStreamingDistribution
+    , csdrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype CreateStreamingDistribution = CreateStreamingDistribution
+-- | The request to create a new streaming distribution.
+--
+-- /See:/ 'createStreamingDistribution' smart constructor.
+newtype CreateStreamingDistribution = CreateStreamingDistribution'
     { _csdStreamingDistributionConfig :: StreamingDistributionConfig
-    } deriving (Eq, Read, Show)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'CreateStreamingDistribution' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'CreateStreamingDistribution' with the minimum fields required to make a request.
 --
--- * 'csdStreamingDistributionConfig' @::@ 'StreamingDistributionConfig'
+-- Use one of the following lenses to modify other fields as desired:
 --
-createStreamingDistribution :: StreamingDistributionConfig -- ^ 'csdStreamingDistributionConfig'
-                            -> CreateStreamingDistribution
-createStreamingDistribution p1 = CreateStreamingDistribution
-    { _csdStreamingDistributionConfig = p1
+-- * 'csdStreamingDistributionConfig'
+createStreamingDistribution
+    :: StreamingDistributionConfig -- ^ 'csdStreamingDistributionConfig'
+    -> CreateStreamingDistribution
+createStreamingDistribution pStreamingDistributionConfig_ =
+    CreateStreamingDistribution'
+    { _csdStreamingDistributionConfig = pStreamingDistributionConfig_
     }
 
--- | The streaming distribution's configuration information.
+-- | The streaming distribution\'s configuration information.
 csdStreamingDistributionConfig :: Lens' CreateStreamingDistribution StreamingDistributionConfig
-csdStreamingDistributionConfig =
-    lens _csdStreamingDistributionConfig
-        (\s a -> s { _csdStreamingDistributionConfig = a })
+csdStreamingDistributionConfig = lens _csdStreamingDistributionConfig (\ s a -> s{_csdStreamingDistributionConfig = a});
 
-data CreateStreamingDistributionResponse = CreateStreamingDistributionResponse
-    { _csdrETag                  :: Maybe Text
-    , _csdrLocation              :: Maybe Text
-    , _csdrStreamingDistribution :: Maybe StreamingDistribution
-    } deriving (Eq, Read, Show)
+instance AWSRequest CreateStreamingDistribution where
+        type Sv CreateStreamingDistribution = CloudFront
+        type Rs CreateStreamingDistribution =
+             CreateStreamingDistributionResponse
+        request = postXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 CreateStreamingDistributionResponse' <$>
+                   (h .#? "ETag") <*> (h .#? "Location") <*>
+                     (parseXML x)
+                     <*> (pure (fromEnum s)))
 
--- | 'CreateStreamingDistributionResponse' constructor.
+instance ToElement CreateStreamingDistribution where
+        toElement
+          = mkElement
+              "{http://cloudfront.amazonaws.com/doc/2015-04-17/}StreamingDistributionConfig"
+              .
+              _csdStreamingDistributionConfig
+
+instance ToHeaders CreateStreamingDistribution where
+        toHeaders = const mempty
+
+instance ToPath CreateStreamingDistribution where
+        toPath = const "/2015-04-17/streaming-distribution"
+
+instance ToQuery CreateStreamingDistribution where
+        toQuery = const mempty
+
+-- | The returned result of the corresponding request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'createStreamingDistributionResponse' smart constructor.
+data CreateStreamingDistributionResponse = CreateStreamingDistributionResponse'
+    { _csdrsETag                  :: !(Maybe Text)
+    , _csdrsLocation              :: !(Maybe Text)
+    , _csdrsStreamingDistribution :: !(Maybe StreamingDistribution)
+    , _csdrsStatus                :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateStreamingDistributionResponse' with the minimum fields required to make a request.
 --
--- * 'csdrETag' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'csdrLocation' @::@ 'Maybe' 'Text'
+-- * 'csdrsETag'
 --
--- * 'csdrStreamingDistribution' @::@ 'Maybe' 'StreamingDistribution'
+-- * 'csdrsLocation'
 --
-createStreamingDistributionResponse :: CreateStreamingDistributionResponse
-createStreamingDistributionResponse = CreateStreamingDistributionResponse
-    { _csdrStreamingDistribution = Nothing
-    , _csdrLocation              = Nothing
-    , _csdrETag                  = Nothing
+-- * 'csdrsStreamingDistribution'
+--
+-- * 'csdrsStatus'
+createStreamingDistributionResponse
+    :: Int -- ^ 'csdrsStatus'
+    -> CreateStreamingDistributionResponse
+createStreamingDistributionResponse pStatus_ =
+    CreateStreamingDistributionResponse'
+    { _csdrsETag = Nothing
+    , _csdrsLocation = Nothing
+    , _csdrsStreamingDistribution = Nothing
+    , _csdrsStatus = pStatus_
     }
 
 -- | The current version of the streaming distribution created.
-csdrETag :: Lens' CreateStreamingDistributionResponse (Maybe Text)
-csdrETag = lens _csdrETag (\s a -> s { _csdrETag = a })
+csdrsETag :: Lens' CreateStreamingDistributionResponse (Maybe Text)
+csdrsETag = lens _csdrsETag (\ s a -> s{_csdrsETag = a});
 
 -- | The fully qualified URI of the new streaming distribution resource just
 -- created. For example:
--- https://cloudfront.amazonaws.com/2010-11-01/streaming-distribution/EGTXBD79H29TRA8.
-csdrLocation :: Lens' CreateStreamingDistributionResponse (Maybe Text)
-csdrLocation = lens _csdrLocation (\s a -> s { _csdrLocation = a })
-
--- | The streaming distribution's information.
-csdrStreamingDistribution :: Lens' CreateStreamingDistributionResponse (Maybe StreamingDistribution)
-csdrStreamingDistribution =
-    lens _csdrStreamingDistribution
-        (\s a -> s { _csdrStreamingDistribution = a })
-
-instance ToPath CreateStreamingDistribution where
-    toPath = const "/2014-11-06/streaming-distribution"
-
-instance ToQuery CreateStreamingDistribution where
-    toQuery = const mempty
-
-instance ToHeaders CreateStreamingDistribution
-
-instance ToXMLRoot CreateStreamingDistribution where
-    toXMLRoot CreateStreamingDistribution{..} = namespaced ns "CreateStreamingDistribution"
-        [ "StreamingDistributionConfig" =@ _csdStreamingDistributionConfig
-        ]
-
-instance ToXML CreateStreamingDistribution
+-- https:\/\/cloudfront.amazonaws.com\/2010-11-01\/streaming-distribution\/EGTXBD79H29TRA8.
+csdrsLocation :: Lens' CreateStreamingDistributionResponse (Maybe Text)
+csdrsLocation = lens _csdrsLocation (\ s a -> s{_csdrsLocation = a});
 
-instance AWSRequest CreateStreamingDistribution where
-    type Sv CreateStreamingDistribution = CloudFront
-    type Rs CreateStreamingDistribution = CreateStreamingDistributionResponse
+-- | The streaming distribution\'s information.
+csdrsStreamingDistribution :: Lens' CreateStreamingDistributionResponse (Maybe StreamingDistribution)
+csdrsStreamingDistribution = lens _csdrsStreamingDistribution (\ s a -> s{_csdrsStreamingDistribution = a});
 
-    request  = post
-    response = xmlHeaderResponse $ \h x -> CreateStreamingDistributionResponse
-        <$> h ~:? "ETag"
-        <*> h ~:? "Location"
-        <*> x .@? "StreamingDistribution"
+-- | The response status code.
+csdrsStatus :: Lens' CreateStreamingDistributionResponse Int
+csdrsStatus = lens _csdrsStatus (\ s a -> s{_csdrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/DeleteCloudFrontOriginAccessIdentity.hs b/gen/Network/AWS/CloudFront/DeleteCloudFrontOriginAccessIdentity.hs
--- a/gen/Network/AWS/CloudFront/DeleteCloudFrontOriginAccessIdentity.hs
+++ b/gen/Network/AWS/CloudFront/DeleteCloudFrontOriginAccessIdentity.hs
@@ -1,109 +1,114 @@
-{-# 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.CloudFront.DeleteCloudFrontOriginAccessIdentity
--- 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.
-
--- | Delete an origin access identity.
+-- Delete an origin access identity.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DeleteCloudFrontOriginAccessIdentity.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DeleteCloudFrontOriginAccessIdentity.html AWS API Reference> for DeleteCloudFrontOriginAccessIdentity.
 module Network.AWS.CloudFront.DeleteCloudFrontOriginAccessIdentity
     (
-    -- * Request
-      DeleteCloudFrontOriginAccessIdentity
-    -- ** Request constructor
-    , deleteCloudFrontOriginAccessIdentity
-    -- ** Request lenses
-    , dcfoaiId
+    -- * Creating a Request
+      deleteCloudFrontOriginAccessIdentity
+    , DeleteCloudFrontOriginAccessIdentity
+    -- * Request Lenses
     , dcfoaiIfMatch
+    , dcfoaiId
 
-    -- * Response
-    , DeleteCloudFrontOriginAccessIdentityResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteCloudFrontOriginAccessIdentityResponse
+    , DeleteCloudFrontOriginAccessIdentityResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data DeleteCloudFrontOriginAccessIdentity = DeleteCloudFrontOriginAccessIdentity
-    { _dcfoaiId      :: Text
-    , _dcfoaiIfMatch :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DeleteCloudFrontOriginAccessIdentity' constructor.
+-- | The request to delete a origin access identity.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteCloudFrontOriginAccessIdentity' smart constructor.
+data DeleteCloudFrontOriginAccessIdentity = DeleteCloudFrontOriginAccessIdentity'
+    { _dcfoaiIfMatch :: !(Maybe Text)
+    , _dcfoaiId      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteCloudFrontOriginAccessIdentity' with the minimum fields required to make a request.
 --
--- * 'dcfoaiId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dcfoaiIfMatch' @::@ 'Maybe' 'Text'
+-- * 'dcfoaiIfMatch'
 --
-deleteCloudFrontOriginAccessIdentity :: Text -- ^ 'dcfoaiId'
-                                     -> DeleteCloudFrontOriginAccessIdentity
-deleteCloudFrontOriginAccessIdentity p1 = DeleteCloudFrontOriginAccessIdentity
-    { _dcfoaiId      = p1
-    , _dcfoaiIfMatch = Nothing
+-- * 'dcfoaiId'
+deleteCloudFrontOriginAccessIdentity
+    :: Text -- ^ 'dcfoaiId'
+    -> DeleteCloudFrontOriginAccessIdentity
+deleteCloudFrontOriginAccessIdentity pId_ =
+    DeleteCloudFrontOriginAccessIdentity'
+    { _dcfoaiIfMatch = Nothing
+    , _dcfoaiId = pId_
     }
 
--- | The origin access identity's id.
-dcfoaiId :: Lens' DeleteCloudFrontOriginAccessIdentity Text
-dcfoaiId = lens _dcfoaiId (\s a -> s { _dcfoaiId = a })
-
--- | The value of the ETag header you received from a previous GET or PUT request.
--- For example: E2QWRUHAPOMQZL.
+-- | The value of the ETag header you received from a previous GET or PUT
+-- request. For example: E2QWRUHAPOMQZL.
 dcfoaiIfMatch :: Lens' DeleteCloudFrontOriginAccessIdentity (Maybe Text)
-dcfoaiIfMatch = lens _dcfoaiIfMatch (\s a -> s { _dcfoaiIfMatch = a })
-
-data DeleteCloudFrontOriginAccessIdentityResponse = DeleteCloudFrontOriginAccessIdentityResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'DeleteCloudFrontOriginAccessIdentityResponse' constructor.
-deleteCloudFrontOriginAccessIdentityResponse :: DeleteCloudFrontOriginAccessIdentityResponse
-deleteCloudFrontOriginAccessIdentityResponse = DeleteCloudFrontOriginAccessIdentityResponse
+dcfoaiIfMatch = lens _dcfoaiIfMatch (\ s a -> s{_dcfoaiIfMatch = a});
 
-instance ToPath DeleteCloudFrontOriginAccessIdentity where
-    toPath DeleteCloudFrontOriginAccessIdentity{..} = mconcat
-        [ "/2014-11-06/origin-access-identity/cloudfront/"
-        , toText _dcfoaiId
-        ]
+-- | The origin access identity\'s id.
+dcfoaiId :: Lens' DeleteCloudFrontOriginAccessIdentity Text
+dcfoaiId = lens _dcfoaiId (\ s a -> s{_dcfoaiId = a});
 
-instance ToQuery DeleteCloudFrontOriginAccessIdentity where
-    toQuery = const mempty
+instance AWSRequest
+         DeleteCloudFrontOriginAccessIdentity where
+        type Sv DeleteCloudFrontOriginAccessIdentity =
+             CloudFront
+        type Rs DeleteCloudFrontOriginAccessIdentity =
+             DeleteCloudFrontOriginAccessIdentityResponse
+        request = delete
+        response
+          = receiveNull
+              DeleteCloudFrontOriginAccessIdentityResponse'
 
-instance ToHeaders DeleteCloudFrontOriginAccessIdentity where
-    toHeaders DeleteCloudFrontOriginAccessIdentity{..} = mconcat
-        [ "If-Match" =: _dcfoaiIfMatch
-        ]
+instance ToHeaders
+         DeleteCloudFrontOriginAccessIdentity where
+        toHeaders DeleteCloudFrontOriginAccessIdentity'{..}
+          = mconcat ["If-Match" =# _dcfoaiIfMatch]
 
-instance ToXMLRoot DeleteCloudFrontOriginAccessIdentity where
-    toXMLRoot = const (namespaced ns "DeleteCloudFrontOriginAccessIdentity" [])
+instance ToPath DeleteCloudFrontOriginAccessIdentity
+         where
+        toPath DeleteCloudFrontOriginAccessIdentity'{..}
+          = mconcat
+              ["/2015-04-17/origin-access-identity/cloudfront/",
+               toBS _dcfoaiId]
 
-instance ToXML DeleteCloudFrontOriginAccessIdentity
+instance ToQuery DeleteCloudFrontOriginAccessIdentity
+         where
+        toQuery = const mempty
 
-instance AWSRequest DeleteCloudFrontOriginAccessIdentity where
-    type Sv DeleteCloudFrontOriginAccessIdentity = CloudFront
-    type Rs DeleteCloudFrontOriginAccessIdentity = DeleteCloudFrontOriginAccessIdentityResponse
+-- | /See:/ 'deleteCloudFrontOriginAccessIdentityResponse' smart constructor.
+data DeleteCloudFrontOriginAccessIdentityResponse =
+    DeleteCloudFrontOriginAccessIdentityResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteCloudFrontOriginAccessIdentityResponse
+-- | Creates a value of 'DeleteCloudFrontOriginAccessIdentityResponse' with the minimum fields required to make a request.
+--
+deleteCloudFrontOriginAccessIdentityResponse
+    :: DeleteCloudFrontOriginAccessIdentityResponse
+deleteCloudFrontOriginAccessIdentityResponse =
+    DeleteCloudFrontOriginAccessIdentityResponse'
diff --git a/gen/Network/AWS/CloudFront/DeleteDistribution.hs b/gen/Network/AWS/CloudFront/DeleteDistribution.hs
--- a/gen/Network/AWS/CloudFront/DeleteDistribution.hs
+++ b/gen/Network/AWS/CloudFront/DeleteDistribution.hs
@@ -1,109 +1,104 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudFront.DeleteDistribution
--- 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.
-
--- | Delete a distribution.
+-- Delete a distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DeleteDistribution.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DeleteDistribution.html AWS API Reference> for DeleteDistribution.
 module Network.AWS.CloudFront.DeleteDistribution
     (
-    -- * Request
-      DeleteDistribution
-    -- ** Request constructor
-    , deleteDistribution
-    -- ** Request lenses
-    , ddId
+    -- * Creating a Request
+      deleteDistribution
+    , DeleteDistribution
+    -- * Request Lenses
     , ddIfMatch
+    , ddId
 
-    -- * Response
-    , DeleteDistributionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteDistributionResponse
+    , DeleteDistributionResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data DeleteDistribution = DeleteDistribution
-    { _ddId      :: Text
-    , _ddIfMatch :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DeleteDistribution' constructor.
+-- | The request to delete a distribution.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteDistribution' smart constructor.
+data DeleteDistribution = DeleteDistribution'
+    { _ddIfMatch :: !(Maybe Text)
+    , _ddId      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteDistribution' with the minimum fields required to make a request.
 --
--- * 'ddId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ddIfMatch' @::@ 'Maybe' 'Text'
+-- * 'ddIfMatch'
 --
-deleteDistribution :: Text -- ^ 'ddId'
-                   -> DeleteDistribution
-deleteDistribution p1 = DeleteDistribution
-    { _ddId      = p1
-    , _ddIfMatch = Nothing
+-- * 'ddId'
+deleteDistribution
+    :: Text -- ^ 'ddId'
+    -> DeleteDistribution
+deleteDistribution pId_ =
+    DeleteDistribution'
+    { _ddIfMatch = Nothing
+    , _ddId = pId_
     }
 
+-- | The value of the ETag header you received when you disabled the
+-- distribution. For example: E2QWRUHAPOMQZL.
+ddIfMatch :: Lens' DeleteDistribution (Maybe Text)
+ddIfMatch = lens _ddIfMatch (\ s a -> s{_ddIfMatch = a});
+
 -- | The distribution id.
 ddId :: Lens' DeleteDistribution Text
-ddId = lens _ddId (\s a -> s { _ddId = a })
-
--- | The value of the ETag header you received when you disabled the distribution.
--- For example: E2QWRUHAPOMQZL.
-ddIfMatch :: Lens' DeleteDistribution (Maybe Text)
-ddIfMatch = lens _ddIfMatch (\s a -> s { _ddIfMatch = a })
+ddId = lens _ddId (\ s a -> s{_ddId = a});
 
-data DeleteDistributionResponse = DeleteDistributionResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteDistribution where
+        type Sv DeleteDistribution = CloudFront
+        type Rs DeleteDistribution =
+             DeleteDistributionResponse
+        request = delete
+        response = receiveNull DeleteDistributionResponse'
 
--- | 'DeleteDistributionResponse' constructor.
-deleteDistributionResponse :: DeleteDistributionResponse
-deleteDistributionResponse = DeleteDistributionResponse
+instance ToHeaders DeleteDistribution where
+        toHeaders DeleteDistribution'{..}
+          = mconcat ["If-Match" =# _ddIfMatch]
 
 instance ToPath DeleteDistribution where
-    toPath DeleteDistribution{..} = mconcat
-        [ "/2014-11-06/distribution/"
-        , toText _ddId
-        ]
+        toPath DeleteDistribution'{..}
+          = mconcat ["/2015-04-17/distribution/", toBS _ddId]
 
 instance ToQuery DeleteDistribution where
-    toQuery = const mempty
-
-instance ToHeaders DeleteDistribution where
-    toHeaders DeleteDistribution{..} = mconcat
-        [ "If-Match" =: _ddIfMatch
-        ]
-
-instance ToXMLRoot DeleteDistribution where
-    toXMLRoot = const (namespaced ns "DeleteDistribution" [])
-
-instance ToXML DeleteDistribution
+        toQuery = const mempty
 
-instance AWSRequest DeleteDistribution where
-    type Sv DeleteDistribution = CloudFront
-    type Rs DeleteDistribution = DeleteDistributionResponse
+-- | /See:/ 'deleteDistributionResponse' smart constructor.
+data DeleteDistributionResponse =
+    DeleteDistributionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteDistributionResponse
+-- | Creates a value of 'DeleteDistributionResponse' with the minimum fields required to make a request.
+--
+deleteDistributionResponse
+    :: DeleteDistributionResponse
+deleteDistributionResponse = DeleteDistributionResponse'
diff --git a/gen/Network/AWS/CloudFront/DeleteStreamingDistribution.hs b/gen/Network/AWS/CloudFront/DeleteStreamingDistribution.hs
--- a/gen/Network/AWS/CloudFront/DeleteStreamingDistribution.hs
+++ b/gen/Network/AWS/CloudFront/DeleteStreamingDistribution.hs
@@ -1,109 +1,106 @@
-{-# 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.CloudFront.DeleteStreamingDistribution
--- 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.
-
--- | Delete a streaming distribution.
+-- Delete a streaming distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DeleteStreamingDistribution.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DeleteStreamingDistribution.html AWS API Reference> for DeleteStreamingDistribution.
 module Network.AWS.CloudFront.DeleteStreamingDistribution
     (
-    -- * Request
-      DeleteStreamingDistribution
-    -- ** Request constructor
-    , deleteStreamingDistribution
-    -- ** Request lenses
-    , dsdId
+    -- * Creating a Request
+      deleteStreamingDistribution
+    , DeleteStreamingDistribution
+    -- * Request Lenses
     , dsdIfMatch
+    , dsdId
 
-    -- * Response
-    , DeleteStreamingDistributionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , deleteStreamingDistributionResponse
+    , DeleteStreamingDistributionResponse
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data DeleteStreamingDistribution = DeleteStreamingDistribution
-    { _dsdId      :: Text
-    , _dsdIfMatch :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'DeleteStreamingDistribution' constructor.
+-- | The request to delete a streaming distribution.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'deleteStreamingDistribution' smart constructor.
+data DeleteStreamingDistribution = DeleteStreamingDistribution'
+    { _dsdIfMatch :: !(Maybe Text)
+    , _dsdId      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteStreamingDistribution' with the minimum fields required to make a request.
 --
--- * 'dsdId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'dsdIfMatch' @::@ 'Maybe' 'Text'
+-- * 'dsdIfMatch'
 --
-deleteStreamingDistribution :: Text -- ^ 'dsdId'
-                            -> DeleteStreamingDistribution
-deleteStreamingDistribution p1 = DeleteStreamingDistribution
-    { _dsdId      = p1
-    , _dsdIfMatch = Nothing
+-- * 'dsdId'
+deleteStreamingDistribution
+    :: Text -- ^ 'dsdId'
+    -> DeleteStreamingDistribution
+deleteStreamingDistribution pId_ =
+    DeleteStreamingDistribution'
+    { _dsdIfMatch = Nothing
+    , _dsdId = pId_
     }
 
+-- | The value of the ETag header you received when you disabled the
+-- streaming distribution. For example: E2QWRUHAPOMQZL.
+dsdIfMatch :: Lens' DeleteStreamingDistribution (Maybe Text)
+dsdIfMatch = lens _dsdIfMatch (\ s a -> s{_dsdIfMatch = a});
+
 -- | The distribution id.
 dsdId :: Lens' DeleteStreamingDistribution Text
-dsdId = lens _dsdId (\s a -> s { _dsdId = a })
-
--- | The value of the ETag header you received when you disabled the streaming
--- distribution. For example: E2QWRUHAPOMQZL.
-dsdIfMatch :: Lens' DeleteStreamingDistribution (Maybe Text)
-dsdIfMatch = lens _dsdIfMatch (\s a -> s { _dsdIfMatch = a })
+dsdId = lens _dsdId (\ s a -> s{_dsdId = a});
 
-data DeleteStreamingDistributionResponse = DeleteStreamingDistributionResponse
-    deriving (Eq, Ord, Read, Show, Generic)
+instance AWSRequest DeleteStreamingDistribution where
+        type Sv DeleteStreamingDistribution = CloudFront
+        type Rs DeleteStreamingDistribution =
+             DeleteStreamingDistributionResponse
+        request = delete
+        response
+          = receiveNull DeleteStreamingDistributionResponse'
 
--- | 'DeleteStreamingDistributionResponse' constructor.
-deleteStreamingDistributionResponse :: DeleteStreamingDistributionResponse
-deleteStreamingDistributionResponse = DeleteStreamingDistributionResponse
+instance ToHeaders DeleteStreamingDistribution where
+        toHeaders DeleteStreamingDistribution'{..}
+          = mconcat ["If-Match" =# _dsdIfMatch]
 
 instance ToPath DeleteStreamingDistribution where
-    toPath DeleteStreamingDistribution{..} = mconcat
-        [ "/2014-11-06/streaming-distribution/"
-        , toText _dsdId
-        ]
+        toPath DeleteStreamingDistribution'{..}
+          = mconcat
+              ["/2015-04-17/streaming-distribution/", toBS _dsdId]
 
 instance ToQuery DeleteStreamingDistribution where
-    toQuery = const mempty
-
-instance ToHeaders DeleteStreamingDistribution where
-    toHeaders DeleteStreamingDistribution{..} = mconcat
-        [ "If-Match" =: _dsdIfMatch
-        ]
-
-instance ToXMLRoot DeleteStreamingDistribution where
-    toXMLRoot = const (namespaced ns "DeleteStreamingDistribution" [])
-
-instance ToXML DeleteStreamingDistribution
+        toQuery = const mempty
 
-instance AWSRequest DeleteStreamingDistribution where
-    type Sv DeleteStreamingDistribution = CloudFront
-    type Rs DeleteStreamingDistribution = DeleteStreamingDistributionResponse
+-- | /See:/ 'deleteStreamingDistributionResponse' smart constructor.
+data DeleteStreamingDistributionResponse =
+    DeleteStreamingDistributionResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = delete
-    response = nullResponse DeleteStreamingDistributionResponse
+-- | Creates a value of 'DeleteStreamingDistributionResponse' with the minimum fields required to make a request.
+--
+deleteStreamingDistributionResponse
+    :: DeleteStreamingDistributionResponse
+deleteStreamingDistributionResponse = DeleteStreamingDistributionResponse'
diff --git a/gen/Network/AWS/CloudFront/GetCloudFrontOriginAccessIdentity.hs b/gen/Network/AWS/CloudFront/GetCloudFrontOriginAccessIdentity.hs
--- a/gen/Network/AWS/CloudFront/GetCloudFrontOriginAccessIdentity.hs
+++ b/gen/Network/AWS/CloudFront/GetCloudFrontOriginAccessIdentity.hs
@@ -1,124 +1,139 @@
-{-# 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.CloudFront.GetCloudFrontOriginAccessIdentity
--- 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.
-
--- | Get the information about an origin access identity.
+-- Get the information about an origin access identity.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetCloudFrontOriginAccessIdentity.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetCloudFrontOriginAccessIdentity.html AWS API Reference> for GetCloudFrontOriginAccessIdentity.
 module Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentity
     (
-    -- * Request
-      GetCloudFrontOriginAccessIdentity
-    -- ** Request constructor
-    , getCloudFrontOriginAccessIdentity
-    -- ** Request lenses
+    -- * Creating a Request
+      getCloudFrontOriginAccessIdentity
+    , GetCloudFrontOriginAccessIdentity
+    -- * Request Lenses
     , gcfoaiId
 
-    -- * Response
-    , GetCloudFrontOriginAccessIdentityResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getCloudFrontOriginAccessIdentityResponse
-    -- ** Response lenses
-    , gcfoairCloudFrontOriginAccessIdentity
-    , gcfoairETag
+    , GetCloudFrontOriginAccessIdentityResponse
+    -- * Response Lenses
+    , gcfoairsETag
+    , gcfoairsCloudFrontOriginAccessIdentity
+    , gcfoairsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetCloudFrontOriginAccessIdentity = GetCloudFrontOriginAccessIdentity
+-- | The request to get an origin access identity\'s information.
+--
+-- /See:/ 'getCloudFrontOriginAccessIdentity' smart constructor.
+newtype GetCloudFrontOriginAccessIdentity = GetCloudFrontOriginAccessIdentity'
     { _gcfoaiId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetCloudFrontOriginAccessIdentity' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetCloudFrontOriginAccessIdentity' with the minimum fields required to make a request.
 --
--- * 'gcfoaiId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getCloudFrontOriginAccessIdentity :: Text -- ^ 'gcfoaiId'
-                                  -> GetCloudFrontOriginAccessIdentity
-getCloudFrontOriginAccessIdentity p1 = GetCloudFrontOriginAccessIdentity
-    { _gcfoaiId = p1
+-- * 'gcfoaiId'
+getCloudFrontOriginAccessIdentity
+    :: Text -- ^ 'gcfoaiId'
+    -> GetCloudFrontOriginAccessIdentity
+getCloudFrontOriginAccessIdentity pId_ =
+    GetCloudFrontOriginAccessIdentity'
+    { _gcfoaiId = pId_
     }
 
--- | The identity's id.
+-- | The identity\'s id.
 gcfoaiId :: Lens' GetCloudFrontOriginAccessIdentity Text
-gcfoaiId = lens _gcfoaiId (\s a -> s { _gcfoaiId = a })
+gcfoaiId = lens _gcfoaiId (\ s a -> s{_gcfoaiId = a});
 
-data GetCloudFrontOriginAccessIdentityResponse = GetCloudFrontOriginAccessIdentityResponse
-    { _gcfoairCloudFrontOriginAccessIdentity :: Maybe CloudFrontOriginAccessIdentity
-    , _gcfoairETag                           :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSRequest GetCloudFrontOriginAccessIdentity
+         where
+        type Sv GetCloudFrontOriginAccessIdentity =
+             CloudFront
+        type Rs GetCloudFrontOriginAccessIdentity =
+             GetCloudFrontOriginAccessIdentityResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetCloudFrontOriginAccessIdentityResponse' <$>
+                   (h .#? "ETag") <*> (parseXML x) <*>
+                     (pure (fromEnum s)))
 
--- | 'GetCloudFrontOriginAccessIdentityResponse' constructor.
+instance ToHeaders GetCloudFrontOriginAccessIdentity
+         where
+        toHeaders = const mempty
+
+instance ToPath GetCloudFrontOriginAccessIdentity
+         where
+        toPath GetCloudFrontOriginAccessIdentity'{..}
+          = mconcat
+              ["/2015-04-17/origin-access-identity/cloudfront/",
+               toBS _gcfoaiId]
+
+instance ToQuery GetCloudFrontOriginAccessIdentity
+         where
+        toQuery = const mempty
+
+-- | The returned result of the corresponding request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getCloudFrontOriginAccessIdentityResponse' smart constructor.
+data GetCloudFrontOriginAccessIdentityResponse = GetCloudFrontOriginAccessIdentityResponse'
+    { _gcfoairsETag                           :: !(Maybe Text)
+    , _gcfoairsCloudFrontOriginAccessIdentity :: !(Maybe CloudFrontOriginAccessIdentity)
+    , _gcfoairsStatus                         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetCloudFrontOriginAccessIdentityResponse' with the minimum fields required to make a request.
 --
--- * 'gcfoairCloudFrontOriginAccessIdentity' @::@ 'Maybe' 'CloudFrontOriginAccessIdentity'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gcfoairETag' @::@ 'Maybe' 'Text'
+-- * 'gcfoairsETag'
 --
-getCloudFrontOriginAccessIdentityResponse :: GetCloudFrontOriginAccessIdentityResponse
-getCloudFrontOriginAccessIdentityResponse = GetCloudFrontOriginAccessIdentityResponse
-    { _gcfoairCloudFrontOriginAccessIdentity = Nothing
-    , _gcfoairETag                           = Nothing
+-- * 'gcfoairsCloudFrontOriginAccessIdentity'
+--
+-- * 'gcfoairsStatus'
+getCloudFrontOriginAccessIdentityResponse
+    :: Int -- ^ 'gcfoairsStatus'
+    -> GetCloudFrontOriginAccessIdentityResponse
+getCloudFrontOriginAccessIdentityResponse pStatus_ =
+    GetCloudFrontOriginAccessIdentityResponse'
+    { _gcfoairsETag = Nothing
+    , _gcfoairsCloudFrontOriginAccessIdentity = Nothing
+    , _gcfoairsStatus = pStatus_
     }
 
--- | The origin access identity's information.
-gcfoairCloudFrontOriginAccessIdentity :: Lens' GetCloudFrontOriginAccessIdentityResponse (Maybe CloudFrontOriginAccessIdentity)
-gcfoairCloudFrontOriginAccessIdentity =
-    lens _gcfoairCloudFrontOriginAccessIdentity
-        (\s a -> s { _gcfoairCloudFrontOriginAccessIdentity = a })
-
--- | The current version of the origin access identity's information. For example:
--- E2QWRUHAPOMQZL.
-gcfoairETag :: Lens' GetCloudFrontOriginAccessIdentityResponse (Maybe Text)
-gcfoairETag = lens _gcfoairETag (\s a -> s { _gcfoairETag = a })
-
-instance ToPath GetCloudFrontOriginAccessIdentity where
-    toPath GetCloudFrontOriginAccessIdentity{..} = mconcat
-        [ "/2014-11-06/origin-access-identity/cloudfront/"
-        , toText _gcfoaiId
-        ]
-
-instance ToQuery GetCloudFrontOriginAccessIdentity where
-    toQuery = const mempty
-
-instance ToHeaders GetCloudFrontOriginAccessIdentity
-
-instance ToXMLRoot GetCloudFrontOriginAccessIdentity where
-    toXMLRoot = const (namespaced ns "GetCloudFrontOriginAccessIdentity" [])
-
-instance ToXML GetCloudFrontOriginAccessIdentity
+-- | The current version of the origin access identity\'s information. For
+-- example: E2QWRUHAPOMQZL.
+gcfoairsETag :: Lens' GetCloudFrontOriginAccessIdentityResponse (Maybe Text)
+gcfoairsETag = lens _gcfoairsETag (\ s a -> s{_gcfoairsETag = a});
 
-instance AWSRequest GetCloudFrontOriginAccessIdentity where
-    type Sv GetCloudFrontOriginAccessIdentity = CloudFront
-    type Rs GetCloudFrontOriginAccessIdentity = GetCloudFrontOriginAccessIdentityResponse
+-- | The origin access identity\'s information.
+gcfoairsCloudFrontOriginAccessIdentity :: Lens' GetCloudFrontOriginAccessIdentityResponse (Maybe CloudFrontOriginAccessIdentity)
+gcfoairsCloudFrontOriginAccessIdentity = lens _gcfoairsCloudFrontOriginAccessIdentity (\ s a -> s{_gcfoairsCloudFrontOriginAccessIdentity = a});
 
-    request  = get
-    response = xmlHeaderResponse $ \h x -> GetCloudFrontOriginAccessIdentityResponse
-        <$> x .@? "CloudFrontOriginAccessIdentity"
-        <*> h ~:? "ETag"
+-- | The response status code.
+gcfoairsStatus :: Lens' GetCloudFrontOriginAccessIdentityResponse Int
+gcfoairsStatus = lens _gcfoairsStatus (\ s a -> s{_gcfoairsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/GetCloudFrontOriginAccessIdentityConfig.hs b/gen/Network/AWS/CloudFront/GetCloudFrontOriginAccessIdentityConfig.hs
--- a/gen/Network/AWS/CloudFront/GetCloudFrontOriginAccessIdentityConfig.hs
+++ b/gen/Network/AWS/CloudFront/GetCloudFrontOriginAccessIdentityConfig.hs
@@ -1,124 +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.CloudFront.GetCloudFrontOriginAccessIdentityConfig
--- 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.
-
--- | Get the configuration information about an origin access identity.
+-- Get the configuration information about an origin access identity.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetCloudFrontOriginAccessIdentityConfig.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetCloudFrontOriginAccessIdentityConfig.html AWS API Reference> for GetCloudFrontOriginAccessIdentityConfig.
 module Network.AWS.CloudFront.GetCloudFrontOriginAccessIdentityConfig
     (
-    -- * Request
-      GetCloudFrontOriginAccessIdentityConfig
-    -- ** Request constructor
-    , getCloudFrontOriginAccessIdentityConfig
-    -- ** Request lenses
+    -- * Creating a Request
+      getCloudFrontOriginAccessIdentityConfig
+    , GetCloudFrontOriginAccessIdentityConfig
+    -- * Request Lenses
     , gcfoaicId
 
-    -- * Response
-    , GetCloudFrontOriginAccessIdentityConfigResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getCloudFrontOriginAccessIdentityConfigResponse
-    -- ** Response lenses
-    , gcfoaicrCloudFrontOriginAccessIdentityConfig
-    , gcfoaicrETag
+    , GetCloudFrontOriginAccessIdentityConfigResponse
+    -- * Response Lenses
+    , gcfoaicrsCloudFrontOriginAccessIdentityConfig
+    , gcfoaicrsETag
+    , gcfoaicrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetCloudFrontOriginAccessIdentityConfig = GetCloudFrontOriginAccessIdentityConfig
+-- | The request to get an origin access identity\'s configuration.
+--
+-- /See:/ 'getCloudFrontOriginAccessIdentityConfig' smart constructor.
+newtype GetCloudFrontOriginAccessIdentityConfig = GetCloudFrontOriginAccessIdentityConfig'
     { _gcfoaicId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetCloudFrontOriginAccessIdentityConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetCloudFrontOriginAccessIdentityConfig' with the minimum fields required to make a request.
 --
--- * 'gcfoaicId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getCloudFrontOriginAccessIdentityConfig :: Text -- ^ 'gcfoaicId'
-                                        -> GetCloudFrontOriginAccessIdentityConfig
-getCloudFrontOriginAccessIdentityConfig p1 = GetCloudFrontOriginAccessIdentityConfig
-    { _gcfoaicId = p1
+-- * 'gcfoaicId'
+getCloudFrontOriginAccessIdentityConfig
+    :: Text -- ^ 'gcfoaicId'
+    -> GetCloudFrontOriginAccessIdentityConfig
+getCloudFrontOriginAccessIdentityConfig pId_ =
+    GetCloudFrontOriginAccessIdentityConfig'
+    { _gcfoaicId = pId_
     }
 
--- | The identity's id.
+-- | The identity\'s id.
 gcfoaicId :: Lens' GetCloudFrontOriginAccessIdentityConfig Text
-gcfoaicId = lens _gcfoaicId (\s a -> s { _gcfoaicId = a })
+gcfoaicId = lens _gcfoaicId (\ s a -> s{_gcfoaicId = a});
 
-data GetCloudFrontOriginAccessIdentityConfigResponse = GetCloudFrontOriginAccessIdentityConfigResponse
-    { _gcfoaicrCloudFrontOriginAccessIdentityConfig :: Maybe CloudFrontOriginAccessIdentityConfig
-    , _gcfoaicrETag                                 :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance AWSRequest
+         GetCloudFrontOriginAccessIdentityConfig where
+        type Sv GetCloudFrontOriginAccessIdentityConfig =
+             CloudFront
+        type Rs GetCloudFrontOriginAccessIdentityConfig =
+             GetCloudFrontOriginAccessIdentityConfigResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetCloudFrontOriginAccessIdentityConfigResponse' <$>
+                   (parseXML x) <*> (h .#? "ETag") <*>
+                     (pure (fromEnum s)))
 
--- | 'GetCloudFrontOriginAccessIdentityConfigResponse' constructor.
+instance ToHeaders
+         GetCloudFrontOriginAccessIdentityConfig where
+        toHeaders = const mempty
+
+instance ToPath
+         GetCloudFrontOriginAccessIdentityConfig where
+        toPath GetCloudFrontOriginAccessIdentityConfig'{..}
+          = mconcat
+              ["/2015-04-17/origin-access-identity/cloudfront/",
+               toBS _gcfoaicId, "/config"]
+
+instance ToQuery
+         GetCloudFrontOriginAccessIdentityConfig where
+        toQuery = const mempty
+
+-- | The returned result of the corresponding request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getCloudFrontOriginAccessIdentityConfigResponse' smart constructor.
+data GetCloudFrontOriginAccessIdentityConfigResponse = GetCloudFrontOriginAccessIdentityConfigResponse'
+    { _gcfoaicrsCloudFrontOriginAccessIdentityConfig :: !(Maybe CloudFrontOriginAccessIdentityConfig)
+    , _gcfoaicrsETag                                 :: !(Maybe Text)
+    , _gcfoaicrsStatus                               :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetCloudFrontOriginAccessIdentityConfigResponse' with the minimum fields required to make a request.
 --
--- * 'gcfoaicrCloudFrontOriginAccessIdentityConfig' @::@ 'Maybe' 'CloudFrontOriginAccessIdentityConfig'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'gcfoaicrETag' @::@ 'Maybe' 'Text'
+-- * 'gcfoaicrsCloudFrontOriginAccessIdentityConfig'
 --
-getCloudFrontOriginAccessIdentityConfigResponse :: GetCloudFrontOriginAccessIdentityConfigResponse
-getCloudFrontOriginAccessIdentityConfigResponse = GetCloudFrontOriginAccessIdentityConfigResponse
-    { _gcfoaicrCloudFrontOriginAccessIdentityConfig = Nothing
-    , _gcfoaicrETag                                 = Nothing
+-- * 'gcfoaicrsETag'
+--
+-- * 'gcfoaicrsStatus'
+getCloudFrontOriginAccessIdentityConfigResponse
+    :: Int -- ^ 'gcfoaicrsStatus'
+    -> GetCloudFrontOriginAccessIdentityConfigResponse
+getCloudFrontOriginAccessIdentityConfigResponse pStatus_ =
+    GetCloudFrontOriginAccessIdentityConfigResponse'
+    { _gcfoaicrsCloudFrontOriginAccessIdentityConfig = Nothing
+    , _gcfoaicrsETag = Nothing
+    , _gcfoaicrsStatus = pStatus_
     }
 
--- | The origin access identity's configuration information.
-gcfoaicrCloudFrontOriginAccessIdentityConfig :: Lens' GetCloudFrontOriginAccessIdentityConfigResponse (Maybe CloudFrontOriginAccessIdentityConfig)
-gcfoaicrCloudFrontOriginAccessIdentityConfig =
-    lens _gcfoaicrCloudFrontOriginAccessIdentityConfig
-        (\s a -> s { _gcfoaicrCloudFrontOriginAccessIdentityConfig = a })
+-- | The origin access identity\'s configuration information.
+gcfoaicrsCloudFrontOriginAccessIdentityConfig :: Lens' GetCloudFrontOriginAccessIdentityConfigResponse (Maybe CloudFrontOriginAccessIdentityConfig)
+gcfoaicrsCloudFrontOriginAccessIdentityConfig = lens _gcfoaicrsCloudFrontOriginAccessIdentityConfig (\ s a -> s{_gcfoaicrsCloudFrontOriginAccessIdentityConfig = a});
 
 -- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
-gcfoaicrETag :: Lens' GetCloudFrontOriginAccessIdentityConfigResponse (Maybe Text)
-gcfoaicrETag = lens _gcfoaicrETag (\s a -> s { _gcfoaicrETag = a })
-
-instance ToPath GetCloudFrontOriginAccessIdentityConfig where
-    toPath GetCloudFrontOriginAccessIdentityConfig{..} = mconcat
-        [ "/2014-11-06/origin-access-identity/cloudfront/"
-        , toText _gcfoaicId
-        , "/config"
-        ]
-
-instance ToQuery GetCloudFrontOriginAccessIdentityConfig where
-    toQuery = const mempty
-
-instance ToHeaders GetCloudFrontOriginAccessIdentityConfig
-
-instance ToXMLRoot GetCloudFrontOriginAccessIdentityConfig where
-    toXMLRoot = const (namespaced ns "GetCloudFrontOriginAccessIdentityConfig" [])
-
-instance ToXML GetCloudFrontOriginAccessIdentityConfig
-
-instance AWSRequest GetCloudFrontOriginAccessIdentityConfig where
-    type Sv GetCloudFrontOriginAccessIdentityConfig = CloudFront
-    type Rs GetCloudFrontOriginAccessIdentityConfig = GetCloudFrontOriginAccessIdentityConfigResponse
+gcfoaicrsETag :: Lens' GetCloudFrontOriginAccessIdentityConfigResponse (Maybe Text)
+gcfoaicrsETag = lens _gcfoaicrsETag (\ s a -> s{_gcfoaicrsETag = a});
 
-    request  = get
-    response = xmlHeaderResponse $ \h x -> GetCloudFrontOriginAccessIdentityConfigResponse
-        <$> x .@? "CloudFrontOriginAccessIdentityConfig"
-        <*> h ~:? "ETag"
+-- | The response status code.
+gcfoaicrsStatus :: Lens' GetCloudFrontOriginAccessIdentityConfigResponse Int
+gcfoaicrsStatus = lens _gcfoaicrsStatus (\ s a -> s{_gcfoaicrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/GetDistribution.hs b/gen/Network/AWS/CloudFront/GetDistribution.hs
--- a/gen/Network/AWS/CloudFront/GetDistribution.hs
+++ b/gen/Network/AWS/CloudFront/GetDistribution.hs
@@ -1,122 +1,131 @@
-{-# 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.CloudFront.GetDistribution
--- 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.
-
--- | Get the information about a distribution.
+-- Get the information about a distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetDistribution.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetDistribution.html AWS API Reference> for GetDistribution.
 module Network.AWS.CloudFront.GetDistribution
     (
-    -- * Request
-      GetDistribution
-    -- ** Request constructor
-    , getDistribution
-    -- ** Request lenses
+    -- * Creating a Request
+      getDistribution
+    , GetDistribution
+    -- * Request Lenses
     , gdId
 
-    -- * Response
-    , GetDistributionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getDistributionResponse
-    -- ** Response lenses
-    , gdrDistribution
-    , gdrETag
+    , GetDistributionResponse
+    -- * Response Lenses
+    , gdrsETag
+    , gdrsDistribution
+    , gdrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetDistribution = GetDistribution
+-- | The request to get a distribution\'s information.
+--
+-- /See:/ 'getDistribution' smart constructor.
+newtype GetDistribution = GetDistribution'
     { _gdId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetDistribution' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetDistribution' with the minimum fields required to make a request.
 --
--- * 'gdId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getDistribution :: Text -- ^ 'gdId'
-                -> GetDistribution
-getDistribution p1 = GetDistribution
-    { _gdId = p1
+-- * 'gdId'
+getDistribution
+    :: Text -- ^ 'gdId'
+    -> GetDistribution
+getDistribution pId_ =
+    GetDistribution'
+    { _gdId = pId_
     }
 
--- | The distribution's id.
+-- | The distribution\'s id.
 gdId :: Lens' GetDistribution Text
-gdId = lens _gdId (\s a -> s { _gdId = a })
-
-data GetDistributionResponse = GetDistributionResponse
-    { _gdrDistribution :: Maybe Distribution
-    , _gdrETag         :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'GetDistributionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gdrDistribution' @::@ 'Maybe' 'Distribution'
---
--- * 'gdrETag' @::@ 'Maybe' 'Text'
---
-getDistributionResponse :: GetDistributionResponse
-getDistributionResponse = GetDistributionResponse
-    { _gdrDistribution = Nothing
-    , _gdrETag         = Nothing
-    }
+gdId = lens _gdId (\ s a -> s{_gdId = a});
 
--- | The distribution's information.
-gdrDistribution :: Lens' GetDistributionResponse (Maybe Distribution)
-gdrDistribution = lens _gdrDistribution (\s a -> s { _gdrDistribution = a })
+instance AWSRequest GetDistribution where
+        type Sv GetDistribution = CloudFront
+        type Rs GetDistribution = GetDistributionResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetDistributionResponse' <$>
+                   (h .#? "ETag") <*> (parseXML x) <*>
+                     (pure (fromEnum s)))
 
--- | The current version of the distribution's information. For example:
--- E2QWRUHAPOMQZL.
-gdrETag :: Lens' GetDistributionResponse (Maybe Text)
-gdrETag = lens _gdrETag (\s a -> s { _gdrETag = a })
+instance ToHeaders GetDistribution where
+        toHeaders = const mempty
 
 instance ToPath GetDistribution where
-    toPath GetDistribution{..} = mconcat
-        [ "/2014-11-06/distribution/"
-        , toText _gdId
-        ]
+        toPath GetDistribution'{..}
+          = mconcat ["/2015-04-17/distribution/", toBS _gdId]
 
 instance ToQuery GetDistribution where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders GetDistribution
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'getDistributionResponse' smart constructor.
+data GetDistributionResponse = GetDistributionResponse'
+    { _gdrsETag         :: !(Maybe Text)
+    , _gdrsDistribution :: !(Maybe Distribution)
+    , _gdrsStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot GetDistribution where
-    toXMLRoot = const (namespaced ns "GetDistribution" [])
+-- | Creates a value of 'GetDistributionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdrsETag'
+--
+-- * 'gdrsDistribution'
+--
+-- * 'gdrsStatus'
+getDistributionResponse
+    :: Int -- ^ 'gdrsStatus'
+    -> GetDistributionResponse
+getDistributionResponse pStatus_ =
+    GetDistributionResponse'
+    { _gdrsETag = Nothing
+    , _gdrsDistribution = Nothing
+    , _gdrsStatus = pStatus_
+    }
 
-instance ToXML GetDistribution
+-- | The current version of the distribution\'s information. For example:
+-- E2QWRUHAPOMQZL.
+gdrsETag :: Lens' GetDistributionResponse (Maybe Text)
+gdrsETag = lens _gdrsETag (\ s a -> s{_gdrsETag = a});
 
-instance AWSRequest GetDistribution where
-    type Sv GetDistribution = CloudFront
-    type Rs GetDistribution = GetDistributionResponse
+-- | The distribution\'s information.
+gdrsDistribution :: Lens' GetDistributionResponse (Maybe Distribution)
+gdrsDistribution = lens _gdrsDistribution (\ s a -> s{_gdrsDistribution = a});
 
-    request  = get
-    response = xmlHeaderResponse $ \h x -> GetDistributionResponse
-        <$> x .@? "Distribution"
-        <*> h ~:? "ETag"
+-- | The response status code.
+gdrsStatus :: Lens' GetDistributionResponse Int
+gdrsStatus = lens _gdrsStatus (\ s a -> s{_gdrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/GetDistributionConfig.hs b/gen/Network/AWS/CloudFront/GetDistributionConfig.hs
--- a/gen/Network/AWS/CloudFront/GetDistributionConfig.hs
+++ b/gen/Network/AWS/CloudFront/GetDistributionConfig.hs
@@ -1,123 +1,132 @@
-{-# 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.CloudFront.GetDistributionConfig
--- 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.
-
--- | Get the configuration information about a distribution.
+-- Get the configuration information about a distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetDistributionConfig.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetDistributionConfig.html AWS API Reference> for GetDistributionConfig.
 module Network.AWS.CloudFront.GetDistributionConfig
     (
-    -- * Request
-      GetDistributionConfig
-    -- ** Request constructor
-    , getDistributionConfig
-    -- ** Request lenses
+    -- * Creating a Request
+      getDistributionConfig
+    , GetDistributionConfig
+    -- * Request Lenses
     , gdcId
 
-    -- * Response
-    , GetDistributionConfigResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getDistributionConfigResponse
-    -- ** Response lenses
-    , gdcrDistributionConfig
-    , gdcrETag
+    , GetDistributionConfigResponse
+    -- * Response Lenses
+    , gdcrsETag
+    , gdcrsDistributionConfig
+    , gdcrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetDistributionConfig = GetDistributionConfig
+-- | The request to get a distribution configuration.
+--
+-- /See:/ 'getDistributionConfig' smart constructor.
+newtype GetDistributionConfig = GetDistributionConfig'
     { _gdcId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetDistributionConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetDistributionConfig' with the minimum fields required to make a request.
 --
--- * 'gdcId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getDistributionConfig :: Text -- ^ 'gdcId'
-                      -> GetDistributionConfig
-getDistributionConfig p1 = GetDistributionConfig
-    { _gdcId = p1
+-- * 'gdcId'
+getDistributionConfig
+    :: Text -- ^ 'gdcId'
+    -> GetDistributionConfig
+getDistributionConfig pId_ =
+    GetDistributionConfig'
+    { _gdcId = pId_
     }
 
--- | The distribution's id.
+-- | The distribution\'s id.
 gdcId :: Lens' GetDistributionConfig Text
-gdcId = lens _gdcId (\s a -> s { _gdcId = a })
-
-data GetDistributionConfigResponse = GetDistributionConfigResponse
-    { _gdcrDistributionConfig :: Maybe DistributionConfig
-    , _gdcrETag               :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'GetDistributionConfigResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gdcrDistributionConfig' @::@ 'Maybe' 'DistributionConfig'
---
--- * 'gdcrETag' @::@ 'Maybe' 'Text'
---
-getDistributionConfigResponse :: GetDistributionConfigResponse
-getDistributionConfigResponse = GetDistributionConfigResponse
-    { _gdcrDistributionConfig = Nothing
-    , _gdcrETag               = Nothing
-    }
+gdcId = lens _gdcId (\ s a -> s{_gdcId = a});
 
--- | The distribution's configuration information.
-gdcrDistributionConfig :: Lens' GetDistributionConfigResponse (Maybe DistributionConfig)
-gdcrDistributionConfig =
-    lens _gdcrDistributionConfig (\s a -> s { _gdcrDistributionConfig = a })
+instance AWSRequest GetDistributionConfig where
+        type Sv GetDistributionConfig = CloudFront
+        type Rs GetDistributionConfig =
+             GetDistributionConfigResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetDistributionConfigResponse' <$>
+                   (h .#? "ETag") <*> (parseXML x) <*>
+                     (pure (fromEnum s)))
 
--- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
-gdcrETag :: Lens' GetDistributionConfigResponse (Maybe Text)
-gdcrETag = lens _gdcrETag (\s a -> s { _gdcrETag = a })
+instance ToHeaders GetDistributionConfig where
+        toHeaders = const mempty
 
 instance ToPath GetDistributionConfig where
-    toPath GetDistributionConfig{..} = mconcat
-        [ "/2014-11-06/distribution/"
-        , toText _gdcId
-        , "/config"
-        ]
+        toPath GetDistributionConfig'{..}
+          = mconcat
+              ["/2015-04-17/distribution/", toBS _gdcId, "/config"]
 
 instance ToQuery GetDistributionConfig where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders GetDistributionConfig
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'getDistributionConfigResponse' smart constructor.
+data GetDistributionConfigResponse = GetDistributionConfigResponse'
+    { _gdcrsETag               :: !(Maybe Text)
+    , _gdcrsDistributionConfig :: !(Maybe DistributionConfig)
+    , _gdcrsStatus             :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot GetDistributionConfig where
-    toXMLRoot = const (namespaced ns "GetDistributionConfig" [])
+-- | Creates a value of 'GetDistributionConfigResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdcrsETag'
+--
+-- * 'gdcrsDistributionConfig'
+--
+-- * 'gdcrsStatus'
+getDistributionConfigResponse
+    :: Int -- ^ 'gdcrsStatus'
+    -> GetDistributionConfigResponse
+getDistributionConfigResponse pStatus_ =
+    GetDistributionConfigResponse'
+    { _gdcrsETag = Nothing
+    , _gdcrsDistributionConfig = Nothing
+    , _gdcrsStatus = pStatus_
+    }
 
-instance ToXML GetDistributionConfig
+-- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
+gdcrsETag :: Lens' GetDistributionConfigResponse (Maybe Text)
+gdcrsETag = lens _gdcrsETag (\ s a -> s{_gdcrsETag = a});
 
-instance AWSRequest GetDistributionConfig where
-    type Sv GetDistributionConfig = CloudFront
-    type Rs GetDistributionConfig = GetDistributionConfigResponse
+-- | The distribution\'s configuration information.
+gdcrsDistributionConfig :: Lens' GetDistributionConfigResponse (Maybe DistributionConfig)
+gdcrsDistributionConfig = lens _gdcrsDistributionConfig (\ s a -> s{_gdcrsDistributionConfig = a});
 
-    request  = get
-    response = xmlHeaderResponse $ \h x -> GetDistributionConfigResponse
-        <$> x .@? "DistributionConfig"
-        <*> h ~:? "ETag"
+-- | The response status code.
+gdcrsStatus :: Lens' GetDistributionConfigResponse Int
+gdcrsStatus = lens _gdcrsStatus (\ s a -> s{_gdcrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/GetInvalidation.hs b/gen/Network/AWS/CloudFront/GetInvalidation.hs
--- a/gen/Network/AWS/CloudFront/GetInvalidation.hs
+++ b/gen/Network/AWS/CloudFront/GetInvalidation.hs
@@ -1,126 +1,132 @@
-{-# 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.CloudFront.GetInvalidation
--- 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.
-
--- | Get the information about an invalidation.
+-- Get the information about an invalidation.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetInvalidation.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetInvalidation.html AWS API Reference> for GetInvalidation.
 module Network.AWS.CloudFront.GetInvalidation
     (
-    -- * Request
-      GetInvalidation
-    -- ** Request constructor
-    , getInvalidation
-    -- ** Request lenses
+    -- * Creating a Request
+      getInvalidation
+    , GetInvalidation
+    -- * Request Lenses
     , giDistributionId
     , giId
 
-    -- * Response
-    , GetInvalidationResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getInvalidationResponse
-    -- ** Response lenses
-    , girInvalidation
+    , GetInvalidationResponse
+    -- * Response Lenses
+    , girsInvalidation
+    , girsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data GetInvalidation = GetInvalidation
-    { _giDistributionId :: Text
-    , _giId             :: Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'GetInvalidation' constructor.
+-- | The request to get an invalidation\'s information.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'getInvalidation' smart constructor.
+data GetInvalidation = GetInvalidation'
+    { _giDistributionId :: !Text
+    , _giId             :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetInvalidation' with the minimum fields required to make a request.
 --
--- * 'giDistributionId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'giId' @::@ 'Text'
+-- * 'giDistributionId'
 --
-getInvalidation :: Text -- ^ 'giDistributionId'
-                -> Text -- ^ 'giId'
-                -> GetInvalidation
-getInvalidation p1 p2 = GetInvalidation
-    { _giDistributionId = p1
-    , _giId             = p2
+-- * 'giId'
+getInvalidation
+    :: Text -- ^ 'giDistributionId'
+    -> Text -- ^ 'giId'
+    -> GetInvalidation
+getInvalidation pDistributionId_ pId_ =
+    GetInvalidation'
+    { _giDistributionId = pDistributionId_
+    , _giId = pId_
     }
 
--- | The distribution's id.
+-- | The distribution\'s id.
 giDistributionId :: Lens' GetInvalidation Text
-giDistributionId = lens _giDistributionId (\s a -> s { _giDistributionId = a })
+giDistributionId = lens _giDistributionId (\ s a -> s{_giDistributionId = a});
 
--- | The invalidation's id.
+-- | The invalidation\'s id.
 giId :: Lens' GetInvalidation Text
-giId = lens _giId (\s a -> s { _giId = a })
-
-newtype GetInvalidationResponse = GetInvalidationResponse
-    { _girInvalidation :: Maybe Invalidation
-    } deriving (Eq, Read, Show)
+giId = lens _giId (\ s a -> s{_giId = a});
 
--- | 'GetInvalidationResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'girInvalidation' @::@ 'Maybe' 'Invalidation'
---
-getInvalidationResponse :: GetInvalidationResponse
-getInvalidationResponse = GetInvalidationResponse
-    { _girInvalidation = Nothing
-    }
+instance AWSRequest GetInvalidation where
+        type Sv GetInvalidation = CloudFront
+        type Rs GetInvalidation = GetInvalidationResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetInvalidationResponse' <$>
+                   (parseXML x) <*> (pure (fromEnum s)))
 
--- | The invalidation's information.
-girInvalidation :: Lens' GetInvalidationResponse (Maybe Invalidation)
-girInvalidation = lens _girInvalidation (\s a -> s { _girInvalidation = a })
+instance ToHeaders GetInvalidation where
+        toHeaders = const mempty
 
 instance ToPath GetInvalidation where
-    toPath GetInvalidation{..} = mconcat
-        [ "/2014-11-06/distribution/"
-        , toText _giDistributionId
-        , "/invalidation/"
-        , toText _giId
-        ]
+        toPath GetInvalidation'{..}
+          = mconcat
+              ["/2015-04-17/distribution/", toBS _giDistributionId,
+               "/invalidation/", toBS _giId]
 
 instance ToQuery GetInvalidation where
-    toQuery = const mempty
-
-instance ToHeaders GetInvalidation
-
-instance ToXMLRoot GetInvalidation where
-    toXMLRoot = const (namespaced ns "GetInvalidation" [])
+        toQuery = const mempty
 
-instance ToXML GetInvalidation
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'getInvalidationResponse' smart constructor.
+data GetInvalidationResponse = GetInvalidationResponse'
+    { _girsInvalidation :: !(Maybe Invalidation)
+    , _girsStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance AWSRequest GetInvalidation where
-    type Sv GetInvalidation = CloudFront
-    type Rs GetInvalidation = GetInvalidationResponse
+-- | Creates a value of 'GetInvalidationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'girsInvalidation'
+--
+-- * 'girsStatus'
+getInvalidationResponse
+    :: Int -- ^ 'girsStatus'
+    -> GetInvalidationResponse
+getInvalidationResponse pStatus_ =
+    GetInvalidationResponse'
+    { _girsInvalidation = Nothing
+    , _girsStatus = pStatus_
+    }
 
-    request  = get
-    response = xmlResponse
+-- | The invalidation\'s information.
+girsInvalidation :: Lens' GetInvalidationResponse (Maybe Invalidation)
+girsInvalidation = lens _girsInvalidation (\ s a -> s{_girsInvalidation = a});
 
-instance FromXML GetInvalidationResponse where
-    parseXML x = GetInvalidationResponse
-        <$> x .@? "Invalidation"
+-- | The response status code.
+girsStatus :: Lens' GetInvalidationResponse Int
+girsStatus = lens _girsStatus (\ s a -> s{_girsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/GetStreamingDistribution.hs b/gen/Network/AWS/CloudFront/GetStreamingDistribution.hs
--- a/gen/Network/AWS/CloudFront/GetStreamingDistribution.hs
+++ b/gen/Network/AWS/CloudFront/GetStreamingDistribution.hs
@@ -1,124 +1,133 @@
-{-# 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.CloudFront.GetStreamingDistribution
--- 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.
-
--- | Get the information about a streaming distribution.
+-- Get the information about a streaming distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetStreamingDistribution.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetStreamingDistribution.html AWS API Reference> for GetStreamingDistribution.
 module Network.AWS.CloudFront.GetStreamingDistribution
     (
-    -- * Request
-      GetStreamingDistribution
-    -- ** Request constructor
-    , getStreamingDistribution
-    -- ** Request lenses
+    -- * Creating a Request
+      getStreamingDistribution
+    , GetStreamingDistribution
+    -- * Request Lenses
     , gsdId
 
-    -- * Response
-    , GetStreamingDistributionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getStreamingDistributionResponse
-    -- ** Response lenses
-    , gsdrETag
-    , gsdrStreamingDistribution
+    , GetStreamingDistributionResponse
+    -- * Response Lenses
+    , gsdrsETag
+    , gsdrsStreamingDistribution
+    , gsdrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetStreamingDistribution = GetStreamingDistribution
+-- | The request to get a streaming distribution\'s information.
+--
+-- /See:/ 'getStreamingDistribution' smart constructor.
+newtype GetStreamingDistribution = GetStreamingDistribution'
     { _gsdId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetStreamingDistribution' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetStreamingDistribution' with the minimum fields required to make a request.
 --
--- * 'gsdId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getStreamingDistribution :: Text -- ^ 'gsdId'
-                         -> GetStreamingDistribution
-getStreamingDistribution p1 = GetStreamingDistribution
-    { _gsdId = p1
+-- * 'gsdId'
+getStreamingDistribution
+    :: Text -- ^ 'gsdId'
+    -> GetStreamingDistribution
+getStreamingDistribution pId_ =
+    GetStreamingDistribution'
+    { _gsdId = pId_
     }
 
--- | The streaming distribution's id.
+-- | The streaming distribution\'s id.
 gsdId :: Lens' GetStreamingDistribution Text
-gsdId = lens _gsdId (\s a -> s { _gsdId = a })
-
-data GetStreamingDistributionResponse = GetStreamingDistributionResponse
-    { _gsdrETag                  :: Maybe Text
-    , _gsdrStreamingDistribution :: Maybe StreamingDistribution
-    } deriving (Eq, Read, Show)
-
--- | 'GetStreamingDistributionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gsdrETag' @::@ 'Maybe' 'Text'
---
--- * 'gsdrStreamingDistribution' @::@ 'Maybe' 'StreamingDistribution'
---
-getStreamingDistributionResponse :: GetStreamingDistributionResponse
-getStreamingDistributionResponse = GetStreamingDistributionResponse
-    { _gsdrStreamingDistribution = Nothing
-    , _gsdrETag                  = Nothing
-    }
+gsdId = lens _gsdId (\ s a -> s{_gsdId = a});
 
--- | The current version of the streaming distribution's information. For example:
--- E2QWRUHAPOMQZL.
-gsdrETag :: Lens' GetStreamingDistributionResponse (Maybe Text)
-gsdrETag = lens _gsdrETag (\s a -> s { _gsdrETag = a })
+instance AWSRequest GetStreamingDistribution where
+        type Sv GetStreamingDistribution = CloudFront
+        type Rs GetStreamingDistribution =
+             GetStreamingDistributionResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetStreamingDistributionResponse' <$>
+                   (h .#? "ETag") <*> (parseXML x) <*>
+                     (pure (fromEnum s)))
 
--- | The streaming distribution's information.
-gsdrStreamingDistribution :: Lens' GetStreamingDistributionResponse (Maybe StreamingDistribution)
-gsdrStreamingDistribution =
-    lens _gsdrStreamingDistribution
-        (\s a -> s { _gsdrStreamingDistribution = a })
+instance ToHeaders GetStreamingDistribution where
+        toHeaders = const mempty
 
 instance ToPath GetStreamingDistribution where
-    toPath GetStreamingDistribution{..} = mconcat
-        [ "/2014-11-06/streaming-distribution/"
-        , toText _gsdId
-        ]
+        toPath GetStreamingDistribution'{..}
+          = mconcat
+              ["/2015-04-17/streaming-distribution/", toBS _gsdId]
 
 instance ToQuery GetStreamingDistribution where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders GetStreamingDistribution
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'getStreamingDistributionResponse' smart constructor.
+data GetStreamingDistributionResponse = GetStreamingDistributionResponse'
+    { _gsdrsETag                  :: !(Maybe Text)
+    , _gsdrsStreamingDistribution :: !(Maybe StreamingDistribution)
+    , _gsdrsStatus                :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot GetStreamingDistribution where
-    toXMLRoot = const (namespaced ns "GetStreamingDistribution" [])
+-- | Creates a value of 'GetStreamingDistributionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsdrsETag'
+--
+-- * 'gsdrsStreamingDistribution'
+--
+-- * 'gsdrsStatus'
+getStreamingDistributionResponse
+    :: Int -- ^ 'gsdrsStatus'
+    -> GetStreamingDistributionResponse
+getStreamingDistributionResponse pStatus_ =
+    GetStreamingDistributionResponse'
+    { _gsdrsETag = Nothing
+    , _gsdrsStreamingDistribution = Nothing
+    , _gsdrsStatus = pStatus_
+    }
 
-instance ToXML GetStreamingDistribution
+-- | The current version of the streaming distribution\'s information. For
+-- example: E2QWRUHAPOMQZL.
+gsdrsETag :: Lens' GetStreamingDistributionResponse (Maybe Text)
+gsdrsETag = lens _gsdrsETag (\ s a -> s{_gsdrsETag = a});
 
-instance AWSRequest GetStreamingDistribution where
-    type Sv GetStreamingDistribution = CloudFront
-    type Rs GetStreamingDistribution = GetStreamingDistributionResponse
+-- | The streaming distribution\'s information.
+gsdrsStreamingDistribution :: Lens' GetStreamingDistributionResponse (Maybe StreamingDistribution)
+gsdrsStreamingDistribution = lens _gsdrsStreamingDistribution (\ s a -> s{_gsdrsStreamingDistribution = a});
 
-    request  = get
-    response = xmlHeaderResponse $ \h x -> GetStreamingDistributionResponse
-        <$> h ~:? "ETag"
-        <*> x .@? "StreamingDistribution"
+-- | The response status code.
+gsdrsStatus :: Lens' GetStreamingDistributionResponse Int
+gsdrsStatus = lens _gsdrsStatus (\ s a -> s{_gsdrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/GetStreamingDistributionConfig.hs b/gen/Network/AWS/CloudFront/GetStreamingDistributionConfig.hs
--- a/gen/Network/AWS/CloudFront/GetStreamingDistributionConfig.hs
+++ b/gen/Network/AWS/CloudFront/GetStreamingDistributionConfig.hs
@@ -1,124 +1,135 @@
-{-# 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.CloudFront.GetStreamingDistributionConfig
--- 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.
-
--- | Get the configuration information about a streaming distribution.
+-- Get the configuration information about a streaming distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetStreamingDistributionConfig.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/GetStreamingDistributionConfig.html AWS API Reference> for GetStreamingDistributionConfig.
 module Network.AWS.CloudFront.GetStreamingDistributionConfig
     (
-    -- * Request
-      GetStreamingDistributionConfig
-    -- ** Request constructor
-    , getStreamingDistributionConfig
-    -- ** Request lenses
+    -- * Creating a Request
+      getStreamingDistributionConfig
+    , GetStreamingDistributionConfig
+    -- * Request Lenses
     , gsdcId
 
-    -- * Response
-    , GetStreamingDistributionConfigResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , getStreamingDistributionConfigResponse
-    -- ** Response lenses
-    , gsdcrETag
-    , gsdcrStreamingDistributionConfig
+    , GetStreamingDistributionConfigResponse
+    -- * Response Lenses
+    , gsdcrsStreamingDistributionConfig
+    , gsdcrsETag
+    , gsdcrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
-newtype GetStreamingDistributionConfig = GetStreamingDistributionConfig
+-- | To request to get a streaming distribution configuration.
+--
+-- /See:/ 'getStreamingDistributionConfig' smart constructor.
+newtype GetStreamingDistributionConfig = GetStreamingDistributionConfig'
     { _gsdcId :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'GetStreamingDistributionConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
+-- | Creates a value of 'GetStreamingDistributionConfig' with the minimum fields required to make a request.
 --
--- * 'gsdcId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
-getStreamingDistributionConfig :: Text -- ^ 'gsdcId'
-                               -> GetStreamingDistributionConfig
-getStreamingDistributionConfig p1 = GetStreamingDistributionConfig
-    { _gsdcId = p1
+-- * 'gsdcId'
+getStreamingDistributionConfig
+    :: Text -- ^ 'gsdcId'
+    -> GetStreamingDistributionConfig
+getStreamingDistributionConfig pId_ =
+    GetStreamingDistributionConfig'
+    { _gsdcId = pId_
     }
 
--- | The streaming distribution's id.
+-- | The streaming distribution\'s id.
 gsdcId :: Lens' GetStreamingDistributionConfig Text
-gsdcId = lens _gsdcId (\s a -> s { _gsdcId = a })
-
-data GetStreamingDistributionConfigResponse = GetStreamingDistributionConfigResponse
-    { _gsdcrETag                        :: Maybe Text
-    , _gsdcrStreamingDistributionConfig :: Maybe StreamingDistributionConfig
-    } deriving (Eq, Read, Show)
-
--- | 'GetStreamingDistributionConfigResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gsdcrETag' @::@ 'Maybe' 'Text'
---
--- * 'gsdcrStreamingDistributionConfig' @::@ 'Maybe' 'StreamingDistributionConfig'
---
-getStreamingDistributionConfigResponse :: GetStreamingDistributionConfigResponse
-getStreamingDistributionConfigResponse = GetStreamingDistributionConfigResponse
-    { _gsdcrStreamingDistributionConfig = Nothing
-    , _gsdcrETag                        = Nothing
-    }
+gsdcId = lens _gsdcId (\ s a -> s{_gsdcId = a});
 
--- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
-gsdcrETag :: Lens' GetStreamingDistributionConfigResponse (Maybe Text)
-gsdcrETag = lens _gsdcrETag (\s a -> s { _gsdcrETag = a })
+instance AWSRequest GetStreamingDistributionConfig
+         where
+        type Sv GetStreamingDistributionConfig = CloudFront
+        type Rs GetStreamingDistributionConfig =
+             GetStreamingDistributionConfigResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 GetStreamingDistributionConfigResponse' <$>
+                   (parseXML x) <*> (h .#? "ETag") <*>
+                     (pure (fromEnum s)))
 
--- | The streaming distribution's configuration information.
-gsdcrStreamingDistributionConfig :: Lens' GetStreamingDistributionConfigResponse (Maybe StreamingDistributionConfig)
-gsdcrStreamingDistributionConfig =
-    lens _gsdcrStreamingDistributionConfig
-        (\s a -> s { _gsdcrStreamingDistributionConfig = a })
+instance ToHeaders GetStreamingDistributionConfig
+         where
+        toHeaders = const mempty
 
 instance ToPath GetStreamingDistributionConfig where
-    toPath GetStreamingDistributionConfig{..} = mconcat
-        [ "/2014-11-06/streaming-distribution/"
-        , toText _gsdcId
-        , "/config"
-        ]
+        toPath GetStreamingDistributionConfig'{..}
+          = mconcat
+              ["/2015-04-17/streaming-distribution/", toBS _gsdcId,
+               "/config"]
 
 instance ToQuery GetStreamingDistributionConfig where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders GetStreamingDistributionConfig
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'getStreamingDistributionConfigResponse' smart constructor.
+data GetStreamingDistributionConfigResponse = GetStreamingDistributionConfigResponse'
+    { _gsdcrsStreamingDistributionConfig :: !(Maybe StreamingDistributionConfig)
+    , _gsdcrsETag                        :: !(Maybe Text)
+    , _gsdcrsStatus                      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot GetStreamingDistributionConfig where
-    toXMLRoot = const (namespaced ns "GetStreamingDistributionConfig" [])
+-- | Creates a value of 'GetStreamingDistributionConfigResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsdcrsStreamingDistributionConfig'
+--
+-- * 'gsdcrsETag'
+--
+-- * 'gsdcrsStatus'
+getStreamingDistributionConfigResponse
+    :: Int -- ^ 'gsdcrsStatus'
+    -> GetStreamingDistributionConfigResponse
+getStreamingDistributionConfigResponse pStatus_ =
+    GetStreamingDistributionConfigResponse'
+    { _gsdcrsStreamingDistributionConfig = Nothing
+    , _gsdcrsETag = Nothing
+    , _gsdcrsStatus = pStatus_
+    }
 
-instance ToXML GetStreamingDistributionConfig
+-- | The streaming distribution\'s configuration information.
+gsdcrsStreamingDistributionConfig :: Lens' GetStreamingDistributionConfigResponse (Maybe StreamingDistributionConfig)
+gsdcrsStreamingDistributionConfig = lens _gsdcrsStreamingDistributionConfig (\ s a -> s{_gsdcrsStreamingDistributionConfig = a});
 
-instance AWSRequest GetStreamingDistributionConfig where
-    type Sv GetStreamingDistributionConfig = CloudFront
-    type Rs GetStreamingDistributionConfig = GetStreamingDistributionConfigResponse
+-- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
+gsdcrsETag :: Lens' GetStreamingDistributionConfigResponse (Maybe Text)
+gsdcrsETag = lens _gsdcrsETag (\ s a -> s{_gsdcrsETag = a});
 
-    request  = get
-    response = xmlHeaderResponse $ \h x -> GetStreamingDistributionConfigResponse
-        <$> h ~:? "ETag"
-        <*> x .@? "StreamingDistributionConfig"
+-- | The response status code.
+gsdcrsStatus :: Lens' GetStreamingDistributionConfigResponse Int
+gsdcrsStatus = lens _gsdcrsStatus (\ s a -> s{_gsdcrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/ListCloudFrontOriginAccessIdentities.hs b/gen/Network/AWS/CloudFront/ListCloudFrontOriginAccessIdentities.hs
--- a/gen/Network/AWS/CloudFront/ListCloudFrontOriginAccessIdentities.hs
+++ b/gen/Network/AWS/CloudFront/ListCloudFrontOriginAccessIdentities.hs
@@ -1,135 +1,144 @@
-{-# 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.CloudFront.ListCloudFrontOriginAccessIdentities
--- 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.
-
--- | List origin access identities.
+-- List origin access identities.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/ListCloudFrontOriginAccessIdentities.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/ListCloudFrontOriginAccessIdentities.html AWS API Reference> for ListCloudFrontOriginAccessIdentities.
 module Network.AWS.CloudFront.ListCloudFrontOriginAccessIdentities
     (
-    -- * Request
-      ListCloudFrontOriginAccessIdentities
-    -- ** Request constructor
-    , listCloudFrontOriginAccessIdentities
-    -- ** Request lenses
-    , lcfoaiMarker
+    -- * Creating a Request
+      listCloudFrontOriginAccessIdentities
+    , ListCloudFrontOriginAccessIdentities
+    -- * Request Lenses
     , lcfoaiMaxItems
+    , lcfoaiMarker
 
-    -- * Response
-    , ListCloudFrontOriginAccessIdentitiesResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listCloudFrontOriginAccessIdentitiesResponse
-    -- ** Response lenses
-    , lcfoairCloudFrontOriginAccessIdentityList
+    , ListCloudFrontOriginAccessIdentitiesResponse
+    -- * Response Lenses
+    , lcfoairsStatus
+    , lcfoairsCloudFrontOriginAccessIdentityList
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data ListCloudFrontOriginAccessIdentities = ListCloudFrontOriginAccessIdentities
-    { _lcfoaiMarker   :: Maybe Text
-    , _lcfoaiMaxItems :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListCloudFrontOriginAccessIdentities' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lcfoaiMarker' @::@ 'Maybe' 'Text'
---
--- * 'lcfoaiMaxItems' @::@ 'Maybe' 'Text'
+-- | The request to list origin access identities.
 --
-listCloudFrontOriginAccessIdentities :: ListCloudFrontOriginAccessIdentities
-listCloudFrontOriginAccessIdentities = ListCloudFrontOriginAccessIdentities
-    { _lcfoaiMarker   = Nothing
-    , _lcfoaiMaxItems = Nothing
-    }
-
--- | Use this when paginating results to indicate where to begin in your list of
--- origin access identities. The results include identities in the list that
--- occur after the marker. To get the next page of results, set the Marker to
--- the value of the NextMarker from the current page's response (which is also
--- the ID of the last identity on that page).
-lcfoaiMarker :: Lens' ListCloudFrontOriginAccessIdentities (Maybe Text)
-lcfoaiMarker = lens _lcfoaiMarker (\s a -> s { _lcfoaiMarker = a })
-
--- | The maximum number of origin access identities you want in the response body.
-lcfoaiMaxItems :: Lens' ListCloudFrontOriginAccessIdentities (Maybe Text)
-lcfoaiMaxItems = lens _lcfoaiMaxItems (\s a -> s { _lcfoaiMaxItems = a })
-
-newtype ListCloudFrontOriginAccessIdentitiesResponse = ListCloudFrontOriginAccessIdentitiesResponse
-    { _lcfoairCloudFrontOriginAccessIdentityList :: CloudFrontOriginAccessIdentityList
-    } deriving (Eq, Read, Show)
+-- /See:/ 'listCloudFrontOriginAccessIdentities' smart constructor.
+data ListCloudFrontOriginAccessIdentities = ListCloudFrontOriginAccessIdentities'
+    { _lcfoaiMaxItems :: !(Maybe Text)
+    , _lcfoaiMarker   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
--- | 'ListCloudFrontOriginAccessIdentitiesResponse' constructor.
+-- | Creates a value of 'ListCloudFrontOriginAccessIdentities' with the minimum fields required to make a request.
 --
--- The fields accessible through corresponding lenses are:
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lcfoairCloudFrontOriginAccessIdentityList' @::@ 'CloudFrontOriginAccessIdentityList'
+-- * 'lcfoaiMaxItems'
 --
-listCloudFrontOriginAccessIdentitiesResponse :: CloudFrontOriginAccessIdentityList -- ^ 'lcfoairCloudFrontOriginAccessIdentityList'
-                                             -> ListCloudFrontOriginAccessIdentitiesResponse
-listCloudFrontOriginAccessIdentitiesResponse p1 = ListCloudFrontOriginAccessIdentitiesResponse
-    { _lcfoairCloudFrontOriginAccessIdentityList = p1
+-- * 'lcfoaiMarker'
+listCloudFrontOriginAccessIdentities
+    :: ListCloudFrontOriginAccessIdentities
+listCloudFrontOriginAccessIdentities =
+    ListCloudFrontOriginAccessIdentities'
+    { _lcfoaiMaxItems = Nothing
+    , _lcfoaiMarker = Nothing
     }
 
--- | The CloudFrontOriginAccessIdentityList type.
-lcfoairCloudFrontOriginAccessIdentityList :: Lens' ListCloudFrontOriginAccessIdentitiesResponse CloudFrontOriginAccessIdentityList
-lcfoairCloudFrontOriginAccessIdentityList =
-    lens _lcfoairCloudFrontOriginAccessIdentityList
-        (\s a -> s { _lcfoairCloudFrontOriginAccessIdentityList = a })
+-- | The maximum number of origin access identities you want in the response
+-- body.
+lcfoaiMaxItems :: Lens' ListCloudFrontOriginAccessIdentities (Maybe Text)
+lcfoaiMaxItems = lens _lcfoaiMaxItems (\ s a -> s{_lcfoaiMaxItems = a});
 
-instance ToPath ListCloudFrontOriginAccessIdentities where
-    toPath = const "/2014-11-06/origin-access-identity/cloudfront"
+-- | Use this when paginating results to indicate where to begin in your list
+-- of origin access identities. The results include identities in the list
+-- that occur after the marker. To get the next page of results, set the
+-- Marker to the value of the NextMarker from the current page\'s response
+-- (which is also the ID of the last identity on that page).
+lcfoaiMarker :: Lens' ListCloudFrontOriginAccessIdentities (Maybe Text)
+lcfoaiMarker = lens _lcfoaiMarker (\ s a -> s{_lcfoaiMarker = a});
 
-instance ToQuery ListCloudFrontOriginAccessIdentities where
-    toQuery ListCloudFrontOriginAccessIdentities{..} = mconcat
-        [ "Marker"   =? _lcfoaiMarker
-        , "MaxItems" =? _lcfoaiMaxItems
-        ]
+instance AWSRequest
+         ListCloudFrontOriginAccessIdentities where
+        type Sv ListCloudFrontOriginAccessIdentities =
+             CloudFront
+        type Rs ListCloudFrontOriginAccessIdentities =
+             ListCloudFrontOriginAccessIdentitiesResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListCloudFrontOriginAccessIdentitiesResponse' <$>
+                   (pure (fromEnum s)) <*> (parseXML x))
 
-instance ToHeaders ListCloudFrontOriginAccessIdentities
+instance ToHeaders
+         ListCloudFrontOriginAccessIdentities where
+        toHeaders = const mempty
 
-instance ToXMLRoot ListCloudFrontOriginAccessIdentities where
-    toXMLRoot = const (namespaced ns "ListCloudFrontOriginAccessIdentities" [])
+instance ToPath ListCloudFrontOriginAccessIdentities
+         where
+        toPath
+          = const
+              "/2015-04-17/origin-access-identity/cloudfront"
 
-instance ToXML ListCloudFrontOriginAccessIdentities
+instance ToQuery ListCloudFrontOriginAccessIdentities
+         where
+        toQuery ListCloudFrontOriginAccessIdentities'{..}
+          = mconcat
+              ["MaxItems" =: _lcfoaiMaxItems,
+               "Marker" =: _lcfoaiMarker]
 
-instance AWSRequest ListCloudFrontOriginAccessIdentities where
-    type Sv ListCloudFrontOriginAccessIdentities = CloudFront
-    type Rs ListCloudFrontOriginAccessIdentities = ListCloudFrontOriginAccessIdentitiesResponse
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'listCloudFrontOriginAccessIdentitiesResponse' smart constructor.
+data ListCloudFrontOriginAccessIdentitiesResponse = ListCloudFrontOriginAccessIdentitiesResponse'
+    { _lcfoairsStatus                             :: !Int
+    , _lcfoairsCloudFrontOriginAccessIdentityList :: !CloudFrontOriginAccessIdentityList
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = get
-    response = xmlResponse
+-- | Creates a value of 'ListCloudFrontOriginAccessIdentitiesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcfoairsStatus'
+--
+-- * 'lcfoairsCloudFrontOriginAccessIdentityList'
+listCloudFrontOriginAccessIdentitiesResponse
+    :: Int -- ^ 'lcfoairsStatus'
+    -> CloudFrontOriginAccessIdentityList -- ^ 'lcfoairsCloudFrontOriginAccessIdentityList'
+    -> ListCloudFrontOriginAccessIdentitiesResponse
+listCloudFrontOriginAccessIdentitiesResponse pStatus_ pCloudFrontOriginAccessIdentityList_ =
+    ListCloudFrontOriginAccessIdentitiesResponse'
+    { _lcfoairsStatus = pStatus_
+    , _lcfoairsCloudFrontOriginAccessIdentityList = pCloudFrontOriginAccessIdentityList_
+    }
 
-instance FromXML ListCloudFrontOriginAccessIdentitiesResponse where
-    parseXML x = ListCloudFrontOriginAccessIdentitiesResponse
-        <$> x .@  "CloudFrontOriginAccessIdentityList"
+-- | The response status code.
+lcfoairsStatus :: Lens' ListCloudFrontOriginAccessIdentitiesResponse Int
+lcfoairsStatus = lens _lcfoairsStatus (\ s a -> s{_lcfoairsStatus = a});
 
-instance AWSPager ListCloudFrontOriginAccessIdentities where
-    page rq rs
-        | stop (rs ^. lcfoairCloudFrontOriginAccessIdentityList . cfoailIsTruncated) = Nothing
-        | otherwise = Just $ rq
-            & lcfoaiMarker .~ rs ^. lcfoairCloudFrontOriginAccessIdentityList . cfoailNextMarker
+-- | The CloudFrontOriginAccessIdentityList type.
+lcfoairsCloudFrontOriginAccessIdentityList :: Lens' ListCloudFrontOriginAccessIdentitiesResponse CloudFrontOriginAccessIdentityList
+lcfoairsCloudFrontOriginAccessIdentityList = lens _lcfoairsCloudFrontOriginAccessIdentityList (\ s a -> s{_lcfoairsCloudFrontOriginAccessIdentityList = a});
diff --git a/gen/Network/AWS/CloudFront/ListDistributions.hs b/gen/Network/AWS/CloudFront/ListDistributions.hs
--- a/gen/Network/AWS/CloudFront/ListDistributions.hs
+++ b/gen/Network/AWS/CloudFront/ListDistributions.hs
@@ -1,134 +1,134 @@
-{-# 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.CloudFront.ListDistributions
--- 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.
-
--- | List distributions.
+-- List distributions.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/ListDistributions.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/ListDistributions.html AWS API Reference> for ListDistributions.
 module Network.AWS.CloudFront.ListDistributions
     (
-    -- * Request
-      ListDistributions
-    -- ** Request constructor
-    , listDistributions
-    -- ** Request lenses
-    , ldMarker
+    -- * Creating a Request
+      listDistributions
+    , ListDistributions
+    -- * Request Lenses
     , ldMaxItems
+    , ldMarker
 
-    -- * Response
-    , ListDistributionsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listDistributionsResponse
-    -- ** Response lenses
-    , ldrDistributionList
+    , ListDistributionsResponse
+    -- * Response Lenses
+    , ldrsStatus
+    , ldrsDistributionList
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data ListDistributions = ListDistributions
-    { _ldMarker   :: Maybe Text
-    , _ldMaxItems :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListDistributions' constructor.
+-- | The request to list your distributions.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listDistributions' smart constructor.
+data ListDistributions = ListDistributions'
+    { _ldMaxItems :: !(Maybe Text)
+    , _ldMarker   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListDistributions' with the minimum fields required to make a request.
 --
--- * 'ldMarker' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ldMaxItems' @::@ 'Maybe' 'Text'
+-- * 'ldMaxItems'
 --
-listDistributions :: ListDistributions
-listDistributions = ListDistributions
-    { _ldMarker   = Nothing
-    , _ldMaxItems = Nothing
+-- * 'ldMarker'
+listDistributions
+    :: ListDistributions
+listDistributions =
+    ListDistributions'
+    { _ldMaxItems = Nothing
+    , _ldMarker = Nothing
     }
 
--- | Use this when paginating results to indicate where to begin in your list of
--- distributions. The results include distributions in the list that occur after
--- the marker. To get the next page of results, set the Marker to the value of
--- the NextMarker from the current page's response (which is also the ID of the
--- last distribution on that page).
-ldMarker :: Lens' ListDistributions (Maybe Text)
-ldMarker = lens _ldMarker (\s a -> s { _ldMarker = a })
-
 -- | The maximum number of distributions you want in the response body.
 ldMaxItems :: Lens' ListDistributions (Maybe Text)
-ldMaxItems = lens _ldMaxItems (\s a -> s { _ldMaxItems = a })
+ldMaxItems = lens _ldMaxItems (\ s a -> s{_ldMaxItems = a});
 
-newtype ListDistributionsResponse = ListDistributionsResponse
-    { _ldrDistributionList :: DistributionList
-    } deriving (Eq, Read, Show)
+-- | Use this when paginating results to indicate where to begin in your list
+-- of distributions. The results include distributions in the list that
+-- occur after the marker. To get the next page of results, set the Marker
+-- to the value of the NextMarker from the current page\'s response (which
+-- is also the ID of the last distribution on that page).
+ldMarker :: Lens' ListDistributions (Maybe Text)
+ldMarker = lens _ldMarker (\ s a -> s{_ldMarker = a});
 
--- | 'ListDistributionsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ldrDistributionList' @::@ 'DistributionList'
---
-listDistributionsResponse :: DistributionList -- ^ 'ldrDistributionList'
-                          -> ListDistributionsResponse
-listDistributionsResponse p1 = ListDistributionsResponse
-    { _ldrDistributionList = p1
-    }
+instance AWSRequest ListDistributions where
+        type Sv ListDistributions = CloudFront
+        type Rs ListDistributions = ListDistributionsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListDistributionsResponse' <$>
+                   (pure (fromEnum s)) <*> (parseXML x))
 
--- | The DistributionList type.
-ldrDistributionList :: Lens' ListDistributionsResponse DistributionList
-ldrDistributionList =
-    lens _ldrDistributionList (\s a -> s { _ldrDistributionList = a })
+instance ToHeaders ListDistributions where
+        toHeaders = const mempty
 
 instance ToPath ListDistributions where
-    toPath = const "/2014-11-06/distribution"
+        toPath = const "/2015-04-17/distribution"
 
 instance ToQuery ListDistributions where
-    toQuery ListDistributions{..} = mconcat
-        [ "Marker"   =? _ldMarker
-        , "MaxItems" =? _ldMaxItems
-        ]
-
-instance ToHeaders ListDistributions
-
-instance ToXMLRoot ListDistributions where
-    toXMLRoot = const (namespaced ns "ListDistributions" [])
-
-instance ToXML ListDistributions
+        toQuery ListDistributions'{..}
+          = mconcat
+              ["MaxItems" =: _ldMaxItems, "Marker" =: _ldMarker]
 
-instance AWSRequest ListDistributions where
-    type Sv ListDistributions = CloudFront
-    type Rs ListDistributions = ListDistributionsResponse
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'listDistributionsResponse' smart constructor.
+data ListDistributionsResponse = ListDistributionsResponse'
+    { _ldrsStatus           :: !Int
+    , _ldrsDistributionList :: !DistributionList
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = get
-    response = xmlResponse
+-- | Creates a value of 'ListDistributionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ldrsStatus'
+--
+-- * 'ldrsDistributionList'
+listDistributionsResponse
+    :: Int -- ^ 'ldrsStatus'
+    -> DistributionList -- ^ 'ldrsDistributionList'
+    -> ListDistributionsResponse
+listDistributionsResponse pStatus_ pDistributionList_ =
+    ListDistributionsResponse'
+    { _ldrsStatus = pStatus_
+    , _ldrsDistributionList = pDistributionList_
+    }
 
-instance FromXML ListDistributionsResponse where
-    parseXML x = ListDistributionsResponse
-        <$> x .@  "DistributionList"
+-- | The response status code.
+ldrsStatus :: Lens' ListDistributionsResponse Int
+ldrsStatus = lens _ldrsStatus (\ s a -> s{_ldrsStatus = a});
 
-instance AWSPager ListDistributions where
-    page rq rs
-        | stop (rs ^. ldrDistributionList . dlIsTruncated) = Nothing
-        | otherwise = Just $ rq
-            & ldMarker .~ rs ^. ldrDistributionList . dlNextMarker
+-- | The DistributionList type.
+ldrsDistributionList :: Lens' ListDistributionsResponse DistributionList
+ldrsDistributionList = lens _ldrsDistributionList (\ s a -> s{_ldrsDistributionList = a});
diff --git a/gen/Network/AWS/CloudFront/ListInvalidations.hs b/gen/Network/AWS/CloudFront/ListInvalidations.hs
--- a/gen/Network/AWS/CloudFront/ListInvalidations.hs
+++ b/gen/Network/AWS/CloudFront/ListInvalidations.hs
@@ -1,150 +1,150 @@
-{-# 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.CloudFront.ListInvalidations
--- 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.
-
--- | List invalidation batches.
+-- List invalidation batches.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/ListInvalidations.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/ListInvalidations.html AWS API Reference> for ListInvalidations.
 module Network.AWS.CloudFront.ListInvalidations
     (
-    -- * Request
-      ListInvalidations
-    -- ** Request constructor
-    , listInvalidations
-    -- ** Request lenses
-    , liDistributionId
-    , liMarker
+    -- * Creating a Request
+      listInvalidations
+    , ListInvalidations
+    -- * Request Lenses
     , liMaxItems
+    , liMarker
+    , liDistributionId
 
-    -- * Response
-    , ListInvalidationsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listInvalidationsResponse
-    -- ** Response lenses
-    , lirInvalidationList
+    , ListInvalidationsResponse
+    -- * Response Lenses
+    , lirsStatus
+    , lirsInvalidationList
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data ListInvalidations = ListInvalidations
-    { _liDistributionId :: Text
-    , _liMarker         :: Maybe Text
-    , _liMaxItems       :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListInvalidations' constructor.
+-- | The request to list invalidations.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listInvalidations' smart constructor.
+data ListInvalidations = ListInvalidations'
+    { _liMaxItems       :: !(Maybe Text)
+    , _liMarker         :: !(Maybe Text)
+    , _liDistributionId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListInvalidations' with the minimum fields required to make a request.
 --
--- * 'liDistributionId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'liMarker' @::@ 'Maybe' 'Text'
+-- * 'liMaxItems'
 --
--- * 'liMaxItems' @::@ 'Maybe' 'Text'
+-- * 'liMarker'
 --
-listInvalidations :: Text -- ^ 'liDistributionId'
-                  -> ListInvalidations
-listInvalidations p1 = ListInvalidations
-    { _liDistributionId = p1
-    , _liMarker         = Nothing
-    , _liMaxItems       = Nothing
+-- * 'liDistributionId'
+listInvalidations
+    :: Text -- ^ 'liDistributionId'
+    -> ListInvalidations
+listInvalidations pDistributionId_ =
+    ListInvalidations'
+    { _liMaxItems = Nothing
+    , _liMarker = Nothing
+    , _liDistributionId = pDistributionId_
     }
 
--- | The distribution's id.
-liDistributionId :: Lens' ListInvalidations Text
-liDistributionId = lens _liDistributionId (\s a -> s { _liDistributionId = a })
+-- | The maximum number of invalidation batches you want in the response
+-- body.
+liMaxItems :: Lens' ListInvalidations (Maybe Text)
+liMaxItems = lens _liMaxItems (\ s a -> s{_liMaxItems = a});
 
--- | Use this parameter when paginating results to indicate where to begin in your
--- list of invalidation batches. Because the results are returned in decreasing
--- order from most recent to oldest, the most recent results are on the first
--- page, the second page will contain earlier results, and so on. To get the
--- next page of results, set the Marker to the value of the NextMarker from the
--- current page's response. This value is the same as the ID of the last
--- invalidation batch on that page.
+-- | Use this parameter when paginating results to indicate where to begin in
+-- your list of invalidation batches. Because the results are returned in
+-- decreasing order from most recent to oldest, the most recent results are
+-- on the first page, the second page will contain earlier results, and so
+-- on. To get the next page of results, set the Marker to the value of the
+-- NextMarker from the current page\'s response. This value is the same as
+-- the ID of the last invalidation batch on that page.
 liMarker :: Lens' ListInvalidations (Maybe Text)
-liMarker = lens _liMarker (\s a -> s { _liMarker = a })
-
--- | The maximum number of invalidation batches you want in the response body.
-liMaxItems :: Lens' ListInvalidations (Maybe Text)
-liMaxItems = lens _liMaxItems (\s a -> s { _liMaxItems = a })
+liMarker = lens _liMarker (\ s a -> s{_liMarker = a});
 
-newtype ListInvalidationsResponse = ListInvalidationsResponse
-    { _lirInvalidationList :: InvalidationList
-    } deriving (Eq, Read, Show)
+-- | The distribution\'s id.
+liDistributionId :: Lens' ListInvalidations Text
+liDistributionId = lens _liDistributionId (\ s a -> s{_liDistributionId = a});
 
--- | 'ListInvalidationsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lirInvalidationList' @::@ 'InvalidationList'
---
-listInvalidationsResponse :: InvalidationList -- ^ 'lirInvalidationList'
-                          -> ListInvalidationsResponse
-listInvalidationsResponse p1 = ListInvalidationsResponse
-    { _lirInvalidationList = p1
-    }
+instance AWSRequest ListInvalidations where
+        type Sv ListInvalidations = CloudFront
+        type Rs ListInvalidations = ListInvalidationsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListInvalidationsResponse' <$>
+                   (pure (fromEnum s)) <*> (parseXML x))
 
--- | Information about invalidation batches.
-lirInvalidationList :: Lens' ListInvalidationsResponse InvalidationList
-lirInvalidationList =
-    lens _lirInvalidationList (\s a -> s { _lirInvalidationList = a })
+instance ToHeaders ListInvalidations where
+        toHeaders = const mempty
 
 instance ToPath ListInvalidations where
-    toPath ListInvalidations{..} = mconcat
-        [ "/2014-11-06/distribution/"
-        , toText _liDistributionId
-        , "/invalidation"
-        ]
+        toPath ListInvalidations'{..}
+          = mconcat
+              ["/2015-04-17/distribution/", toBS _liDistributionId,
+               "/invalidation"]
 
 instance ToQuery ListInvalidations where
-    toQuery ListInvalidations{..} = mconcat
-        [ "Marker"   =? _liMarker
-        , "MaxItems" =? _liMaxItems
-        ]
-
-instance ToHeaders ListInvalidations
-
-instance ToXMLRoot ListInvalidations where
-    toXMLRoot = const (namespaced ns "ListInvalidations" [])
-
-instance ToXML ListInvalidations
+        toQuery ListInvalidations'{..}
+          = mconcat
+              ["MaxItems" =: _liMaxItems, "Marker" =: _liMarker]
 
-instance AWSRequest ListInvalidations where
-    type Sv ListInvalidations = CloudFront
-    type Rs ListInvalidations = ListInvalidationsResponse
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'listInvalidationsResponse' smart constructor.
+data ListInvalidationsResponse = ListInvalidationsResponse'
+    { _lirsStatus           :: !Int
+    , _lirsInvalidationList :: !InvalidationList
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = get
-    response = xmlResponse
+-- | Creates a value of 'ListInvalidationsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lirsStatus'
+--
+-- * 'lirsInvalidationList'
+listInvalidationsResponse
+    :: Int -- ^ 'lirsStatus'
+    -> InvalidationList -- ^ 'lirsInvalidationList'
+    -> ListInvalidationsResponse
+listInvalidationsResponse pStatus_ pInvalidationList_ =
+    ListInvalidationsResponse'
+    { _lirsStatus = pStatus_
+    , _lirsInvalidationList = pInvalidationList_
+    }
 
-instance FromXML ListInvalidationsResponse where
-    parseXML x = ListInvalidationsResponse
-        <$> x .@  "InvalidationList"
+-- | The response status code.
+lirsStatus :: Lens' ListInvalidationsResponse Int
+lirsStatus = lens _lirsStatus (\ s a -> s{_lirsStatus = a});
 
-instance AWSPager ListInvalidations where
-    page rq rs
-        | stop (rs ^. lirInvalidationList . ilIsTruncated) = Nothing
-        | otherwise = Just $ rq
-            & liMarker .~ rs ^. lirInvalidationList . ilNextMarker
+-- | Information about invalidation batches.
+lirsInvalidationList :: Lens' ListInvalidationsResponse InvalidationList
+lirsInvalidationList = lens _lirsInvalidationList (\ s a -> s{_lirsInvalidationList = a});
diff --git a/gen/Network/AWS/CloudFront/ListStreamingDistributions.hs b/gen/Network/AWS/CloudFront/ListStreamingDistributions.hs
--- a/gen/Network/AWS/CloudFront/ListStreamingDistributions.hs
+++ b/gen/Network/AWS/CloudFront/ListStreamingDistributions.hs
@@ -1,135 +1,136 @@
-{-# 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.CloudFront.ListStreamingDistributions
--- 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.
-
--- | List streaming distributions.
+-- List streaming distributions.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/ListStreamingDistributions.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/ListStreamingDistributions.html AWS API Reference> for ListStreamingDistributions.
 module Network.AWS.CloudFront.ListStreamingDistributions
     (
-    -- * Request
-      ListStreamingDistributions
-    -- ** Request constructor
-    , listStreamingDistributions
-    -- ** Request lenses
-    , lsdMarker
+    -- * Creating a Request
+      listStreamingDistributions
+    , ListStreamingDistributions
+    -- * Request Lenses
     , lsdMaxItems
+    , lsdMarker
 
-    -- * Response
-    , ListStreamingDistributionsResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , listStreamingDistributionsResponse
-    -- ** Response lenses
-    , lsdrStreamingDistributionList
+    , ListStreamingDistributionsResponse
+    -- * Response Lenses
+    , lsdrsStatus
+    , lsdrsStreamingDistributionList
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data ListStreamingDistributions = ListStreamingDistributions
-    { _lsdMarker   :: Maybe Text
-    , _lsdMaxItems :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'ListStreamingDistributions' constructor.
+-- | The request to list your streaming distributions.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'listStreamingDistributions' smart constructor.
+data ListStreamingDistributions = ListStreamingDistributions'
+    { _lsdMaxItems :: !(Maybe Text)
+    , _lsdMarker   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListStreamingDistributions' with the minimum fields required to make a request.
 --
--- * 'lsdMarker' @::@ 'Maybe' 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lsdMaxItems' @::@ 'Maybe' 'Text'
+-- * 'lsdMaxItems'
 --
-listStreamingDistributions :: ListStreamingDistributions
-listStreamingDistributions = ListStreamingDistributions
-    { _lsdMarker   = Nothing
-    , _lsdMaxItems = Nothing
+-- * 'lsdMarker'
+listStreamingDistributions
+    :: ListStreamingDistributions
+listStreamingDistributions =
+    ListStreamingDistributions'
+    { _lsdMaxItems = Nothing
+    , _lsdMarker = Nothing
     }
 
--- | Use this when paginating results to indicate where to begin in your list of
--- streaming distributions. The results include distributions in the list that
--- occur after the marker. To get the next page of results, set the Marker to
--- the value of the NextMarker from the current page's response (which is also
--- the ID of the last distribution on that page).
-lsdMarker :: Lens' ListStreamingDistributions (Maybe Text)
-lsdMarker = lens _lsdMarker (\s a -> s { _lsdMarker = a })
-
--- | The maximum number of streaming distributions you want in the response body.
+-- | The maximum number of streaming distributions you want in the response
+-- body.
 lsdMaxItems :: Lens' ListStreamingDistributions (Maybe Text)
-lsdMaxItems = lens _lsdMaxItems (\s a -> s { _lsdMaxItems = a })
+lsdMaxItems = lens _lsdMaxItems (\ s a -> s{_lsdMaxItems = a});
 
-newtype ListStreamingDistributionsResponse = ListStreamingDistributionsResponse
-    { _lsdrStreamingDistributionList :: StreamingDistributionList
-    } deriving (Eq, Read, Show)
+-- | Use this when paginating results to indicate where to begin in your list
+-- of streaming distributions. The results include distributions in the
+-- list that occur after the marker. To get the next page of results, set
+-- the Marker to the value of the NextMarker from the current page\'s
+-- response (which is also the ID of the last distribution on that page).
+lsdMarker :: Lens' ListStreamingDistributions (Maybe Text)
+lsdMarker = lens _lsdMarker (\ s a -> s{_lsdMarker = a});
 
--- | 'ListStreamingDistributionsResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lsdrStreamingDistributionList' @::@ 'StreamingDistributionList'
---
-listStreamingDistributionsResponse :: StreamingDistributionList -- ^ 'lsdrStreamingDistributionList'
-                                   -> ListStreamingDistributionsResponse
-listStreamingDistributionsResponse p1 = ListStreamingDistributionsResponse
-    { _lsdrStreamingDistributionList = p1
-    }
+instance AWSRequest ListStreamingDistributions where
+        type Sv ListStreamingDistributions = CloudFront
+        type Rs ListStreamingDistributions =
+             ListStreamingDistributionsResponse
+        request = get
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListStreamingDistributionsResponse' <$>
+                   (pure (fromEnum s)) <*> (parseXML x))
 
--- | The StreamingDistributionList type.
-lsdrStreamingDistributionList :: Lens' ListStreamingDistributionsResponse StreamingDistributionList
-lsdrStreamingDistributionList =
-    lens _lsdrStreamingDistributionList
-        (\s a -> s { _lsdrStreamingDistributionList = a })
+instance ToHeaders ListStreamingDistributions where
+        toHeaders = const mempty
 
 instance ToPath ListStreamingDistributions where
-    toPath = const "/2014-11-06/streaming-distribution"
+        toPath = const "/2015-04-17/streaming-distribution"
 
 instance ToQuery ListStreamingDistributions where
-    toQuery ListStreamingDistributions{..} = mconcat
-        [ "Marker"   =? _lsdMarker
-        , "MaxItems" =? _lsdMaxItems
-        ]
-
-instance ToHeaders ListStreamingDistributions
-
-instance ToXMLRoot ListStreamingDistributions where
-    toXMLRoot = const (namespaced ns "ListStreamingDistributions" [])
-
-instance ToXML ListStreamingDistributions
+        toQuery ListStreamingDistributions'{..}
+          = mconcat
+              ["MaxItems" =: _lsdMaxItems, "Marker" =: _lsdMarker]
 
-instance AWSRequest ListStreamingDistributions where
-    type Sv ListStreamingDistributions = CloudFront
-    type Rs ListStreamingDistributions = ListStreamingDistributionsResponse
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'listStreamingDistributionsResponse' smart constructor.
+data ListStreamingDistributionsResponse = ListStreamingDistributionsResponse'
+    { _lsdrsStatus                    :: !Int
+    , _lsdrsStreamingDistributionList :: !StreamingDistributionList
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-    request  = get
-    response = xmlResponse
+-- | Creates a value of 'ListStreamingDistributionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsdrsStatus'
+--
+-- * 'lsdrsStreamingDistributionList'
+listStreamingDistributionsResponse
+    :: Int -- ^ 'lsdrsStatus'
+    -> StreamingDistributionList -- ^ 'lsdrsStreamingDistributionList'
+    -> ListStreamingDistributionsResponse
+listStreamingDistributionsResponse pStatus_ pStreamingDistributionList_ =
+    ListStreamingDistributionsResponse'
+    { _lsdrsStatus = pStatus_
+    , _lsdrsStreamingDistributionList = pStreamingDistributionList_
+    }
 
-instance FromXML ListStreamingDistributionsResponse where
-    parseXML x = ListStreamingDistributionsResponse
-        <$> x .@  "StreamingDistributionList"
+-- | The response status code.
+lsdrsStatus :: Lens' ListStreamingDistributionsResponse Int
+lsdrsStatus = lens _lsdrsStatus (\ s a -> s{_lsdrsStatus = a});
 
-instance AWSPager ListStreamingDistributions where
-    page rq rs
-        | stop (rs ^. lsdrStreamingDistributionList . sdlIsTruncated) = Nothing
-        | otherwise = Just $ rq
-            & lsdMarker .~ rs ^. lsdrStreamingDistributionList . sdlNextMarker
+-- | The StreamingDistributionList type.
+lsdrsStreamingDistributionList :: Lens' ListStreamingDistributionsResponse StreamingDistributionList
+lsdrsStreamingDistributionList = lens _lsdrsStreamingDistributionList (\ s a -> s{_lsdrsStreamingDistributionList = a});
diff --git a/gen/Network/AWS/CloudFront/Types.hs b/gen/Network/AWS/CloudFront/Types.hs
--- a/gen/Network/AWS/CloudFront/Types.hs
+++ b/gen/Network/AWS/CloudFront/Types.hs
@@ -1,3799 +1,743 @@
-{-# 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.CloudFront.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.CloudFront.Types
-    (
-    -- * Service
-      CloudFront
-    -- ** Error
-    , RESTError
-    -- ** XML
-    , ns
-
-    -- * CloudFrontOriginAccessIdentityList
-    , CloudFrontOriginAccessIdentityList
-    , cloudFrontOriginAccessIdentityList
-    , cfoailIsTruncated
-    , cfoailItems
-    , cfoailMarker
-    , cfoailMaxItems
-    , cfoailNextMarker
-    , cfoailQuantity
-
-    -- * Invalidation
-    , Invalidation
-    , invalidation
-    , iCreateTime
-    , iId
-    , iInvalidationBatch
-    , iStatus
-
-    -- * SSLSupportMethod
-    , SSLSupportMethod (..)
-
-    -- * AllowedMethods
-    , AllowedMethods
-    , allowedMethods
-    , amCachedMethods
-    , amItems
-    , amQuantity
-
-    -- * CloudFrontOriginAccessIdentityConfig
-    , CloudFrontOriginAccessIdentityConfig
-    , cloudFrontOriginAccessIdentityConfig
-    , cfoaicCallerReference
-    , cfoaicComment
-
-    -- * Origin
-    , Origin
-    , origin
-    , oCustomOriginConfig
-    , oDomainName
-    , oId
-    , oOriginPath
-    , oS3OriginConfig
-
-    -- * ViewerProtocolPolicy
-    , ViewerProtocolPolicy (..)
-
-    -- * StreamingDistributionList
-    , StreamingDistributionList
-    , streamingDistributionList
-    , sdlIsTruncated
-    , sdlItems
-    , sdlMarker
-    , sdlMaxItems
-    , sdlNextMarker
-    , sdlQuantity
-
-    -- * StreamingDistributionConfig
-    , StreamingDistributionConfig
-    , streamingDistributionConfig
-    , sdcAliases
-    , sdcCallerReference
-    , sdcComment
-    , sdcEnabled
-    , sdcLogging
-    , sdcPriceClass
-    , sdcS3Origin
-    , sdcTrustedSigners
-
-    -- * Signer
-    , Signer
-    , signer
-    , sAwsAccountNumber
-    , sKeyPairIds
-
-    -- * CookiePreference
-    , CookiePreference
-    , cookiePreference
-    , cpForward
-    , cpWhitelistedNames
-
-    -- * OriginProtocolPolicy
-    , OriginProtocolPolicy (..)
-
-    -- * Distribution
-    , Distribution
-    , distribution
-    , dActiveTrustedSigners
-    , dDistributionConfig
-    , dDomainName
-    , dId
-    , dInProgressInvalidationBatches
-    , dLastModifiedTime
-    , dStatus
-
-    -- * CloudFrontOriginAccessIdentitySummary
-    , CloudFrontOriginAccessIdentitySummary
-    , cloudFrontOriginAccessIdentitySummary
-    , cfoaisComment
-    , cfoaisId
-    , cfoaisS3CanonicalUserId
-
-    -- * StreamingDistributionSummary
-    , StreamingDistributionSummary
-    , streamingDistributionSummary
-    , sdsAliases
-    , sdsComment
-    , sdsDomainName
-    , sdsEnabled
-    , sdsId
-    , sdsLastModifiedTime
-    , sdsPriceClass
-    , sdsS3Origin
-    , sdsStatus
-    , sdsTrustedSigners
-
-    -- * CustomOriginConfig
-    , CustomOriginConfig
-    , customOriginConfig
-    , cocHTTPPort
-    , cocHTTPSPort
-    , cocOriginProtocolPolicy
-
-    -- * Aliases
-    , Aliases
-    , aliases
-    , aItems
-    , aQuantity
-
-    -- * InvalidationBatch
-    , InvalidationBatch
-    , invalidationBatch
-    , ibCallerReference
-    , ibPaths
-
-    -- * InvalidationSummary
-    , InvalidationSummary
-    , invalidationSummary
-    , isCreateTime
-    , isId
-    , isStatus
-
-    -- * DistributionConfig
-    , DistributionConfig
-    , distributionConfig
-    , dcAliases
-    , dcCacheBehaviors
-    , dcCallerReference
-    , dcComment
-    , dcCustomErrorResponses
-    , dcDefaultCacheBehavior
-    , dcDefaultRootObject
-    , dcEnabled
-    , dcLogging
-    , dcOrigins
-    , dcPriceClass
-    , dcRestrictions
-    , dcViewerCertificate
-
-    -- * CacheBehavior
-    , CacheBehavior
-    , cacheBehavior
-    , cbAllowedMethods
-    , cbForwardedValues
-    , cbMinTTL
-    , cbPathPattern
-    , cbSmoothStreaming
-    , cbTargetOriginId
-    , cbTrustedSigners
-    , cbViewerProtocolPolicy
-
-    -- * DistributionList
-    , DistributionList
-    , distributionList
-    , dlIsTruncated
-    , dlItems
-    , dlMarker
-    , dlMaxItems
-    , dlNextMarker
-    , dlQuantity
-
-    -- * KeyPairIds
-    , KeyPairIds
-    , keyPairIds
-    , kpiItems
-    , kpiQuantity
-
-    -- * PriceClass
-    , PriceClass (..)
-
-    -- * CustomErrorResponses
-    , CustomErrorResponses
-    , customErrorResponses
-    , cerItems
-    , cerQuantity
-
-    -- * S3OriginConfig
-    , S3OriginConfig
-    , s3OriginConfig
-    , socOriginAccessIdentity
-
-    -- * GeoRestriction
-    , GeoRestriction
-    , geoRestriction
-    , grItems
-    , grQuantity
-    , grRestrictionType
-
-    -- * S3Origin
-    , S3Origin
-    , s3Origin
-    , soDomainName
-    , soOriginAccessIdentity
-
-    -- * Headers
-    , Headers
-    , headers
-    , hItems
-    , hQuantity
-
-    -- * CachedMethods
-    , CachedMethods
-    , cachedMethods
-    , cmItems
-    , cmQuantity
-
-    -- * ViewerCertificate
-    , ViewerCertificate
-    , viewerCertificate
-    , vcCloudFrontDefaultCertificate
-    , vcIAMCertificateId
-    , vcMinimumProtocolVersion
-    , vcSSLSupportMethod
-
-    -- * Restrictions
-    , Restrictions
-    , restrictions
-    , rGeoRestriction
-
-    -- * Origins
-    , Origins
-    , origins
-    , oItems
-    , oQuantity
-
-    -- * Method
-    , Method (..)
-
-    -- * MinimumProtocolVersion
-    , MinimumProtocolVersion (..)
-
-    -- * ForwardedValues
-    , ForwardedValues
-    , forwardedValues
-    , fvCookies
-    , fvHeaders
-    , fvQueryString
-
-    -- * TrustedSigners
-    , TrustedSigners
-    , trustedSigners
-    , tsEnabled
-    , tsItems
-    , tsQuantity
-
-    -- * ItemSelection
-    , ItemSelection (..)
-
-    -- * StreamingLoggingConfig
-    , StreamingLoggingConfig
-    , streamingLoggingConfig
-    , slcBucket
-    , slcEnabled
-    , slcPrefix
-
-    -- * CookieNames
-    , CookieNames
-    , cookieNames
-    , cnItems
-    , cnQuantity
-
-    -- * CustomErrorResponse
-    , CustomErrorResponse
-    , customErrorResponse
-    , cerErrorCachingMinTTL
-    , cerErrorCode
-    , cerResponseCode
-    , cerResponsePagePath
-
-    -- * CacheBehaviors
-    , CacheBehaviors
-    , cacheBehaviors
-    , cbItems
-    , cbQuantity
-
-    -- * DefaultCacheBehavior
-    , DefaultCacheBehavior
-    , defaultCacheBehavior
-    , dcbAllowedMethods
-    , dcbForwardedValues
-    , dcbMinTTL
-    , dcbSmoothStreaming
-    , dcbTargetOriginId
-    , dcbTrustedSigners
-    , dcbViewerProtocolPolicy
-
-    -- * InvalidationList
-    , InvalidationList
-    , invalidationList
-    , ilIsTruncated
-    , ilItems
-    , ilMarker
-    , ilMaxItems
-    , ilNextMarker
-    , ilQuantity
-
-    -- * StreamingDistribution
-    , StreamingDistribution
-    , streamingDistribution
-    , sdActiveTrustedSigners
-    , sdDomainName
-    , sdId
-    , sdLastModifiedTime
-    , sdStatus
-    , sdStreamingDistributionConfig
-
-    -- * Paths
-    , Paths
-    , paths
-    , pItems
-    , pQuantity
-
-    -- * CloudFrontOriginAccessIdentity
-    , CloudFrontOriginAccessIdentity
-    , cloudFrontOriginAccessIdentity
-    , cfoaiCloudFrontOriginAccessIdentityConfig
-    , cfoaiId
-    , cfoaiS3CanonicalUserId
-
-    -- * ActiveTrustedSigners
-    , ActiveTrustedSigners
-    , activeTrustedSigners
-    , atsEnabled
-    , atsItems
-    , atsQuantity
-
-    -- * DistributionSummary
-    , DistributionSummary
-    , distributionSummary
-    , dsAliases
-    , dsCacheBehaviors
-    , dsComment
-    , dsCustomErrorResponses
-    , dsDefaultCacheBehavior
-    , dsDomainName
-    , dsEnabled
-    , dsId
-    , dsLastModifiedTime
-    , dsOrigins
-    , dsPriceClass
-    , dsRestrictions
-    , dsStatus
-    , dsViewerCertificate
-
-    -- * GeoRestrictionType
-    , GeoRestrictionType (..)
-
-    -- * LoggingConfig
-    , LoggingConfig
-    , loggingConfig
-    , lcBucket
-    , lcEnabled
-    , lcIncludeCookies
-    , lcPrefix
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Signing
-import qualified GHC.Exts
-
--- | Version @2014-11-06@ of the Amazon CloudFront service.
-data CloudFront
-
-instance AWSService CloudFront where
-    type Sg CloudFront = V4
-    type Er CloudFront = RESTError
-
-    service = service'
-      where
-        service' :: Service CloudFront
-        service' = Service
-            { _svcAbbrev       = "CloudFront"
-            , _svcPrefix       = "cloudfront"
-            , _svcVersion      = "2014-11-06"
-            , _svcTargetPrefix = Nothing
-            , _svcJSONVersion  = Nothing
-            , _svcHandle       = handle
-            , _svcRetry        = retry
-            }
-
-        handle :: Status
-               -> Maybe (LazyByteString -> ServiceError RESTError)
-        handle = restError statusSuccess service'
-
-        retry :: Retry CloudFront
-        retry = Exponential
-            { _retryBase     = 0.05
-            , _retryGrowth   = 2
-            , _retryAttempts = 5
-            , _retryCheck    = check
-            }
-
-        check :: Status
-              -> RESTError
-              -> Bool
-        check (statusCode -> s) (awsErrorCode -> e)
-            | s == 500  = True -- General Server Error
-            | s == 509  = True -- Limit Exceeded
-            | s == 503  = True -- Service Unavailable
-            | otherwise = False
-
-ns :: Text
-ns = "http://cloudfront.amazonaws.com/doc/2014-11-06/"
-{-# INLINE ns #-}
-
-data CloudFrontOriginAccessIdentityList = CloudFrontOriginAccessIdentityList
-    { _cfoailIsTruncated :: Bool
-    , _cfoailItems       :: List "CloudFrontOriginAccessIdentitySummary" CloudFrontOriginAccessIdentitySummary
-    , _cfoailMarker      :: Text
-    , _cfoailMaxItems    :: Int
-    , _cfoailNextMarker  :: Maybe Text
-    , _cfoailQuantity    :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'CloudFrontOriginAccessIdentityList' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cfoailIsTruncated' @::@ 'Bool'
---
--- * 'cfoailItems' @::@ ['CloudFrontOriginAccessIdentitySummary']
---
--- * 'cfoailMarker' @::@ 'Text'
---
--- * 'cfoailMaxItems' @::@ 'Int'
---
--- * 'cfoailNextMarker' @::@ 'Maybe' 'Text'
---
--- * 'cfoailQuantity' @::@ 'Int'
---
-cloudFrontOriginAccessIdentityList :: Text -- ^ 'cfoailMarker'
-                                   -> Int -- ^ 'cfoailMaxItems'
-                                   -> Bool -- ^ 'cfoailIsTruncated'
-                                   -> Int -- ^ 'cfoailQuantity'
-                                   -> CloudFrontOriginAccessIdentityList
-cloudFrontOriginAccessIdentityList p1 p2 p3 p4 = CloudFrontOriginAccessIdentityList
-    { _cfoailMarker      = p1
-    , _cfoailMaxItems    = p2
-    , _cfoailIsTruncated = p3
-    , _cfoailQuantity    = p4
-    , _cfoailNextMarker  = Nothing
-    , _cfoailItems       = mempty
-    }
-
--- | A flag that indicates whether more origin access identities remain to be
--- listed. If your results were truncated, you can make a follow-up pagination
--- request using the Marker request parameter to retrieve more items in the list.
-cfoailIsTruncated :: Lens' CloudFrontOriginAccessIdentityList Bool
-cfoailIsTruncated =
-    lens _cfoailIsTruncated (\s a -> s { _cfoailIsTruncated = a })
-
--- | A complex type that contains one CloudFrontOriginAccessIdentitySummary
--- element for each origin access identity that was created by the current AWS
--- account.
-cfoailItems :: Lens' CloudFrontOriginAccessIdentityList [CloudFrontOriginAccessIdentitySummary]
-cfoailItems = lens _cfoailItems (\s a -> s { _cfoailItems = a }) . _List
-
--- | The value you provided for the Marker request parameter.
-cfoailMarker :: Lens' CloudFrontOriginAccessIdentityList Text
-cfoailMarker = lens _cfoailMarker (\s a -> s { _cfoailMarker = a })
-
--- | The value you provided for the MaxItems request parameter.
-cfoailMaxItems :: Lens' CloudFrontOriginAccessIdentityList Int
-cfoailMaxItems = lens _cfoailMaxItems (\s a -> s { _cfoailMaxItems = a })
-
--- | If IsTruncated is true, this element is present and contains the value you
--- can use for the Marker request parameter to continue listing your origin
--- access identities where they left off.
-cfoailNextMarker :: Lens' CloudFrontOriginAccessIdentityList (Maybe Text)
-cfoailNextMarker = lens _cfoailNextMarker (\s a -> s { _cfoailNextMarker = a })
-
--- | The number of CloudFront origin access identities that were created by the
--- current AWS account.
-cfoailQuantity :: Lens' CloudFrontOriginAccessIdentityList Int
-cfoailQuantity = lens _cfoailQuantity (\s a -> s { _cfoailQuantity = a })
-
-instance FromXML CloudFrontOriginAccessIdentityList where
-    parseXML x = CloudFrontOriginAccessIdentityList
-        <$> x .@  "IsTruncated"
-        <*> x .@? "Items" .!@ mempty
-        <*> x .@  "Marker"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextMarker"
-        <*> x .@  "Quantity"
-
-instance ToXML CloudFrontOriginAccessIdentityList where
-    toXML CloudFrontOriginAccessIdentityList{..} = nodes "CloudFrontOriginAccessIdentityList"
-        [ "Marker"      =@ _cfoailMarker
-        , "NextMarker"  =@ _cfoailNextMarker
-        , "MaxItems"    =@ _cfoailMaxItems
-        , "IsTruncated" =@ _cfoailIsTruncated
-        , "Quantity"    =@ _cfoailQuantity
-        , "Items"       =@ _cfoailItems
-        ]
-
-data Invalidation = Invalidation
-    { _iCreateTime        :: ISO8601
-    , _iId                :: Text
-    , _iInvalidationBatch :: InvalidationBatch
-    , _iStatus            :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'Invalidation' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'iCreateTime' @::@ 'UTCTime'
---
--- * 'iId' @::@ 'Text'
---
--- * 'iInvalidationBatch' @::@ 'InvalidationBatch'
---
--- * 'iStatus' @::@ 'Text'
---
-invalidation :: Text -- ^ 'iId'
-             -> Text -- ^ 'iStatus'
-             -> UTCTime -- ^ 'iCreateTime'
-             -> InvalidationBatch -- ^ 'iInvalidationBatch'
-             -> Invalidation
-invalidation p1 p2 p3 p4 = Invalidation
-    { _iId                = p1
-    , _iStatus            = p2
-    , _iCreateTime        = withIso _Time (const id) p3
-    , _iInvalidationBatch = p4
-    }
-
--- | The date and time the invalidation request was first made.
-iCreateTime :: Lens' Invalidation UTCTime
-iCreateTime = lens _iCreateTime (\s a -> s { _iCreateTime = a }) . _Time
-
--- | The identifier for the invalidation request. For example: IDFDVBD632BHDS5.
-iId :: Lens' Invalidation Text
-iId = lens _iId (\s a -> s { _iId = a })
-
--- | The current invalidation information for the batch request.
-iInvalidationBatch :: Lens' Invalidation InvalidationBatch
-iInvalidationBatch =
-    lens _iInvalidationBatch (\s a -> s { _iInvalidationBatch = a })
-
--- | The status of the invalidation request. When the invalidation batch is
--- finished, the status is Completed.
-iStatus :: Lens' Invalidation Text
-iStatus = lens _iStatus (\s a -> s { _iStatus = a })
-
-instance FromXML Invalidation where
-    parseXML x = Invalidation
-        <$> x .@  "CreateTime"
-        <*> x .@  "Id"
-        <*> x .@  "InvalidationBatch"
-        <*> x .@  "Status"
-
-instance ToXMLRoot Invalidation where
-    toXMLRoot Invalidation{..} = namespaced ns "Invalidation"
-        [ "Id"                =@ _iId
-        , "Status"            =@ _iStatus
-        , "CreateTime"        =@ _iCreateTime
-        , "InvalidationBatch" =@ _iInvalidationBatch
-        ]
-
-instance ToXML Invalidation
-
-data SSLSupportMethod
-    = SniOnly -- ^ sni-only
-    | Vip     -- ^ vip
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable SSLSupportMethod
-
-instance FromText SSLSupportMethod where
-    parser = takeLowerText >>= \case
-        "sni-only" -> pure SniOnly
-        "vip"      -> pure Vip
-        e          -> fail $
-            "Failure parsing SSLSupportMethod from " ++ show e
-
-instance ToText SSLSupportMethod where
-    toText = \case
-        SniOnly -> "sni-only"
-        Vip     -> "vip"
-
-instance ToByteString SSLSupportMethod
-instance ToHeader     SSLSupportMethod
-instance ToQuery      SSLSupportMethod
-
-instance FromXML SSLSupportMethod where
-    parseXML = parseXMLText "SSLSupportMethod"
-
-instance ToXML SSLSupportMethod where
-    toXML = toXMLText
-
-data AllowedMethods = AllowedMethods
-    { _amCachedMethods :: Maybe CachedMethods
-    , _amItems         :: List "Method" Method
-    , _amQuantity      :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'AllowedMethods' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'amCachedMethods' @::@ 'Maybe' 'CachedMethods'
---
--- * 'amItems' @::@ ['Method']
---
--- * 'amQuantity' @::@ 'Int'
---
-allowedMethods :: Int -- ^ 'amQuantity'
-               -> AllowedMethods
-allowedMethods p1 = AllowedMethods
-    { _amQuantity      = p1
-    , _amItems         = mempty
-    , _amCachedMethods = Nothing
-    }
-
-amCachedMethods :: Lens' AllowedMethods (Maybe CachedMethods)
-amCachedMethods = lens _amCachedMethods (\s a -> s { _amCachedMethods = a })
-
--- | A complex type that contains the HTTP methods that you want CloudFront to
--- process and forward to your origin.
-amItems :: Lens' AllowedMethods [Method]
-amItems = lens _amItems (\s a -> s { _amItems = a }) . _List
-
--- | The number of HTTP methods that you want CloudFront to forward to your
--- origin. Valid values are 2 (for GET and HEAD requests), 3 (for GET, HEAD and
--- OPTIONS requests) and 7 (for GET, HEAD, OPTIONS, PUT, PATCH, POST, and DELETE
--- requests).
-amQuantity :: Lens' AllowedMethods Int
-amQuantity = lens _amQuantity (\s a -> s { _amQuantity = a })
-
-instance FromXML AllowedMethods where
-    parseXML x = AllowedMethods
-        <$> x .@? "CachedMethods"
-        <*> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML AllowedMethods where
-    toXML AllowedMethods{..} = nodes "AllowedMethods"
-        [ "Quantity"      =@ _amQuantity
-        , "Items"         =@ _amItems
-        , "CachedMethods" =@ _amCachedMethods
-        ]
-
-data CloudFrontOriginAccessIdentityConfig = CloudFrontOriginAccessIdentityConfig
-    { _cfoaicCallerReference :: Text
-    , _cfoaicComment         :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CloudFrontOriginAccessIdentityConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cfoaicCallerReference' @::@ 'Text'
---
--- * 'cfoaicComment' @::@ 'Text'
---
-cloudFrontOriginAccessIdentityConfig :: Text -- ^ 'cfoaicCallerReference'
-                                     -> Text -- ^ 'cfoaicComment'
-                                     -> CloudFrontOriginAccessIdentityConfig
-cloudFrontOriginAccessIdentityConfig p1 p2 = CloudFrontOriginAccessIdentityConfig
-    { _cfoaicCallerReference = p1
-    , _cfoaicComment         = p2
-    }
-
--- | A unique number that ensures the request can't be replayed. If the
--- CallerReference is new (no matter the content of the
--- CloudFrontOriginAccessIdentityConfig object), a new origin access identity is
--- created. If the CallerReference is a value you already sent in a previous
--- request to create an identity, and the content of the
--- CloudFrontOriginAccessIdentityConfig is identical to the original request
--- (ignoring white space), the response includes the same information returned
--- to the original request. If the CallerReference is a value you already sent
--- in a previous request to create an identity but the content of the
--- CloudFrontOriginAccessIdentityConfig is different from the original request,
--- CloudFront returns a CloudFrontOriginAccessIdentityAlreadyExists error.
-cfoaicCallerReference :: Lens' CloudFrontOriginAccessIdentityConfig Text
-cfoaicCallerReference =
-    lens _cfoaicCallerReference (\s a -> s { _cfoaicCallerReference = a })
-
--- | Any comments you want to include about the origin access identity.
-cfoaicComment :: Lens' CloudFrontOriginAccessIdentityConfig Text
-cfoaicComment = lens _cfoaicComment (\s a -> s { _cfoaicComment = a })
-
-instance FromXML CloudFrontOriginAccessIdentityConfig where
-    parseXML x = CloudFrontOriginAccessIdentityConfig
-        <$> x .@  "CallerReference"
-        <*> x .@  "Comment"
-
-instance ToXMLRoot CloudFrontOriginAccessIdentityConfig where
-    toXMLRoot CloudFrontOriginAccessIdentityConfig{..} = namespaced ns "CloudFrontOriginAccessIdentityConfig"
-        [ "CallerReference" =@ _cfoaicCallerReference
-        , "Comment"         =@ _cfoaicComment
-        ]
-
-instance ToXML CloudFrontOriginAccessIdentityConfig
-
-data Origin = Origin
-    { _oCustomOriginConfig :: Maybe CustomOriginConfig
-    , _oDomainName         :: Text
-    , _oId                 :: Text
-    , _oOriginPath         :: Maybe Text
-    , _oS3OriginConfig     :: Maybe S3OriginConfig
-    } deriving (Eq, Read, Show)
-
--- | 'Origin' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'oCustomOriginConfig' @::@ 'Maybe' 'CustomOriginConfig'
---
--- * 'oDomainName' @::@ 'Text'
---
--- * 'oId' @::@ 'Text'
---
--- * 'oOriginPath' @::@ 'Maybe' 'Text'
---
--- * 'oS3OriginConfig' @::@ 'Maybe' 'S3OriginConfig'
---
-origin :: Text -- ^ 'oId'
-       -> Text -- ^ 'oDomainName'
-       -> Origin
-origin p1 p2 = Origin
-    { _oId                 = p1
-    , _oDomainName         = p2
-    , _oOriginPath         = Nothing
-    , _oS3OriginConfig     = Nothing
-    , _oCustomOriginConfig = Nothing
-    }
-
--- | A complex type that contains information about a custom origin. If the origin
--- is an Amazon S3 bucket, use the S3OriginConfig element instead.
-oCustomOriginConfig :: Lens' Origin (Maybe CustomOriginConfig)
-oCustomOriginConfig =
-    lens _oCustomOriginConfig (\s a -> s { _oCustomOriginConfig = a })
-
--- | Amazon S3 origins: The DNS name of the Amazon S3 bucket from which you want
--- CloudFront to get objects for this origin, for example,
--- myawsbucket.s3.amazonaws.com. Custom origins: The DNS domain name for the
--- HTTP server from which you want CloudFront to get objects for this origin,
--- for example, www.example.com.
-oDomainName :: Lens' Origin Text
-oDomainName = lens _oDomainName (\s a -> s { _oDomainName = a })
-
--- | A unique identifier for the origin. The value of Id must be unique within the
--- distribution. You use the value of Id when you create a cache behavior. The
--- Id identifies the origin that CloudFront routes a request to when the request
--- matches the path pattern for that cache behavior.
-oId :: Lens' Origin Text
-oId = lens _oId (\s a -> s { _oId = a })
-
--- | An optional element that causes CloudFront to request your content from a
--- directory in your Amazon S3 bucket or your custom origin. When you include
--- the OriginPath element, specify the directory name, beginning with a /.
--- CloudFront appends the directory name to the value of DomainName.
-oOriginPath :: Lens' Origin (Maybe Text)
-oOriginPath = lens _oOriginPath (\s a -> s { _oOriginPath = a })
-
--- | A complex type that contains information about the Amazon S3 origin. If the
--- origin is a custom origin, use the CustomOriginConfig element instead.
-oS3OriginConfig :: Lens' Origin (Maybe S3OriginConfig)
-oS3OriginConfig = lens _oS3OriginConfig (\s a -> s { _oS3OriginConfig = a })
-
-instance FromXML Origin where
-    parseXML x = Origin
-        <$> x .@? "CustomOriginConfig"
-        <*> x .@  "DomainName"
-        <*> x .@  "Id"
-        <*> x .@? "OriginPath"
-        <*> x .@? "S3OriginConfig"
-
-instance ToXML Origin where
-    toXML Origin{..} = nodes "Origin"
-        [ "Id"                 =@ _oId
-        , "DomainName"         =@ _oDomainName
-        , "OriginPath"         =@ _oOriginPath
-        , "S3OriginConfig"     =@ _oS3OriginConfig
-        , "CustomOriginConfig" =@ _oCustomOriginConfig
-        ]
-
-data ViewerProtocolPolicy
-    = AllowAll        -- ^ allow-all
-    | HttpsOnly       -- ^ https-only
-    | RedirectToHttps -- ^ redirect-to-https
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ViewerProtocolPolicy
-
-instance FromText ViewerProtocolPolicy where
-    parser = takeLowerText >>= \case
-        "allow-all"         -> pure AllowAll
-        "https-only"        -> pure HttpsOnly
-        "redirect-to-https" -> pure RedirectToHttps
-        e                   -> fail $
-            "Failure parsing ViewerProtocolPolicy from " ++ show e
-
-instance ToText ViewerProtocolPolicy where
-    toText = \case
-        AllowAll        -> "allow-all"
-        HttpsOnly       -> "https-only"
-        RedirectToHttps -> "redirect-to-https"
-
-instance ToByteString ViewerProtocolPolicy
-instance ToHeader     ViewerProtocolPolicy
-instance ToQuery      ViewerProtocolPolicy
-
-instance FromXML ViewerProtocolPolicy where
-    parseXML = parseXMLText "ViewerProtocolPolicy"
-
-instance ToXML ViewerProtocolPolicy where
-    toXML = toXMLText
-
-data StreamingDistributionList = StreamingDistributionList
-    { _sdlIsTruncated :: Bool
-    , _sdlItems       :: List "StreamingDistributionSummary" StreamingDistributionSummary
-    , _sdlMarker      :: Text
-    , _sdlMaxItems    :: Int
-    , _sdlNextMarker  :: Maybe Text
-    , _sdlQuantity    :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'StreamingDistributionList' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sdlIsTruncated' @::@ 'Bool'
---
--- * 'sdlItems' @::@ ['StreamingDistributionSummary']
---
--- * 'sdlMarker' @::@ 'Text'
---
--- * 'sdlMaxItems' @::@ 'Int'
---
--- * 'sdlNextMarker' @::@ 'Maybe' 'Text'
---
--- * 'sdlQuantity' @::@ 'Int'
---
-streamingDistributionList :: Text -- ^ 'sdlMarker'
-                          -> Int -- ^ 'sdlMaxItems'
-                          -> Bool -- ^ 'sdlIsTruncated'
-                          -> Int -- ^ 'sdlQuantity'
-                          -> StreamingDistributionList
-streamingDistributionList p1 p2 p3 p4 = StreamingDistributionList
-    { _sdlMarker      = p1
-    , _sdlMaxItems    = p2
-    , _sdlIsTruncated = p3
-    , _sdlQuantity    = p4
-    , _sdlNextMarker  = Nothing
-    , _sdlItems       = mempty
-    }
-
--- | A flag that indicates whether more streaming distributions remain to be
--- listed. If your results were truncated, you can make a follow-up pagination
--- request using the Marker request parameter to retrieve more distributions in
--- the list.
-sdlIsTruncated :: Lens' StreamingDistributionList Bool
-sdlIsTruncated = lens _sdlIsTruncated (\s a -> s { _sdlIsTruncated = a })
-
--- | A complex type that contains one StreamingDistributionSummary element for
--- each distribution that was created by the current AWS account.
-sdlItems :: Lens' StreamingDistributionList [StreamingDistributionSummary]
-sdlItems = lens _sdlItems (\s a -> s { _sdlItems = a }) . _List
-
--- | The value you provided for the Marker request parameter.
-sdlMarker :: Lens' StreamingDistributionList Text
-sdlMarker = lens _sdlMarker (\s a -> s { _sdlMarker = a })
-
--- | The value you provided for the MaxItems request parameter.
-sdlMaxItems :: Lens' StreamingDistributionList Int
-sdlMaxItems = lens _sdlMaxItems (\s a -> s { _sdlMaxItems = a })
-
--- | If IsTruncated is true, this element is present and contains the value you
--- can use for the Marker request parameter to continue listing your streaming
--- distributions where they left off.
-sdlNextMarker :: Lens' StreamingDistributionList (Maybe Text)
-sdlNextMarker = lens _sdlNextMarker (\s a -> s { _sdlNextMarker = a })
-
--- | The number of streaming distributions that were created by the current AWS
--- account.
-sdlQuantity :: Lens' StreamingDistributionList Int
-sdlQuantity = lens _sdlQuantity (\s a -> s { _sdlQuantity = a })
-
-instance FromXML StreamingDistributionList where
-    parseXML x = StreamingDistributionList
-        <$> x .@  "IsTruncated"
-        <*> x .@? "Items" .!@ mempty
-        <*> x .@  "Marker"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextMarker"
-        <*> x .@  "Quantity"
-
-instance ToXML StreamingDistributionList where
-    toXML StreamingDistributionList{..} = nodes "StreamingDistributionList"
-        [ "Marker"      =@ _sdlMarker
-        , "NextMarker"  =@ _sdlNextMarker
-        , "MaxItems"    =@ _sdlMaxItems
-        , "IsTruncated" =@ _sdlIsTruncated
-        , "Quantity"    =@ _sdlQuantity
-        , "Items"       =@ _sdlItems
-        ]
-
-data StreamingDistributionConfig = StreamingDistributionConfig
-    { _sdcAliases         :: Maybe Aliases
-    , _sdcCallerReference :: Text
-    , _sdcComment         :: Text
-    , _sdcEnabled         :: Bool
-    , _sdcLogging         :: Maybe StreamingLoggingConfig
-    , _sdcPriceClass      :: Maybe PriceClass
-    , _sdcS3Origin        :: S3Origin
-    , _sdcTrustedSigners  :: TrustedSigners
-    } deriving (Eq, Read, Show)
-
--- | 'StreamingDistributionConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sdcAliases' @::@ 'Maybe' 'Aliases'
---
--- * 'sdcCallerReference' @::@ 'Text'
---
--- * 'sdcComment' @::@ 'Text'
---
--- * 'sdcEnabled' @::@ 'Bool'
---
--- * 'sdcLogging' @::@ 'Maybe' 'StreamingLoggingConfig'
---
--- * 'sdcPriceClass' @::@ 'Maybe' 'PriceClass'
---
--- * 'sdcS3Origin' @::@ 'S3Origin'
---
--- * 'sdcTrustedSigners' @::@ 'TrustedSigners'
---
-streamingDistributionConfig :: Text -- ^ 'sdcCallerReference'
-                            -> S3Origin -- ^ 'sdcS3Origin'
-                            -> Text -- ^ 'sdcComment'
-                            -> TrustedSigners -- ^ 'sdcTrustedSigners'
-                            -> Bool -- ^ 'sdcEnabled'
-                            -> StreamingDistributionConfig
-streamingDistributionConfig p1 p2 p3 p4 p5 = StreamingDistributionConfig
-    { _sdcCallerReference = p1
-    , _sdcS3Origin        = p2
-    , _sdcComment         = p3
-    , _sdcTrustedSigners  = p4
-    , _sdcEnabled         = p5
-    , _sdcAliases         = Nothing
-    , _sdcLogging         = Nothing
-    , _sdcPriceClass      = Nothing
-    }
-
--- | A complex type that contains information about CNAMEs (alternate domain
--- names), if any, for this streaming distribution.
-sdcAliases :: Lens' StreamingDistributionConfig (Maybe Aliases)
-sdcAliases = lens _sdcAliases (\s a -> s { _sdcAliases = a })
-
--- | A unique number that ensures the request can't be replayed. If the
--- CallerReference is new (no matter the content of the
--- StreamingDistributionConfig object), a new streaming distribution is created.
--- If the CallerReference is a value you already sent in a previous request to
--- create a streaming distribution, and the content of the
--- StreamingDistributionConfig is identical to the original request (ignoring
--- white space), the response includes the same information returned to the
--- original request. If the CallerReference is a value you already sent in a
--- previous request to create a streaming distribution but the content of the
--- StreamingDistributionConfig is different from the original request,
--- CloudFront returns a DistributionAlreadyExists error.
-sdcCallerReference :: Lens' StreamingDistributionConfig Text
-sdcCallerReference =
-    lens _sdcCallerReference (\s a -> s { _sdcCallerReference = a })
-
--- | Any comments you want to include about the streaming distribution.
-sdcComment :: Lens' StreamingDistributionConfig Text
-sdcComment = lens _sdcComment (\s a -> s { _sdcComment = a })
-
--- | Whether the streaming distribution is enabled to accept end user requests for
--- content.
-sdcEnabled :: Lens' StreamingDistributionConfig Bool
-sdcEnabled = lens _sdcEnabled (\s a -> s { _sdcEnabled = a })
-
--- | A complex type that controls whether access logs are written for the
--- streaming distribution.
-sdcLogging :: Lens' StreamingDistributionConfig (Maybe StreamingLoggingConfig)
-sdcLogging = lens _sdcLogging (\s a -> s { _sdcLogging = a })
-
--- | A complex type that contains information about price class for this streaming
--- distribution.
-sdcPriceClass :: Lens' StreamingDistributionConfig (Maybe PriceClass)
-sdcPriceClass = lens _sdcPriceClass (\s a -> s { _sdcPriceClass = a })
-
--- | A complex type that contains information about the Amazon S3 bucket from
--- which you want CloudFront to get your media files for distribution.
-sdcS3Origin :: Lens' StreamingDistributionConfig S3Origin
-sdcS3Origin = lens _sdcS3Origin (\s a -> s { _sdcS3Origin = a })
-
--- | A complex type that specifies the AWS accounts, if any, that you want to
--- allow to create signed URLs for private content. If you want to require
--- signed URLs in requests for objects in the target origin that match the
--- PathPattern for this cache behavior, specify true for Enabled, and specify
--- the applicable values for Quantity and Items. For more information, go to
--- Using a Signed URL to Serve Private Content in the Amazon CloudFront
--- Developer Guide. If you don't want to require signed URLs in requests for
--- objects that match PathPattern, specify false for Enabled and 0 for Quantity.
--- Omit Items. To add, change, or remove one or more trusted signers, change
--- Enabled to true (if it's currently false), change Quantity as applicable, and
--- specify all of the trusted signers that you want to include in the updated
--- distribution.
-sdcTrustedSigners :: Lens' StreamingDistributionConfig TrustedSigners
-sdcTrustedSigners =
-    lens _sdcTrustedSigners (\s a -> s { _sdcTrustedSigners = a })
-
-instance FromXML StreamingDistributionConfig where
-    parseXML x = StreamingDistributionConfig
-        <$> x .@? "Aliases"
-        <*> x .@  "CallerReference"
-        <*> x .@  "Comment"
-        <*> x .@  "Enabled"
-        <*> x .@? "Logging"
-        <*> x .@? "PriceClass"
-        <*> x .@  "S3Origin"
-        <*> x .@  "TrustedSigners"
-
-instance ToXMLRoot StreamingDistributionConfig where
-    toXMLRoot StreamingDistributionConfig{..} = namespaced ns "StreamingDistributionConfig"
-        [ "CallerReference" =@ _sdcCallerReference
-        , "S3Origin"        =@ _sdcS3Origin
-        , "Aliases"         =@ _sdcAliases
-        , "Comment"         =@ _sdcComment
-        , "Logging"         =@ _sdcLogging
-        , "TrustedSigners"  =@ _sdcTrustedSigners
-        , "PriceClass"      =@ _sdcPriceClass
-        , "Enabled"         =@ _sdcEnabled
-        ]
-
-instance ToXML StreamingDistributionConfig
-
-data Signer = Signer
-    { _sAwsAccountNumber :: Maybe Text
-    , _sKeyPairIds       :: Maybe KeyPairIds
-    } deriving (Eq, Read, Show)
-
--- | 'Signer' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sAwsAccountNumber' @::@ 'Maybe' 'Text'
---
--- * 'sKeyPairIds' @::@ 'Maybe' 'KeyPairIds'
---
-signer :: Signer
-signer = Signer
-    { _sAwsAccountNumber = Nothing
-    , _sKeyPairIds       = Nothing
-    }
-
--- | Specifies an AWS account that can create signed URLs. Values: self, which
--- indicates that the AWS account that was used to create the distribution can
--- created signed URLs, or an AWS account number. Omit the dashes in the account
--- number.
-sAwsAccountNumber :: Lens' Signer (Maybe Text)
-sAwsAccountNumber =
-    lens _sAwsAccountNumber (\s a -> s { _sAwsAccountNumber = a })
-
--- | A complex type that lists the active CloudFront key pairs, if any, that are
--- associated with AwsAccountNumber.
-sKeyPairIds :: Lens' Signer (Maybe KeyPairIds)
-sKeyPairIds = lens _sKeyPairIds (\s a -> s { _sKeyPairIds = a })
-
-instance FromXML Signer where
-    parseXML x = Signer
-        <$> x .@? "AwsAccountNumber"
-        <*> x .@? "KeyPairIds"
-
-instance ToXML Signer where
-    toXML Signer{..} = nodes "Signer"
-        [ "AwsAccountNumber" =@ _sAwsAccountNumber
-        , "KeyPairIds"       =@ _sKeyPairIds
-        ]
-
-data CookiePreference = CookiePreference
-    { _cpForward          :: ItemSelection
-    , _cpWhitelistedNames :: Maybe CookieNames
-    } deriving (Eq, Read, Show)
-
--- | 'CookiePreference' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cpForward' @::@ 'ItemSelection'
---
--- * 'cpWhitelistedNames' @::@ 'Maybe' 'CookieNames'
---
-cookiePreference :: ItemSelection -- ^ 'cpForward'
-                 -> CookiePreference
-cookiePreference p1 = CookiePreference
-    { _cpForward          = p1
-    , _cpWhitelistedNames = Nothing
-    }
-
--- | Use this element to specify whether you want CloudFront to forward cookies to
--- the origin that is associated with this cache behavior. You can specify all,
--- none or whitelist. If you choose All, CloudFront forwards all cookies
--- regardless of how many your application uses.
-cpForward :: Lens' CookiePreference ItemSelection
-cpForward = lens _cpForward (\s a -> s { _cpForward = a })
-
--- | A complex type that specifies the whitelisted cookies, if any, that you want
--- CloudFront to forward to your origin that is associated with this cache
--- behavior.
-cpWhitelistedNames :: Lens' CookiePreference (Maybe CookieNames)
-cpWhitelistedNames =
-    lens _cpWhitelistedNames (\s a -> s { _cpWhitelistedNames = a })
-
-instance FromXML CookiePreference where
-    parseXML x = CookiePreference
-        <$> x .@  "Forward"
-        <*> x .@? "WhitelistedNames"
-
-instance ToXML CookiePreference where
-    toXML CookiePreference{..} = nodes "CookiePreference"
-        [ "Forward"          =@ _cpForward
-        , "WhitelistedNames" =@ _cpWhitelistedNames
-        ]
-
-data OriginProtocolPolicy
-    = HttpOnly    -- ^ http-only
-    | MatchViewer -- ^ match-viewer
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable OriginProtocolPolicy
-
-instance FromText OriginProtocolPolicy where
-    parser = takeLowerText >>= \case
-        "http-only"    -> pure HttpOnly
-        "match-viewer" -> pure MatchViewer
-        e              -> fail $
-            "Failure parsing OriginProtocolPolicy from " ++ show e
-
-instance ToText OriginProtocolPolicy where
-    toText = \case
-        HttpOnly    -> "http-only"
-        MatchViewer -> "match-viewer"
-
-instance ToByteString OriginProtocolPolicy
-instance ToHeader     OriginProtocolPolicy
-instance ToQuery      OriginProtocolPolicy
-
-instance FromXML OriginProtocolPolicy where
-    parseXML = parseXMLText "OriginProtocolPolicy"
-
-instance ToXML OriginProtocolPolicy where
-    toXML = toXMLText
-
-data Distribution = Distribution
-    { _dActiveTrustedSigners          :: ActiveTrustedSigners
-    , _dDistributionConfig            :: DistributionConfig
-    , _dDomainName                    :: Text
-    , _dId                            :: Text
-    , _dInProgressInvalidationBatches :: Int
-    , _dLastModifiedTime              :: ISO8601
-    , _dStatus                        :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'Distribution' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dActiveTrustedSigners' @::@ 'ActiveTrustedSigners'
---
--- * 'dDistributionConfig' @::@ 'DistributionConfig'
---
--- * 'dDomainName' @::@ 'Text'
---
--- * 'dId' @::@ 'Text'
---
--- * 'dInProgressInvalidationBatches' @::@ 'Int'
---
--- * 'dLastModifiedTime' @::@ 'UTCTime'
---
--- * 'dStatus' @::@ 'Text'
---
-distribution :: Text -- ^ 'dId'
-             -> Text -- ^ 'dStatus'
-             -> UTCTime -- ^ 'dLastModifiedTime'
-             -> Int -- ^ 'dInProgressInvalidationBatches'
-             -> Text -- ^ 'dDomainName'
-             -> ActiveTrustedSigners -- ^ 'dActiveTrustedSigners'
-             -> DistributionConfig -- ^ 'dDistributionConfig'
-             -> Distribution
-distribution p1 p2 p3 p4 p5 p6 p7 = Distribution
-    { _dId                            = p1
-    , _dStatus                        = p2
-    , _dLastModifiedTime              = withIso _Time (const id) p3
-    , _dInProgressInvalidationBatches = p4
-    , _dDomainName                    = p5
-    , _dActiveTrustedSigners          = p6
-    , _dDistributionConfig            = p7
-    }
-
--- | CloudFront automatically adds this element to the response only if you've set
--- up the distribution to serve private content with signed URLs. The element
--- lists the key pair IDs that CloudFront is aware of for each trusted signer.
--- The Signer child element lists the AWS account number of the trusted signer
--- (or an empty Self element if the signer is you). The Signer element also
--- includes the IDs of any active key pairs associated with the trusted signer's
--- AWS account. If no KeyPairId element appears for a Signer, that signer can't
--- create working signed URLs.
-dActiveTrustedSigners :: Lens' Distribution ActiveTrustedSigners
-dActiveTrustedSigners =
-    lens _dActiveTrustedSigners (\s a -> s { _dActiveTrustedSigners = a })
-
--- | The current configuration information for the distribution.
-dDistributionConfig :: Lens' Distribution DistributionConfig
-dDistributionConfig =
-    lens _dDistributionConfig (\s a -> s { _dDistributionConfig = a })
-
--- | The domain name corresponding to the distribution. For example:
--- d604721fxaaqy9.cloudfront.net.
-dDomainName :: Lens' Distribution Text
-dDomainName = lens _dDomainName (\s a -> s { _dDomainName = a })
-
--- | The identifier for the distribution. For example: EDFDVBD632BHDS5.
-dId :: Lens' Distribution Text
-dId = lens _dId (\s a -> s { _dId = a })
-
--- | The number of invalidation batches currently in progress.
-dInProgressInvalidationBatches :: Lens' Distribution Int
-dInProgressInvalidationBatches =
-    lens _dInProgressInvalidationBatches
-        (\s a -> s { _dInProgressInvalidationBatches = a })
-
--- | The date and time the distribution was last modified.
-dLastModifiedTime :: Lens' Distribution UTCTime
-dLastModifiedTime =
-    lens _dLastModifiedTime (\s a -> s { _dLastModifiedTime = a })
-        . _Time
-
--- | This response element indicates the current status of the distribution. When
--- the status is Deployed, the distribution's information is fully propagated
--- throughout the Amazon CloudFront system.
-dStatus :: Lens' Distribution Text
-dStatus = lens _dStatus (\s a -> s { _dStatus = a })
-
-instance FromXML Distribution where
-    parseXML x = Distribution
-        <$> x .@  "ActiveTrustedSigners"
-        <*> x .@  "DistributionConfig"
-        <*> x .@  "DomainName"
-        <*> x .@  "Id"
-        <*> x .@  "InProgressInvalidationBatches"
-        <*> x .@  "LastModifiedTime"
-        <*> x .@  "Status"
-
-instance ToXMLRoot Distribution where
-    toXMLRoot Distribution{..} = namespaced ns "Distribution"
-        [ "Id"                            =@ _dId
-        , "Status"                        =@ _dStatus
-        , "LastModifiedTime"              =@ _dLastModifiedTime
-        , "InProgressInvalidationBatches" =@ _dInProgressInvalidationBatches
-        , "DomainName"                    =@ _dDomainName
-        , "ActiveTrustedSigners"          =@ _dActiveTrustedSigners
-        , "DistributionConfig"            =@ _dDistributionConfig
-        ]
-
-instance ToXML Distribution
-
-data CloudFrontOriginAccessIdentitySummary = CloudFrontOriginAccessIdentitySummary
-    { _cfoaisComment           :: Text
-    , _cfoaisId                :: Text
-    , _cfoaisS3CanonicalUserId :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CloudFrontOriginAccessIdentitySummary' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cfoaisComment' @::@ 'Text'
---
--- * 'cfoaisId' @::@ 'Text'
---
--- * 'cfoaisS3CanonicalUserId' @::@ 'Text'
---
-cloudFrontOriginAccessIdentitySummary :: Text -- ^ 'cfoaisId'
-                                      -> Text -- ^ 'cfoaisS3CanonicalUserId'
-                                      -> Text -- ^ 'cfoaisComment'
-                                      -> CloudFrontOriginAccessIdentitySummary
-cloudFrontOriginAccessIdentitySummary p1 p2 p3 = CloudFrontOriginAccessIdentitySummary
-    { _cfoaisId                = p1
-    , _cfoaisS3CanonicalUserId = p2
-    , _cfoaisComment           = p3
-    }
-
--- | The comment for this origin access identity, as originally specified when
--- created.
-cfoaisComment :: Lens' CloudFrontOriginAccessIdentitySummary Text
-cfoaisComment = lens _cfoaisComment (\s a -> s { _cfoaisComment = a })
-
--- | The ID for the origin access identity. For example: E74FTE3AJFJ256A.
-cfoaisId :: Lens' CloudFrontOriginAccessIdentitySummary Text
-cfoaisId = lens _cfoaisId (\s a -> s { _cfoaisId = a })
-
--- | The Amazon S3 canonical user ID for the origin access identity, which you use
--- when giving the origin access identity read permission to an object in Amazon
--- S3.
-cfoaisS3CanonicalUserId :: Lens' CloudFrontOriginAccessIdentitySummary Text
-cfoaisS3CanonicalUserId =
-    lens _cfoaisS3CanonicalUserId (\s a -> s { _cfoaisS3CanonicalUserId = a })
-
-instance FromXML CloudFrontOriginAccessIdentitySummary where
-    parseXML x = CloudFrontOriginAccessIdentitySummary
-        <$> x .@  "Comment"
-        <*> x .@  "Id"
-        <*> x .@  "S3CanonicalUserId"
-
-instance ToXML CloudFrontOriginAccessIdentitySummary where
-    toXML CloudFrontOriginAccessIdentitySummary{..} = nodes "CloudFrontOriginAccessIdentitySummary"
-        [ "Id"                =@ _cfoaisId
-        , "S3CanonicalUserId" =@ _cfoaisS3CanonicalUserId
-        , "Comment"           =@ _cfoaisComment
-        ]
-
-data StreamingDistributionSummary = StreamingDistributionSummary
-    { _sdsAliases          :: Aliases
-    , _sdsComment          :: Text
-    , _sdsDomainName       :: Text
-    , _sdsEnabled          :: Bool
-    , _sdsId               :: Text
-    , _sdsLastModifiedTime :: ISO8601
-    , _sdsPriceClass       :: PriceClass
-    , _sdsS3Origin         :: S3Origin
-    , _sdsStatus           :: Text
-    , _sdsTrustedSigners   :: TrustedSigners
-    } deriving (Eq, Read, Show)
-
--- | 'StreamingDistributionSummary' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sdsAliases' @::@ 'Aliases'
---
--- * 'sdsComment' @::@ 'Text'
---
--- * 'sdsDomainName' @::@ 'Text'
---
--- * 'sdsEnabled' @::@ 'Bool'
---
--- * 'sdsId' @::@ 'Text'
---
--- * 'sdsLastModifiedTime' @::@ 'UTCTime'
---
--- * 'sdsPriceClass' @::@ 'PriceClass'
---
--- * 'sdsS3Origin' @::@ 'S3Origin'
---
--- * 'sdsStatus' @::@ 'Text'
---
--- * 'sdsTrustedSigners' @::@ 'TrustedSigners'
---
-streamingDistributionSummary :: Text -- ^ 'sdsId'
-                             -> Text -- ^ 'sdsStatus'
-                             -> UTCTime -- ^ 'sdsLastModifiedTime'
-                             -> Text -- ^ 'sdsDomainName'
-                             -> S3Origin -- ^ 'sdsS3Origin'
-                             -> Aliases -- ^ 'sdsAliases'
-                             -> TrustedSigners -- ^ 'sdsTrustedSigners'
-                             -> Text -- ^ 'sdsComment'
-                             -> PriceClass -- ^ 'sdsPriceClass'
-                             -> Bool -- ^ 'sdsEnabled'
-                             -> StreamingDistributionSummary
-streamingDistributionSummary p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 = StreamingDistributionSummary
-    { _sdsId               = p1
-    , _sdsStatus           = p2
-    , _sdsLastModifiedTime = withIso _Time (const id) p3
-    , _sdsDomainName       = p4
-    , _sdsS3Origin         = p5
-    , _sdsAliases          = p6
-    , _sdsTrustedSigners   = p7
-    , _sdsComment          = p8
-    , _sdsPriceClass       = p9
-    , _sdsEnabled          = p10
-    }
-
--- | A complex type that contains information about CNAMEs (alternate domain
--- names), if any, for this streaming distribution.
-sdsAliases :: Lens' StreamingDistributionSummary Aliases
-sdsAliases = lens _sdsAliases (\s a -> s { _sdsAliases = a })
-
--- | The comment originally specified when this distribution was created.
-sdsComment :: Lens' StreamingDistributionSummary Text
-sdsComment = lens _sdsComment (\s a -> s { _sdsComment = a })
-
--- | The domain name corresponding to the distribution. For example:
--- d604721fxaaqy9.cloudfront.net.
-sdsDomainName :: Lens' StreamingDistributionSummary Text
-sdsDomainName = lens _sdsDomainName (\s a -> s { _sdsDomainName = a })
-
--- | Whether the distribution is enabled to accept end user requests for content.
-sdsEnabled :: Lens' StreamingDistributionSummary Bool
-sdsEnabled = lens _sdsEnabled (\s a -> s { _sdsEnabled = a })
-
--- | The identifier for the distribution. For example: EDFDVBD632BHDS5.
-sdsId :: Lens' StreamingDistributionSummary Text
-sdsId = lens _sdsId (\s a -> s { _sdsId = a })
-
--- | The date and time the distribution was last modified.
-sdsLastModifiedTime :: Lens' StreamingDistributionSummary UTCTime
-sdsLastModifiedTime =
-    lens _sdsLastModifiedTime (\s a -> s { _sdsLastModifiedTime = a })
-        . _Time
-
-sdsPriceClass :: Lens' StreamingDistributionSummary PriceClass
-sdsPriceClass = lens _sdsPriceClass (\s a -> s { _sdsPriceClass = a })
-
--- | A complex type that contains information about the Amazon S3 bucket from
--- which you want CloudFront to get your media files for distribution.
-sdsS3Origin :: Lens' StreamingDistributionSummary S3Origin
-sdsS3Origin = lens _sdsS3Origin (\s a -> s { _sdsS3Origin = a })
-
--- | Indicates the current status of the distribution. When the status is
--- Deployed, the distribution's information is fully propagated throughout the
--- Amazon CloudFront system.
-sdsStatus :: Lens' StreamingDistributionSummary Text
-sdsStatus = lens _sdsStatus (\s a -> s { _sdsStatus = a })
-
--- | A complex type that specifies the AWS accounts, if any, that you want to
--- allow to create signed URLs for private content. If you want to require
--- signed URLs in requests for objects in the target origin that match the
--- PathPattern for this cache behavior, specify true for Enabled, and specify
--- the applicable values for Quantity and Items. For more information, go to
--- Using a Signed URL to Serve Private Content in the Amazon CloudFront
--- Developer Guide. If you don't want to require signed URLs in requests for
--- objects that match PathPattern, specify false for Enabled and 0 for Quantity.
--- Omit Items. To add, change, or remove one or more trusted signers, change
--- Enabled to true (if it's currently false), change Quantity as applicable, and
--- specify all of the trusted signers that you want to include in the updated
--- distribution.
-sdsTrustedSigners :: Lens' StreamingDistributionSummary TrustedSigners
-sdsTrustedSigners =
-    lens _sdsTrustedSigners (\s a -> s { _sdsTrustedSigners = a })
-
-instance FromXML StreamingDistributionSummary where
-    parseXML x = StreamingDistributionSummary
-        <$> x .@  "Aliases"
-        <*> x .@  "Comment"
-        <*> x .@  "DomainName"
-        <*> x .@  "Enabled"
-        <*> x .@  "Id"
-        <*> x .@  "LastModifiedTime"
-        <*> x .@  "PriceClass"
-        <*> x .@  "S3Origin"
-        <*> x .@  "Status"
-        <*> x .@  "TrustedSigners"
-
-instance ToXML StreamingDistributionSummary where
-    toXML StreamingDistributionSummary{..} = nodes "StreamingDistributionSummary"
-        [ "Id"               =@ _sdsId
-        , "Status"           =@ _sdsStatus
-        , "LastModifiedTime" =@ _sdsLastModifiedTime
-        , "DomainName"       =@ _sdsDomainName
-        , "S3Origin"         =@ _sdsS3Origin
-        , "Aliases"          =@ _sdsAliases
-        , "TrustedSigners"   =@ _sdsTrustedSigners
-        , "Comment"          =@ _sdsComment
-        , "PriceClass"       =@ _sdsPriceClass
-        , "Enabled"          =@ _sdsEnabled
-        ]
-
-data CustomOriginConfig = CustomOriginConfig
-    { _cocHTTPPort             :: Int
-    , _cocHTTPSPort            :: Int
-    , _cocOriginProtocolPolicy :: OriginProtocolPolicy
-    } deriving (Eq, Read, Show)
-
--- | 'CustomOriginConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cocHTTPPort' @::@ 'Int'
---
--- * 'cocHTTPSPort' @::@ 'Int'
---
--- * 'cocOriginProtocolPolicy' @::@ 'OriginProtocolPolicy'
---
-customOriginConfig :: Int -- ^ 'cocHTTPPort'
-                   -> Int -- ^ 'cocHTTPSPort'
-                   -> OriginProtocolPolicy -- ^ 'cocOriginProtocolPolicy'
-                   -> CustomOriginConfig
-customOriginConfig p1 p2 p3 = CustomOriginConfig
-    { _cocHTTPPort             = p1
-    , _cocHTTPSPort            = p2
-    , _cocOriginProtocolPolicy = p3
-    }
-
--- | The HTTP port the custom origin listens on.
-cocHTTPPort :: Lens' CustomOriginConfig Int
-cocHTTPPort = lens _cocHTTPPort (\s a -> s { _cocHTTPPort = a })
-
--- | The HTTPS port the custom origin listens on.
-cocHTTPSPort :: Lens' CustomOriginConfig Int
-cocHTTPSPort = lens _cocHTTPSPort (\s a -> s { _cocHTTPSPort = a })
-
--- | The origin protocol policy to apply to your origin.
-cocOriginProtocolPolicy :: Lens' CustomOriginConfig OriginProtocolPolicy
-cocOriginProtocolPolicy =
-    lens _cocOriginProtocolPolicy (\s a -> s { _cocOriginProtocolPolicy = a })
-
-instance FromXML CustomOriginConfig where
-    parseXML x = CustomOriginConfig
-        <$> x .@  "HTTPPort"
-        <*> x .@  "HTTPSPort"
-        <*> x .@  "OriginProtocolPolicy"
-
-instance ToXML CustomOriginConfig where
-    toXML CustomOriginConfig{..} = nodes "CustomOriginConfig"
-        [ "HTTPPort"             =@ _cocHTTPPort
-        , "HTTPSPort"            =@ _cocHTTPSPort
-        , "OriginProtocolPolicy" =@ _cocOriginProtocolPolicy
-        ]
-
-data Aliases = Aliases
-    { _aItems    :: List "CNAME" Text
-    , _aQuantity :: Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Aliases' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'aItems' @::@ ['Text']
---
--- * 'aQuantity' @::@ 'Int'
---
-aliases :: Int -- ^ 'aQuantity'
-        -> Aliases
-aliases p1 = Aliases
-    { _aQuantity = p1
-    , _aItems    = mempty
-    }
-
--- | Optional: A complex type that contains CNAME elements, if any, for this
--- distribution. If Quantity is 0, you can omit Items.
-aItems :: Lens' Aliases [Text]
-aItems = lens _aItems (\s a -> s { _aItems = a }) . _List
-
--- | The number of CNAMEs, if any, for this distribution.
-aQuantity :: Lens' Aliases Int
-aQuantity = lens _aQuantity (\s a -> s { _aQuantity = a })
-
-instance FromXML Aliases where
-    parseXML x = Aliases
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML Aliases where
-    toXML Aliases{..} = nodes "Aliases"
-        [ "Quantity" =@ _aQuantity
-        , "Items"    =@ _aItems
-        ]
-
-data InvalidationBatch = InvalidationBatch
-    { _ibCallerReference :: Text
-    , _ibPaths           :: Paths
-    } deriving (Eq, Read, Show)
-
--- | 'InvalidationBatch' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ibCallerReference' @::@ 'Text'
---
--- * 'ibPaths' @::@ 'Paths'
---
-invalidationBatch :: Paths -- ^ 'ibPaths'
-                  -> Text -- ^ 'ibCallerReference'
-                  -> InvalidationBatch
-invalidationBatch p1 p2 = InvalidationBatch
-    { _ibPaths           = p1
-    , _ibCallerReference = p2
-    }
-
--- | A unique name that ensures the request can't be replayed. If the
--- CallerReference is new (no matter the content of the Path object), a new
--- distribution is created. If the CallerReference is a value you already sent
--- in a previous request to create an invalidation batch, and the content of
--- each Path element is identical to the original request, the response includes
--- the same information returned to the original request. If the CallerReference
--- is a value you already sent in a previous request to create a distribution
--- but the content of any Path is different from the original request,
--- CloudFront returns an InvalidationBatchAlreadyExists error.
-ibCallerReference :: Lens' InvalidationBatch Text
-ibCallerReference =
-    lens _ibCallerReference (\s a -> s { _ibCallerReference = a })
-
--- | The path of the object to invalidate. The path is relative to the
--- distribution and must begin with a slash (/). You must enclose each
--- invalidation object with the Path element tags. If the path includes
--- non-ASCII characters or unsafe characters as defined in RFC 1783
--- (http://www.ietf.org/rfc/rfc1738.txt), URL encode those characters. Do not
--- URL encode any other characters in the path, or CloudFront will not
--- invalidate the old version of the updated object.
-ibPaths :: Lens' InvalidationBatch Paths
-ibPaths = lens _ibPaths (\s a -> s { _ibPaths = a })
-
-instance FromXML InvalidationBatch where
-    parseXML x = InvalidationBatch
-        <$> x .@  "CallerReference"
-        <*> x .@  "Paths"
-
-instance ToXML InvalidationBatch where
-    toXML InvalidationBatch{..} = nodes "InvalidationBatch"
-        [ "Paths"           =@ _ibPaths
-        , "CallerReference" =@ _ibCallerReference
-        ]
-
-data InvalidationSummary = InvalidationSummary
-    { _isCreateTime :: ISO8601
-    , _isId         :: Text
-    , _isStatus     :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'InvalidationSummary' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'isCreateTime' @::@ 'UTCTime'
---
--- * 'isId' @::@ 'Text'
---
--- * 'isStatus' @::@ 'Text'
---
-invalidationSummary :: Text -- ^ 'isId'
-                    -> UTCTime -- ^ 'isCreateTime'
-                    -> Text -- ^ 'isStatus'
-                    -> InvalidationSummary
-invalidationSummary p1 p2 p3 = InvalidationSummary
-    { _isId         = p1
-    , _isCreateTime = withIso _Time (const id) p2
-    , _isStatus     = p3
-    }
-
-isCreateTime :: Lens' InvalidationSummary UTCTime
-isCreateTime = lens _isCreateTime (\s a -> s { _isCreateTime = a }) . _Time
-
--- | The unique ID for an invalidation request.
-isId :: Lens' InvalidationSummary Text
-isId = lens _isId (\s a -> s { _isId = a })
-
--- | The status of an invalidation request.
-isStatus :: Lens' InvalidationSummary Text
-isStatus = lens _isStatus (\s a -> s { _isStatus = a })
-
-instance FromXML InvalidationSummary where
-    parseXML x = InvalidationSummary
-        <$> x .@  "CreateTime"
-        <*> x .@  "Id"
-        <*> x .@  "Status"
-
-instance ToXML InvalidationSummary where
-    toXML InvalidationSummary{..} = nodes "InvalidationSummary"
-        [ "Id"         =@ _isId
-        , "CreateTime" =@ _isCreateTime
-        , "Status"     =@ _isStatus
-        ]
-
-data DistributionConfig = DistributionConfig
-    { _dcAliases              :: Maybe Aliases
-    , _dcCacheBehaviors       :: Maybe CacheBehaviors
-    , _dcCallerReference      :: Text
-    , _dcComment              :: Text
-    , _dcCustomErrorResponses :: Maybe CustomErrorResponses
-    , _dcDefaultCacheBehavior :: DefaultCacheBehavior
-    , _dcDefaultRootObject    :: Maybe Text
-    , _dcEnabled              :: Bool
-    , _dcLogging              :: Maybe LoggingConfig
-    , _dcOrigins              :: Origins
-    , _dcPriceClass           :: Maybe PriceClass
-    , _dcRestrictions         :: Maybe Restrictions
-    , _dcViewerCertificate    :: Maybe ViewerCertificate
-    } deriving (Eq, Read, Show)
-
--- | 'DistributionConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dcAliases' @::@ 'Maybe' 'Aliases'
---
--- * 'dcCacheBehaviors' @::@ 'Maybe' 'CacheBehaviors'
---
--- * 'dcCallerReference' @::@ 'Text'
---
--- * 'dcComment' @::@ 'Text'
---
--- * 'dcCustomErrorResponses' @::@ 'Maybe' 'CustomErrorResponses'
---
--- * 'dcDefaultCacheBehavior' @::@ 'DefaultCacheBehavior'
---
--- * 'dcDefaultRootObject' @::@ 'Maybe' 'Text'
---
--- * 'dcEnabled' @::@ 'Bool'
---
--- * 'dcLogging' @::@ 'Maybe' 'LoggingConfig'
---
--- * 'dcOrigins' @::@ 'Origins'
---
--- * 'dcPriceClass' @::@ 'Maybe' 'PriceClass'
---
--- * 'dcRestrictions' @::@ 'Maybe' 'Restrictions'
---
--- * 'dcViewerCertificate' @::@ 'Maybe' 'ViewerCertificate'
---
-distributionConfig :: Text -- ^ 'dcCallerReference'
-                   -> Origins -- ^ 'dcOrigins'
-                   -> DefaultCacheBehavior -- ^ 'dcDefaultCacheBehavior'
-                   -> Text -- ^ 'dcComment'
-                   -> Bool -- ^ 'dcEnabled'
-                   -> DistributionConfig
-distributionConfig p1 p2 p3 p4 p5 = DistributionConfig
-    { _dcCallerReference      = p1
-    , _dcOrigins              = p2
-    , _dcDefaultCacheBehavior = p3
-    , _dcComment              = p4
-    , _dcEnabled              = p5
-    , _dcAliases              = Nothing
-    , _dcDefaultRootObject    = Nothing
-    , _dcCacheBehaviors       = Nothing
-    , _dcCustomErrorResponses = Nothing
-    , _dcLogging              = Nothing
-    , _dcPriceClass           = Nothing
-    , _dcViewerCertificate    = Nothing
-    , _dcRestrictions         = Nothing
-    }
-
--- | A complex type that contains information about CNAMEs (alternate domain
--- names), if any, for this distribution.
-dcAliases :: Lens' DistributionConfig (Maybe Aliases)
-dcAliases = lens _dcAliases (\s a -> s { _dcAliases = a })
-
--- | A complex type that contains zero or more CacheBehavior elements.
-dcCacheBehaviors :: Lens' DistributionConfig (Maybe CacheBehaviors)
-dcCacheBehaviors = lens _dcCacheBehaviors (\s a -> s { _dcCacheBehaviors = a })
-
--- | A unique number that ensures the request can't be replayed. If the
--- CallerReference is new (no matter the content of the DistributionConfig
--- object), a new distribution is created. If the CallerReference is a value you
--- already sent in a previous request to create a distribution, and the content
--- of the DistributionConfig is identical to the original request (ignoring
--- white space), the response includes the same information returned to the
--- original request. If the CallerReference is a value you already sent in a
--- previous request to create a distribution but the content of the
--- DistributionConfig is different from the original request, CloudFront returns
--- a DistributionAlreadyExists error.
-dcCallerReference :: Lens' DistributionConfig Text
-dcCallerReference =
-    lens _dcCallerReference (\s a -> s { _dcCallerReference = a })
-
--- | Any comments you want to include about the distribution.
-dcComment :: Lens' DistributionConfig Text
-dcComment = lens _dcComment (\s a -> s { _dcComment = a })
-
--- | A complex type that contains zero or more CustomErrorResponse elements.
-dcCustomErrorResponses :: Lens' DistributionConfig (Maybe CustomErrorResponses)
-dcCustomErrorResponses =
-    lens _dcCustomErrorResponses (\s a -> s { _dcCustomErrorResponses = a })
-
--- | A complex type that describes the default cache behavior if you do not
--- specify a CacheBehavior element or if files don't match any of the values of
--- PathPattern in CacheBehavior elements.You must create exactly one default
--- cache behavior.
-dcDefaultCacheBehavior :: Lens' DistributionConfig DefaultCacheBehavior
-dcDefaultCacheBehavior =
-    lens _dcDefaultCacheBehavior (\s a -> s { _dcDefaultCacheBehavior = a })
-
--- | The object that you want CloudFront to return (for example, index.html) when
--- an end user requests the root URL for your distribution
--- (http://www.example.com) instead of an object in your distribution
--- (http://www.example.com/index.html). Specifying a default root object avoids
--- exposing the contents of your distribution. If you don't want to specify a
--- default root object when you create a distribution, include an empty
--- DefaultRootObject element. To delete the default root object from an existing
--- distribution, update the distribution configuration and include an empty
--- DefaultRootObject element. To replace the default root object, update the
--- distribution configuration and specify the new object.
-dcDefaultRootObject :: Lens' DistributionConfig (Maybe Text)
-dcDefaultRootObject =
-    lens _dcDefaultRootObject (\s a -> s { _dcDefaultRootObject = a })
-
--- | Whether the distribution is enabled to accept end user requests for content.
-dcEnabled :: Lens' DistributionConfig Bool
-dcEnabled = lens _dcEnabled (\s a -> s { _dcEnabled = a })
-
--- | A complex type that controls whether access logs are written for the
--- distribution.
-dcLogging :: Lens' DistributionConfig (Maybe LoggingConfig)
-dcLogging = lens _dcLogging (\s a -> s { _dcLogging = a })
-
--- | A complex type that contains information about origins for this distribution.
-dcOrigins :: Lens' DistributionConfig Origins
-dcOrigins = lens _dcOrigins (\s a -> s { _dcOrigins = a })
-
--- | A complex type that contains information about price class for this
--- distribution.
-dcPriceClass :: Lens' DistributionConfig (Maybe PriceClass)
-dcPriceClass = lens _dcPriceClass (\s a -> s { _dcPriceClass = a })
-
-dcRestrictions :: Lens' DistributionConfig (Maybe Restrictions)
-dcRestrictions = lens _dcRestrictions (\s a -> s { _dcRestrictions = a })
-
-dcViewerCertificate :: Lens' DistributionConfig (Maybe ViewerCertificate)
-dcViewerCertificate =
-    lens _dcViewerCertificate (\s a -> s { _dcViewerCertificate = a })
-
-instance FromXML DistributionConfig where
-    parseXML x = DistributionConfig
-        <$> x .@? "Aliases"
-        <*> x .@? "CacheBehaviors"
-        <*> x .@  "CallerReference"
-        <*> x .@  "Comment"
-        <*> x .@? "CustomErrorResponses"
-        <*> x .@  "DefaultCacheBehavior"
-        <*> x .@? "DefaultRootObject"
-        <*> x .@  "Enabled"
-        <*> x .@? "Logging"
-        <*> x .@  "Origins"
-        <*> x .@? "PriceClass"
-        <*> x .@? "Restrictions"
-        <*> x .@? "ViewerCertificate"
-
-instance ToXMLRoot DistributionConfig where
-    toXMLRoot DistributionConfig{..} = namespaced ns "DistributionConfig"
-        [ "CallerReference"      =@ _dcCallerReference
-        , "Aliases"              =@ _dcAliases
-        , "DefaultRootObject"    =@ _dcDefaultRootObject
-        , "Origins"              =@ _dcOrigins
-        , "DefaultCacheBehavior" =@ _dcDefaultCacheBehavior
-        , "CacheBehaviors"       =@ _dcCacheBehaviors
-        , "CustomErrorResponses" =@ _dcCustomErrorResponses
-        , "Comment"              =@ _dcComment
-        , "Logging"              =@ _dcLogging
-        , "PriceClass"           =@ _dcPriceClass
-        , "Enabled"              =@ _dcEnabled
-        , "ViewerCertificate"    =@ _dcViewerCertificate
-        , "Restrictions"         =@ _dcRestrictions
-        ]
-
-instance ToXML DistributionConfig
-
-data CacheBehavior = CacheBehavior
-    { _cbAllowedMethods       :: Maybe AllowedMethods
-    , _cbForwardedValues      :: ForwardedValues
-    , _cbMinTTL               :: Integer
-    , _cbPathPattern          :: Text
-    , _cbSmoothStreaming      :: Maybe Bool
-    , _cbTargetOriginId       :: Text
-    , _cbTrustedSigners       :: TrustedSigners
-    , _cbViewerProtocolPolicy :: ViewerProtocolPolicy
-    } deriving (Eq, Read, Show)
-
--- | 'CacheBehavior' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cbAllowedMethods' @::@ 'Maybe' 'AllowedMethods'
---
--- * 'cbForwardedValues' @::@ 'ForwardedValues'
---
--- * 'cbMinTTL' @::@ 'Integer'
---
--- * 'cbPathPattern' @::@ 'Text'
---
--- * 'cbSmoothStreaming' @::@ 'Maybe' 'Bool'
---
--- * 'cbTargetOriginId' @::@ 'Text'
---
--- * 'cbTrustedSigners' @::@ 'TrustedSigners'
---
--- * 'cbViewerProtocolPolicy' @::@ 'ViewerProtocolPolicy'
---
-cacheBehavior :: Text -- ^ 'cbPathPattern'
-              -> Text -- ^ 'cbTargetOriginId'
-              -> ForwardedValues -- ^ 'cbForwardedValues'
-              -> TrustedSigners -- ^ 'cbTrustedSigners'
-              -> ViewerProtocolPolicy -- ^ 'cbViewerProtocolPolicy'
-              -> Integer -- ^ 'cbMinTTL'
-              -> CacheBehavior
-cacheBehavior p1 p2 p3 p4 p5 p6 = CacheBehavior
-    { _cbPathPattern          = p1
-    , _cbTargetOriginId       = p2
-    , _cbForwardedValues      = p3
-    , _cbTrustedSigners       = p4
-    , _cbViewerProtocolPolicy = p5
-    , _cbMinTTL               = p6
-    , _cbAllowedMethods       = Nothing
-    , _cbSmoothStreaming      = Nothing
-    }
-
-cbAllowedMethods :: Lens' CacheBehavior (Maybe AllowedMethods)
-cbAllowedMethods = lens _cbAllowedMethods (\s a -> s { _cbAllowedMethods = a })
-
--- | A complex type that specifies how CloudFront handles query strings, cookies
--- and headers.
-cbForwardedValues :: Lens' CacheBehavior ForwardedValues
-cbForwardedValues =
-    lens _cbForwardedValues (\s a -> s { _cbForwardedValues = a })
-
--- | The minimum amount of time that you want objects to stay in CloudFront caches
--- before CloudFront queries your origin to see whether the object has been
--- updated.You can specify a value from 0 to 3,153,600,000 seconds (100 years).
-cbMinTTL :: Lens' CacheBehavior Integer
-cbMinTTL = lens _cbMinTTL (\s a -> s { _cbMinTTL = a })
-
--- | The pattern (for example, images/*.jpg) that specifies which requests you
--- want this cache behavior to apply to. When CloudFront receives an end-user
--- request, the requested path is compared with path patterns in the order in
--- which cache behaviors are listed in the distribution. The path pattern for
--- the default cache behavior is * and cannot be changed. If the request for an
--- object does not match the path pattern for any cache behaviors, CloudFront
--- applies the behavior in the default cache behavior.
-cbPathPattern :: Lens' CacheBehavior Text
-cbPathPattern = lens _cbPathPattern (\s a -> s { _cbPathPattern = a })
-
--- | Indicates whether you want to distribute media files in Microsoft Smooth
--- Streaming format using the origin that is associated with this cache
--- behavior. If so, specify true; if not, specify false.
-cbSmoothStreaming :: Lens' CacheBehavior (Maybe Bool)
-cbSmoothStreaming =
-    lens _cbSmoothStreaming (\s a -> s { _cbSmoothStreaming = a })
-
--- | The value of ID for the origin that you want CloudFront to route requests to
--- when a request matches the path pattern either for a cache behavior or for
--- the default cache behavior.
-cbTargetOriginId :: Lens' CacheBehavior Text
-cbTargetOriginId = lens _cbTargetOriginId (\s a -> s { _cbTargetOriginId = a })
-
--- | A complex type that specifies the AWS accounts, if any, that you want to
--- allow to create signed URLs for private content. If you want to require
--- signed URLs in requests for objects in the target origin that match the
--- PathPattern for this cache behavior, specify true for Enabled, and specify
--- the applicable values for Quantity and Items. For more information, go to
--- Using a Signed URL to Serve Private Content in the Amazon CloudFront
--- Developer Guide. If you don't want to require signed URLs in requests for
--- objects that match PathPattern, specify false for Enabled and 0 for Quantity.
--- Omit Items. To add, change, or remove one or more trusted signers, change
--- Enabled to true (if it's currently false), change Quantity as applicable, and
--- specify all of the trusted signers that you want to include in the updated
--- distribution.
-cbTrustedSigners :: Lens' CacheBehavior TrustedSigners
-cbTrustedSigners = lens _cbTrustedSigners (\s a -> s { _cbTrustedSigners = a })
-
--- | Use this element to specify the protocol that users can use to access the
--- files in the origin specified by TargetOriginId when a request matches the
--- path pattern in PathPattern. If you want CloudFront to allow end users to use
--- any available protocol, specify allow-all. If you want CloudFront to require
--- HTTPS, specify https. If you want CloudFront to respond to an HTTP request
--- with an HTTP status code of 301 (Moved Permanently) and the HTTPS URL,
--- specify redirect-to-https. The viewer then resubmits the request using the
--- HTTPS URL.
-cbViewerProtocolPolicy :: Lens' CacheBehavior ViewerProtocolPolicy
-cbViewerProtocolPolicy =
-    lens _cbViewerProtocolPolicy (\s a -> s { _cbViewerProtocolPolicy = a })
-
-instance FromXML CacheBehavior where
-    parseXML x = CacheBehavior
-        <$> x .@? "AllowedMethods"
-        <*> x .@  "ForwardedValues"
-        <*> x .@  "MinTTL"
-        <*> x .@  "PathPattern"
-        <*> x .@? "SmoothStreaming"
-        <*> x .@  "TargetOriginId"
-        <*> x .@  "TrustedSigners"
-        <*> x .@  "ViewerProtocolPolicy"
-
-instance ToXML CacheBehavior where
-    toXML CacheBehavior{..} = nodes "CacheBehavior"
-        [ "PathPattern"          =@ _cbPathPattern
-        , "TargetOriginId"       =@ _cbTargetOriginId
-        , "ForwardedValues"      =@ _cbForwardedValues
-        , "TrustedSigners"       =@ _cbTrustedSigners
-        , "ViewerProtocolPolicy" =@ _cbViewerProtocolPolicy
-        , "MinTTL"               =@ _cbMinTTL
-        , "AllowedMethods"       =@ _cbAllowedMethods
-        , "SmoothStreaming"      =@ _cbSmoothStreaming
-        ]
-
-data DistributionList = DistributionList
-    { _dlIsTruncated :: Bool
-    , _dlItems       :: List "DistributionSummary" DistributionSummary
-    , _dlMarker      :: Text
-    , _dlMaxItems    :: Int
-    , _dlNextMarker  :: Maybe Text
-    , _dlQuantity    :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'DistributionList' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dlIsTruncated' @::@ 'Bool'
---
--- * 'dlItems' @::@ ['DistributionSummary']
---
--- * 'dlMarker' @::@ 'Text'
---
--- * 'dlMaxItems' @::@ 'Int'
---
--- * 'dlNextMarker' @::@ 'Maybe' 'Text'
---
--- * 'dlQuantity' @::@ 'Int'
---
-distributionList :: Text -- ^ 'dlMarker'
-                 -> Int -- ^ 'dlMaxItems'
-                 -> Bool -- ^ 'dlIsTruncated'
-                 -> Int -- ^ 'dlQuantity'
-                 -> DistributionList
-distributionList p1 p2 p3 p4 = DistributionList
-    { _dlMarker      = p1
-    , _dlMaxItems    = p2
-    , _dlIsTruncated = p3
-    , _dlQuantity    = p4
-    , _dlNextMarker  = Nothing
-    , _dlItems       = mempty
-    }
-
--- | A flag that indicates whether more distributions remain to be listed. If your
--- results were truncated, you can make a follow-up pagination request using the
--- Marker request parameter to retrieve more distributions in the list.
-dlIsTruncated :: Lens' DistributionList Bool
-dlIsTruncated = lens _dlIsTruncated (\s a -> s { _dlIsTruncated = a })
-
--- | A complex type that contains one DistributionSummary element for each
--- distribution that was created by the current AWS account.
-dlItems :: Lens' DistributionList [DistributionSummary]
-dlItems = lens _dlItems (\s a -> s { _dlItems = a }) . _List
-
--- | The value you provided for the Marker request parameter.
-dlMarker :: Lens' DistributionList Text
-dlMarker = lens _dlMarker (\s a -> s { _dlMarker = a })
-
--- | The value you provided for the MaxItems request parameter.
-dlMaxItems :: Lens' DistributionList Int
-dlMaxItems = lens _dlMaxItems (\s a -> s { _dlMaxItems = a })
-
--- | If IsTruncated is true, this element is present and contains the value you
--- can use for the Marker request parameter to continue listing your
--- distributions where they left off.
-dlNextMarker :: Lens' DistributionList (Maybe Text)
-dlNextMarker = lens _dlNextMarker (\s a -> s { _dlNextMarker = a })
-
--- | The number of distributions that were created by the current AWS account.
-dlQuantity :: Lens' DistributionList Int
-dlQuantity = lens _dlQuantity (\s a -> s { _dlQuantity = a })
-
-instance FromXML DistributionList where
-    parseXML x = DistributionList
-        <$> x .@  "IsTruncated"
-        <*> x .@? "Items" .!@ mempty
-        <*> x .@  "Marker"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextMarker"
-        <*> x .@  "Quantity"
-
-instance ToXML DistributionList where
-    toXML DistributionList{..} = nodes "DistributionList"
-        [ "Marker"      =@ _dlMarker
-        , "NextMarker"  =@ _dlNextMarker
-        , "MaxItems"    =@ _dlMaxItems
-        , "IsTruncated" =@ _dlIsTruncated
-        , "Quantity"    =@ _dlQuantity
-        , "Items"       =@ _dlItems
-        ]
-
-data KeyPairIds = KeyPairIds
-    { _kpiItems    :: List "KeyPairId" Text
-    , _kpiQuantity :: Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'KeyPairIds' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'kpiItems' @::@ ['Text']
---
--- * 'kpiQuantity' @::@ 'Int'
---
-keyPairIds :: Int -- ^ 'kpiQuantity'
-           -> KeyPairIds
-keyPairIds p1 = KeyPairIds
-    { _kpiQuantity = p1
-    , _kpiItems    = mempty
-    }
-
--- | A complex type that lists the active CloudFront key pairs, if any, that are
--- associated with AwsAccountNumber.
-kpiItems :: Lens' KeyPairIds [Text]
-kpiItems = lens _kpiItems (\s a -> s { _kpiItems = a }) . _List
-
--- | The number of active CloudFront key pairs for AwsAccountNumber.
-kpiQuantity :: Lens' KeyPairIds Int
-kpiQuantity = lens _kpiQuantity (\s a -> s { _kpiQuantity = a })
-
-instance FromXML KeyPairIds where
-    parseXML x = KeyPairIds
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML KeyPairIds where
-    toXML KeyPairIds{..} = nodes "KeyPairIds"
-        [ "Quantity" =@ _kpiQuantity
-        , "Items"    =@ _kpiItems
-        ]
-
-data PriceClass
-    = PriceClass100 -- ^ PriceClass_100
-    | PriceClass200 -- ^ PriceClass_200
-    | PriceClassAll -- ^ PriceClass_All
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable PriceClass
-
-instance FromText PriceClass where
-    parser = takeLowerText >>= \case
-        "priceclass_100" -> pure PriceClass100
-        "priceclass_200" -> pure PriceClass200
-        "priceclass_all" -> pure PriceClassAll
-        e                -> fail $
-            "Failure parsing PriceClass from " ++ show e
-
-instance ToText PriceClass where
-    toText = \case
-        PriceClass100 -> "PriceClass_100"
-        PriceClass200 -> "PriceClass_200"
-        PriceClassAll -> "PriceClass_All"
-
-instance ToByteString PriceClass
-instance ToHeader     PriceClass
-instance ToQuery      PriceClass
-
-instance FromXML PriceClass where
-    parseXML = parseXMLText "PriceClass"
-
-instance ToXML PriceClass where
-    toXML = toXMLText
-
-data CustomErrorResponses = CustomErrorResponses
-    { _cerItems    :: List "CustomErrorResponse" CustomErrorResponse
-    , _cerQuantity :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'CustomErrorResponses' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cerItems' @::@ ['CustomErrorResponse']
---
--- * 'cerQuantity' @::@ 'Int'
---
-customErrorResponses :: Int -- ^ 'cerQuantity'
-                     -> CustomErrorResponses
-customErrorResponses p1 = CustomErrorResponses
-    { _cerQuantity = p1
-    , _cerItems    = mempty
-    }
-
--- | Optional: A complex type that contains custom error responses for this
--- distribution. If Quantity is 0, you can omit Items.
-cerItems :: Lens' CustomErrorResponses [CustomErrorResponse]
-cerItems = lens _cerItems (\s a -> s { _cerItems = a }) . _List
-
--- | The number of custom error responses for this distribution.
-cerQuantity :: Lens' CustomErrorResponses Int
-cerQuantity = lens _cerQuantity (\s a -> s { _cerQuantity = a })
-
-instance FromXML CustomErrorResponses where
-    parseXML x = CustomErrorResponses
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML CustomErrorResponses where
-    toXML CustomErrorResponses{..} = nodes "CustomErrorResponses"
-        [ "Quantity" =@ _cerQuantity
-        , "Items"    =@ _cerItems
-        ]
-
-newtype S3OriginConfig = S3OriginConfig
-    { _socOriginAccessIdentity :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'S3OriginConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'socOriginAccessIdentity' @::@ 'Text'
---
-s3OriginConfig :: Text -- ^ 'socOriginAccessIdentity'
-               -> S3OriginConfig
-s3OriginConfig p1 = S3OriginConfig
-    { _socOriginAccessIdentity = p1
-    }
-
--- | The CloudFront origin access identity to associate with the origin. Use an
--- origin access identity to configure the origin so that end users can only
--- access objects in an Amazon S3 bucket through CloudFront. If you want end
--- users to be able to access objects using either the CloudFront URL or the
--- Amazon S3 URL, specify an empty OriginAccessIdentity element. To delete the
--- origin access identity from an existing distribution, update the distribution
--- configuration and include an empty OriginAccessIdentity element. To replace
--- the origin access identity, update the distribution configuration and specify
--- the new origin access identity. Use the format
--- origin-access-identity/cloudfront/Id where Id is the value that CloudFront
--- returned in the Id element when you created the origin access identity.
-socOriginAccessIdentity :: Lens' S3OriginConfig Text
-socOriginAccessIdentity =
-    lens _socOriginAccessIdentity (\s a -> s { _socOriginAccessIdentity = a })
-
-instance FromXML S3OriginConfig where
-    parseXML x = S3OriginConfig
-        <$> x .@  "OriginAccessIdentity"
-
-instance ToXML S3OriginConfig where
-    toXML S3OriginConfig{..} = nodes "S3OriginConfig"
-        [ "OriginAccessIdentity" =@ _socOriginAccessIdentity
-        ]
-
-data GeoRestriction = GeoRestriction
-    { _grItems           :: List "Location" Text
-    , _grQuantity        :: Int
-    , _grRestrictionType :: GeoRestrictionType
-    } deriving (Eq, Read, Show)
-
--- | 'GeoRestriction' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'grItems' @::@ ['Text']
---
--- * 'grQuantity' @::@ 'Int'
---
--- * 'grRestrictionType' @::@ 'GeoRestrictionType'
---
-geoRestriction :: GeoRestrictionType -- ^ 'grRestrictionType'
-               -> Int -- ^ 'grQuantity'
-               -> GeoRestriction
-geoRestriction p1 p2 = GeoRestriction
-    { _grRestrictionType = p1
-    , _grQuantity        = p2
-    , _grItems           = mempty
-    }
-
--- | A complex type that contains a Location element for each country in which you
--- want CloudFront either to distribute your content (whitelist) or not
--- distribute your content (blacklist). The Location element is a two-letter,
--- uppercase country code for a country that you want to include in your
--- blacklist or whitelist. Include one Location element for each country.
--- CloudFront and MaxMind both use ISO 3166 country codes. For the current list
--- of countries and the corresponding codes, see ISO 3166-1-alpha-2 code on the
--- International Organization for Standardization website. You can also refer to
--- the country list in the CloudFront console, which includes both country names
--- and codes.
-grItems :: Lens' GeoRestriction [Text]
-grItems = lens _grItems (\s a -> s { _grItems = a }) . _List
-
--- | When geo restriction is enabled, this is the number of countries in your
--- whitelist or blacklist. Otherwise, when it is not enabled, Quantity is 0, and
--- you can omit Items.
-grQuantity :: Lens' GeoRestriction Int
-grQuantity = lens _grQuantity (\s a -> s { _grQuantity = a })
-
--- | The method that you want to use to restrict distribution of your content by
--- country: - none: No geo restriction is enabled, meaning access to content is
--- not restricted by client geo location. - blacklist: The Location elements
--- specify the countries in which you do not want CloudFront to distribute your
--- content. - whitelist: The Location elements specify the countries in which
--- you want CloudFront to distribute your content.
-grRestrictionType :: Lens' GeoRestriction GeoRestrictionType
-grRestrictionType =
-    lens _grRestrictionType (\s a -> s { _grRestrictionType = a })
-
-instance FromXML GeoRestriction where
-    parseXML x = GeoRestriction
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-        <*> x .@  "RestrictionType"
-
-instance ToXML GeoRestriction where
-    toXML GeoRestriction{..} = nodes "GeoRestriction"
-        [ "RestrictionType" =@ _grRestrictionType
-        , "Quantity"        =@ _grQuantity
-        , "Items"           =@ _grItems
-        ]
-
-data S3Origin = S3Origin
-    { _soDomainName           :: Text
-    , _soOriginAccessIdentity :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'S3Origin' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'soDomainName' @::@ 'Text'
---
--- * 'soOriginAccessIdentity' @::@ 'Text'
---
-s3Origin :: Text -- ^ 'soDomainName'
-         -> Text -- ^ 'soOriginAccessIdentity'
-         -> S3Origin
-s3Origin p1 p2 = S3Origin
-    { _soDomainName           = p1
-    , _soOriginAccessIdentity = p2
-    }
-
--- | The DNS name of the S3 origin.
-soDomainName :: Lens' S3Origin Text
-soDomainName = lens _soDomainName (\s a -> s { _soDomainName = a })
-
--- | Your S3 origin's origin access identity.
-soOriginAccessIdentity :: Lens' S3Origin Text
-soOriginAccessIdentity =
-    lens _soOriginAccessIdentity (\s a -> s { _soOriginAccessIdentity = a })
-
-instance FromXML S3Origin where
-    parseXML x = S3Origin
-        <$> x .@  "DomainName"
-        <*> x .@  "OriginAccessIdentity"
-
-instance ToXML S3Origin where
-    toXML S3Origin{..} = nodes "S3Origin"
-        [ "DomainName"           =@ _soDomainName
-        , "OriginAccessIdentity" =@ _soOriginAccessIdentity
-        ]
-
-data Headers = Headers
-    { _hItems    :: List "Name" Text
-    , _hQuantity :: Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Headers' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'hItems' @::@ ['Text']
---
--- * 'hQuantity' @::@ 'Int'
---
-headers :: Int -- ^ 'hQuantity'
-        -> Headers
-headers p1 = Headers
-    { _hQuantity = p1
-    , _hItems    = mempty
-    }
-
--- | Optional: A complex type that contains a Name element for each header that
--- you want CloudFront to forward to the origin and to vary on for this cache
--- behavior. If Quantity is 0, omit Items.
-hItems :: Lens' Headers [Text]
-hItems = lens _hItems (\s a -> s { _hItems = a }) . _List
-
--- | The number of different headers that you want CloudFront to forward to the
--- origin and to vary on for this cache behavior. The maximum number of headers
--- that you can specify by name is 10. If you want CloudFront to forward all
--- headers to the origin and vary on all of them, specify 1 for Quantity and *
--- for Name. If you don't want CloudFront to forward any additional headers to
--- the origin or to vary on any headers, specify 0 for Quantity and omit Items.
-hQuantity :: Lens' Headers Int
-hQuantity = lens _hQuantity (\s a -> s { _hQuantity = a })
-
-instance FromXML Headers where
-    parseXML x = Headers
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML Headers where
-    toXML Headers{..} = nodes "Headers"
-        [ "Quantity" =@ _hQuantity
-        , "Items"    =@ _hItems
-        ]
-
-data CachedMethods = CachedMethods
-    { _cmItems    :: List "Method" Method
-    , _cmQuantity :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'CachedMethods' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cmItems' @::@ ['Method']
---
--- * 'cmQuantity' @::@ 'Int'
---
-cachedMethods :: Int -- ^ 'cmQuantity'
-              -> CachedMethods
-cachedMethods p1 = CachedMethods
-    { _cmQuantity = p1
-    , _cmItems    = mempty
-    }
-
--- | A complex type that contains the HTTP methods that you want CloudFront to
--- cache responses to.
-cmItems :: Lens' CachedMethods [Method]
-cmItems = lens _cmItems (\s a -> s { _cmItems = a }) . _List
-
--- | The number of HTTP methods for which you want CloudFront to cache responses.
--- Valid values are 2 (for caching responses to GET and HEAD requests) and 3
--- (for caching responses to GET, HEAD, and OPTIONS requests).
-cmQuantity :: Lens' CachedMethods Int
-cmQuantity = lens _cmQuantity (\s a -> s { _cmQuantity = a })
-
-instance FromXML CachedMethods where
-    parseXML x = CachedMethods
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML CachedMethods where
-    toXML CachedMethods{..} = nodes "CachedMethods"
-        [ "Quantity" =@ _cmQuantity
-        , "Items"    =@ _cmItems
-        ]
-
-data ViewerCertificate = ViewerCertificate
-    { _vcCloudFrontDefaultCertificate :: Maybe Bool
-    , _vcIAMCertificateId             :: Maybe Text
-    , _vcMinimumProtocolVersion       :: Maybe MinimumProtocolVersion
-    , _vcSSLSupportMethod             :: Maybe SSLSupportMethod
-    } deriving (Eq, Read, Show)
-
--- | 'ViewerCertificate' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'vcCloudFrontDefaultCertificate' @::@ 'Maybe' 'Bool'
---
--- * 'vcIAMCertificateId' @::@ 'Maybe' 'Text'
---
--- * 'vcMinimumProtocolVersion' @::@ 'Maybe' 'MinimumProtocolVersion'
---
--- * 'vcSSLSupportMethod' @::@ 'Maybe' 'SSLSupportMethod'
---
-viewerCertificate :: ViewerCertificate
-viewerCertificate = ViewerCertificate
-    { _vcIAMCertificateId             = Nothing
-    , _vcCloudFrontDefaultCertificate = Nothing
-    , _vcSSLSupportMethod             = Nothing
-    , _vcMinimumProtocolVersion       = Nothing
-    }
-
--- | If you want viewers to use HTTPS to request your objects and you're using the
--- CloudFront domain name of your distribution in your object URLs (for example,
--- https://d111111abcdef8.cloudfront.net/logo.jpg), set to true. Omit this value
--- if you are setting an IAMCertificateId.
-vcCloudFrontDefaultCertificate :: Lens' ViewerCertificate (Maybe Bool)
-vcCloudFrontDefaultCertificate =
-    lens _vcCloudFrontDefaultCertificate
-        (\s a -> s { _vcCloudFrontDefaultCertificate = a })
-
--- | If you want viewers to use HTTPS to request your objects and you're using an
--- alternate domain name in your object URLs (for example,
--- https://example.com/logo.jpg), specify the IAM certificate identifier of the
--- custom viewer certificate for this distribution. Specify either this value or
--- CloudFrontDefaultCertificate.
-vcIAMCertificateId :: Lens' ViewerCertificate (Maybe Text)
-vcIAMCertificateId =
-    lens _vcIAMCertificateId (\s a -> s { _vcIAMCertificateId = a })
-
--- | Specify the minimum version of the SSL protocol that you want CloudFront to
--- use, SSLv3 or TLSv1, for HTTPS connections. CloudFront will serve your
--- objects only to browsers or devices that support at least the SSL version
--- that you specify. The TLSv1 protocol is more secure, so we recommend that you
--- specify SSLv3 only if your users are using browsers or devices that don't
--- support TLSv1. If you're using a custom certificate (if you specify a value
--- for IAMCertificateId) and if you're using dedicated IP (if you specify vip
--- for SSLSupportMethod), you can choose SSLv3 or TLSv1 as the
--- MinimumProtocolVersion. If you're using a custom certificate (if you specify
--- a value for IAMCertificateId) and if you're using SNI (if you specify
--- sni-only for SSLSupportMethod), you must specify TLSv1 for
--- MinimumProtocolVersion.
-vcMinimumProtocolVersion :: Lens' ViewerCertificate (Maybe MinimumProtocolVersion)
-vcMinimumProtocolVersion =
-    lens _vcMinimumProtocolVersion
-        (\s a -> s { _vcMinimumProtocolVersion = a })
-
--- | If you specify a value for IAMCertificateId, you must also specify how you
--- want CloudFront to serve HTTPS requests. Valid values are vip and sni-only.
--- If you specify vip, CloudFront uses dedicated IP addresses for your content
--- and can respond to HTTPS requests from any viewer. However, you must request
--- permission to use this feature, and you incur additional monthly charges. If
--- you specify sni-only, CloudFront can only respond to HTTPS requests from
--- viewers that support Server Name Indication (SNI). All modern browsers
--- support SNI, but some browsers still in use don't support SNI. Do not specify
--- a value for SSLSupportMethod if you specified true for
--- CloudFrontDefaultCertificate.
-vcSSLSupportMethod :: Lens' ViewerCertificate (Maybe SSLSupportMethod)
-vcSSLSupportMethod =
-    lens _vcSSLSupportMethod (\s a -> s { _vcSSLSupportMethod = a })
-
-instance FromXML ViewerCertificate where
-    parseXML x = ViewerCertificate
-        <$> x .@? "CloudFrontDefaultCertificate"
-        <*> x .@? "IAMCertificateId"
-        <*> x .@? "MinimumProtocolVersion"
-        <*> x .@? "SSLSupportMethod"
-
-instance ToXML ViewerCertificate where
-    toXML ViewerCertificate{..} = nodes "ViewerCertificate"
-        [ "IAMCertificateId"             =@ _vcIAMCertificateId
-        , "CloudFrontDefaultCertificate" =@ _vcCloudFrontDefaultCertificate
-        , "SSLSupportMethod"             =@ _vcSSLSupportMethod
-        , "MinimumProtocolVersion"       =@ _vcMinimumProtocolVersion
-        ]
-
-newtype Restrictions = Restrictions
-    { _rGeoRestriction :: GeoRestriction
-    } deriving (Eq, Read, Show)
-
--- | 'Restrictions' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'rGeoRestriction' @::@ 'GeoRestriction'
---
-restrictions :: GeoRestriction -- ^ 'rGeoRestriction'
-             -> Restrictions
-restrictions p1 = Restrictions
-    { _rGeoRestriction = p1
-    }
-
-rGeoRestriction :: Lens' Restrictions GeoRestriction
-rGeoRestriction = lens _rGeoRestriction (\s a -> s { _rGeoRestriction = a })
-
-instance FromXML Restrictions where
-    parseXML x = Restrictions
-        <$> x .@  "GeoRestriction"
-
-instance ToXML Restrictions where
-    toXML Restrictions{..} = nodes "Restrictions"
-        [ "GeoRestriction" =@ _rGeoRestriction
-        ]
-
-data Origins = Origins
-    { _oItems    :: List1 "Origin" Origin
-    , _oQuantity :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'Origins' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'oItems' @::@ 'NonEmpty' 'Origin'
---
--- * 'oQuantity' @::@ 'Int'
---
-origins :: Int -- ^ 'oQuantity'
-        -> NonEmpty Origin -- ^ 'oItems'
-        -> Origins
-origins p1 p2 = Origins
-    { _oQuantity = p1
-    , _oItems    = withIso _List1 (const id) p2
-    }
-
--- | A complex type that contains origins for this distribution.
-oItems :: Lens' Origins (NonEmpty Origin)
-oItems = lens _oItems (\s a -> s { _oItems = a }) . _List1
-
--- | The number of origins for this distribution.
-oQuantity :: Lens' Origins Int
-oQuantity = lens _oQuantity (\s a -> s { _oQuantity = a })
-
-instance FromXML Origins where
-    parseXML x = Origins
-        <$> x .@  "Items"
-        <*> x .@  "Quantity"
-
-instance ToXML Origins where
-    toXML Origins{..} = nodes "Origins"
-        [ "Quantity" =@ _oQuantity
-        , "Items"    =@ _oItems
-        ]
-
-data Method
-    = Delete' -- ^ DELETE
-    | Get     -- ^ GET
-    | Head'   -- ^ HEAD
-    | Options -- ^ OPTIONS
-    | Patch   -- ^ PATCH
-    | Post    -- ^ POST
-    | Put     -- ^ PUT
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable Method
-
-instance FromText Method where
-    parser = takeLowerText >>= \case
-        "delete"  -> pure Delete'
-        "get"     -> pure Get
-        "head"    -> pure Head'
-        "options" -> pure Options
-        "patch"   -> pure Patch
-        "post"    -> pure Post
-        "put"     -> pure Put
-        e         -> fail $
-            "Failure parsing Method from " ++ show e
-
-instance ToText Method where
-    toText = \case
-        Delete' -> "DELETE"
-        Get     -> "GET"
-        Head'   -> "HEAD"
-        Options -> "OPTIONS"
-        Patch   -> "PATCH"
-        Post    -> "POST"
-        Put     -> "PUT"
-
-instance ToByteString Method
-instance ToHeader     Method
-instance ToQuery      Method
-
-instance FromXML Method where
-    parseXML = parseXMLText "Method"
-
-instance ToXML Method where
-    toXML = toXMLText
-
-data MinimumProtocolVersion
-    = SSLv3 -- ^ SSLv3
-    | TLSv1 -- ^ TLSv1
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable MinimumProtocolVersion
-
-instance FromText MinimumProtocolVersion where
-    parser = takeLowerText >>= \case
-        "sslv3" -> pure SSLv3
-        "tlsv1" -> pure TLSv1
-        e       -> fail $
-            "Failure parsing MinimumProtocolVersion from " ++ show e
-
-instance ToText MinimumProtocolVersion where
-    toText = \case
-        SSLv3 -> "SSLv3"
-        TLSv1 -> "TLSv1"
-
-instance ToByteString MinimumProtocolVersion
-instance ToHeader     MinimumProtocolVersion
-instance ToQuery      MinimumProtocolVersion
-
-instance FromXML MinimumProtocolVersion where
-    parseXML = parseXMLText "MinimumProtocolVersion"
-
-instance ToXML MinimumProtocolVersion where
-    toXML = toXMLText
-
-data ForwardedValues = ForwardedValues
-    { _fvCookies     :: CookiePreference
-    , _fvHeaders     :: Maybe Headers
-    , _fvQueryString :: Bool
-    } deriving (Eq, Read, Show)
-
--- | 'ForwardedValues' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'fvCookies' @::@ 'CookiePreference'
---
--- * 'fvHeaders' @::@ 'Maybe' 'Headers'
---
--- * 'fvQueryString' @::@ 'Bool'
---
-forwardedValues :: Bool -- ^ 'fvQueryString'
-                -> CookiePreference -- ^ 'fvCookies'
-                -> ForwardedValues
-forwardedValues p1 p2 = ForwardedValues
-    { _fvQueryString = p1
-    , _fvCookies     = p2
-    , _fvHeaders     = Nothing
-    }
-
--- | A complex type that specifies how CloudFront handles cookies.
-fvCookies :: Lens' ForwardedValues CookiePreference
-fvCookies = lens _fvCookies (\s a -> s { _fvCookies = a })
-
--- | A complex type that specifies the Headers, if any, that you want CloudFront
--- to vary upon for this cache behavior.
-fvHeaders :: Lens' ForwardedValues (Maybe Headers)
-fvHeaders = lens _fvHeaders (\s a -> s { _fvHeaders = a })
-
--- | Indicates whether you want CloudFront to forward query strings to the origin
--- that is associated with this cache behavior. If so, specify true; if not,
--- specify false.
-fvQueryString :: Lens' ForwardedValues Bool
-fvQueryString = lens _fvQueryString (\s a -> s { _fvQueryString = a })
-
-instance FromXML ForwardedValues where
-    parseXML x = ForwardedValues
-        <$> x .@  "Cookies"
-        <*> x .@? "Headers"
-        <*> x .@  "QueryString"
-
-instance ToXML ForwardedValues where
-    toXML ForwardedValues{..} = nodes "ForwardedValues"
-        [ "QueryString" =@ _fvQueryString
-        , "Cookies"     =@ _fvCookies
-        , "Headers"     =@ _fvHeaders
-        ]
-
-data TrustedSigners = TrustedSigners
-    { _tsEnabled  :: Bool
-    , _tsItems    :: List "AwsAccountNumber" Text
-    , _tsQuantity :: Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'TrustedSigners' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'tsEnabled' @::@ 'Bool'
---
--- * 'tsItems' @::@ ['Text']
---
--- * 'tsQuantity' @::@ 'Int'
---
-trustedSigners :: Bool -- ^ 'tsEnabled'
-               -> Int -- ^ 'tsQuantity'
-               -> TrustedSigners
-trustedSigners p1 p2 = TrustedSigners
-    { _tsEnabled  = p1
-    , _tsQuantity = p2
-    , _tsItems    = mempty
-    }
-
--- | Specifies whether you want to require end users to use signed URLs to access
--- the files specified by PathPattern and TargetOriginId.
-tsEnabled :: Lens' TrustedSigners Bool
-tsEnabled = lens _tsEnabled (\s a -> s { _tsEnabled = a })
-
--- | Optional: A complex type that contains trusted signers for this cache
--- behavior. If Quantity is 0, you can omit Items.
-tsItems :: Lens' TrustedSigners [Text]
-tsItems = lens _tsItems (\s a -> s { _tsItems = a }) . _List
-
--- | The number of trusted signers for this cache behavior.
-tsQuantity :: Lens' TrustedSigners Int
-tsQuantity = lens _tsQuantity (\s a -> s { _tsQuantity = a })
-
-instance FromXML TrustedSigners where
-    parseXML x = TrustedSigners
-        <$> x .@  "Enabled"
-        <*> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML TrustedSigners where
-    toXML TrustedSigners{..} = nodes "TrustedSigners"
-        [ "Enabled"  =@ _tsEnabled
-        , "Quantity" =@ _tsQuantity
-        , "Items"    =@ _tsItems
-        ]
-
-data ItemSelection
-    = All       -- ^ all
-    | None      -- ^ none
-    | Whitelist -- ^ whitelist
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable ItemSelection
-
-instance FromText ItemSelection where
-    parser = takeLowerText >>= \case
-        "all"       -> pure All
-        "none"      -> pure None
-        "whitelist" -> pure Whitelist
-        e           -> fail $
-            "Failure parsing ItemSelection from " ++ show e
-
-instance ToText ItemSelection where
-    toText = \case
-        All       -> "all"
-        None      -> "none"
-        Whitelist -> "whitelist"
-
-instance ToByteString ItemSelection
-instance ToHeader     ItemSelection
-instance ToQuery      ItemSelection
-
-instance FromXML ItemSelection where
-    parseXML = parseXMLText "ItemSelection"
-
-instance ToXML ItemSelection where
-    toXML = toXMLText
-
-data StreamingLoggingConfig = StreamingLoggingConfig
-    { _slcBucket  :: Text
-    , _slcEnabled :: Bool
-    , _slcPrefix  :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'StreamingLoggingConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'slcBucket' @::@ 'Text'
---
--- * 'slcEnabled' @::@ 'Bool'
---
--- * 'slcPrefix' @::@ 'Text'
---
-streamingLoggingConfig :: Bool -- ^ 'slcEnabled'
-                       -> Text -- ^ 'slcBucket'
-                       -> Text -- ^ 'slcPrefix'
-                       -> StreamingLoggingConfig
-streamingLoggingConfig p1 p2 p3 = StreamingLoggingConfig
-    { _slcEnabled = p1
-    , _slcBucket  = p2
-    , _slcPrefix  = p3
-    }
-
--- | The Amazon S3 bucket to store the access logs in, for example,
--- myawslogbucket.s3.amazonaws.com.
-slcBucket :: Lens' StreamingLoggingConfig Text
-slcBucket = lens _slcBucket (\s a -> s { _slcBucket = a })
-
--- | Specifies whether you want CloudFront to save access logs to an Amazon S3
--- bucket. If you do not want to enable logging when you create a streaming
--- distribution or if you want to disable logging for an existing streaming
--- distribution, specify false for Enabled, and specify empty Bucket and Prefix
--- elements. If you specify false for Enabled but you specify values for Bucket
--- and Prefix, the values are automatically deleted.
-slcEnabled :: Lens' StreamingLoggingConfig Bool
-slcEnabled = lens _slcEnabled (\s a -> s { _slcEnabled = a })
-
--- | An optional string that you want CloudFront to prefix to the access log
--- filenames for this streaming distribution, for example, myprefix/. If you
--- want to enable logging, but you do not want to specify a prefix, you still
--- must include an empty Prefix element in the Logging element.
-slcPrefix :: Lens' StreamingLoggingConfig Text
-slcPrefix = lens _slcPrefix (\s a -> s { _slcPrefix = a })
-
-instance FromXML StreamingLoggingConfig where
-    parseXML x = StreamingLoggingConfig
-        <$> x .@  "Bucket"
-        <*> x .@  "Enabled"
-        <*> x .@  "Prefix"
-
-instance ToXML StreamingLoggingConfig where
-    toXML StreamingLoggingConfig{..} = nodes "StreamingLoggingConfig"
-        [ "Enabled" =@ _slcEnabled
-        , "Bucket"  =@ _slcBucket
-        , "Prefix"  =@ _slcPrefix
-        ]
-
-data CookieNames = CookieNames
-    { _cnItems    :: List "Name" Text
-    , _cnQuantity :: Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CookieNames' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cnItems' @::@ ['Text']
---
--- * 'cnQuantity' @::@ 'Int'
---
-cookieNames :: Int -- ^ 'cnQuantity'
-            -> CookieNames
-cookieNames p1 = CookieNames
-    { _cnQuantity = p1
-    , _cnItems    = mempty
-    }
-
--- | Optional: A complex type that contains whitelisted cookies for this cache
--- behavior. If Quantity is 0, you can omit Items.
-cnItems :: Lens' CookieNames [Text]
-cnItems = lens _cnItems (\s a -> s { _cnItems = a }) . _List
-
--- | The number of whitelisted cookies for this cache behavior.
-cnQuantity :: Lens' CookieNames Int
-cnQuantity = lens _cnQuantity (\s a -> s { _cnQuantity = a })
-
-instance FromXML CookieNames where
-    parseXML x = CookieNames
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML CookieNames where
-    toXML CookieNames{..} = nodes "CookieNames"
-        [ "Quantity" =@ _cnQuantity
-        , "Items"    =@ _cnItems
-        ]
-
-data CustomErrorResponse = CustomErrorResponse
-    { _cerErrorCachingMinTTL :: Maybe Integer
-    , _cerErrorCode          :: Int
-    , _cerResponseCode       :: Maybe Text
-    , _cerResponsePagePath   :: Maybe Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'CustomErrorResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cerErrorCachingMinTTL' @::@ 'Maybe' 'Integer'
---
--- * 'cerErrorCode' @::@ 'Int'
---
--- * 'cerResponseCode' @::@ 'Maybe' 'Text'
---
--- * 'cerResponsePagePath' @::@ 'Maybe' 'Text'
---
-customErrorResponse :: Int -- ^ 'cerErrorCode'
-                    -> CustomErrorResponse
-customErrorResponse p1 = CustomErrorResponse
-    { _cerErrorCode          = p1
-    , _cerResponsePagePath   = Nothing
-    , _cerResponseCode       = Nothing
-    , _cerErrorCachingMinTTL = Nothing
-    }
-
--- | The minimum amount of time you want HTTP error codes to stay in CloudFront
--- caches before CloudFront queries your origin to see whether the object has
--- been updated. You can specify a value from 0 to 31,536,000.
-cerErrorCachingMinTTL :: Lens' CustomErrorResponse (Maybe Integer)
-cerErrorCachingMinTTL =
-    lens _cerErrorCachingMinTTL (\s a -> s { _cerErrorCachingMinTTL = a })
-
--- | The 4xx or 5xx HTTP status code that you want to customize. For a list of
--- HTTP status codes that you can customize, see CloudFront documentation.
-cerErrorCode :: Lens' CustomErrorResponse Int
-cerErrorCode = lens _cerErrorCode (\s a -> s { _cerErrorCode = a })
-
--- | The HTTP status code that you want CloudFront to return with the custom error
--- page to the viewer. For a list of HTTP status codes that you can replace, see
--- CloudFront Documentation.
-cerResponseCode :: Lens' CustomErrorResponse (Maybe Text)
-cerResponseCode = lens _cerResponseCode (\s a -> s { _cerResponseCode = a })
-
--- | The path of the custom error page (for example, /custom_404.html). The path
--- is relative to the distribution and must begin with a slash (/). If the path
--- includes any non-ASCII characters or unsafe characters as defined in RFC 1783
--- (http://www.ietf.org/rfc/rfc1738.txt), URL encode those characters. Do not
--- URL encode any other characters in the path, or CloudFront will not return
--- the custom error page to the viewer.
-cerResponsePagePath :: Lens' CustomErrorResponse (Maybe Text)
-cerResponsePagePath =
-    lens _cerResponsePagePath (\s a -> s { _cerResponsePagePath = a })
-
-instance FromXML CustomErrorResponse where
-    parseXML x = CustomErrorResponse
-        <$> x .@? "ErrorCachingMinTTL"
-        <*> x .@  "ErrorCode"
-        <*> x .@? "ResponseCode"
-        <*> x .@? "ResponsePagePath"
-
-instance ToXML CustomErrorResponse where
-    toXML CustomErrorResponse{..} = nodes "CustomErrorResponse"
-        [ "ErrorCode"          =@ _cerErrorCode
-        , "ResponsePagePath"   =@ _cerResponsePagePath
-        , "ResponseCode"       =@ _cerResponseCode
-        , "ErrorCachingMinTTL" =@ _cerErrorCachingMinTTL
-        ]
-
-data CacheBehaviors = CacheBehaviors
-    { _cbItems    :: List "CacheBehavior" CacheBehavior
-    , _cbQuantity :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'CacheBehaviors' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cbItems' @::@ ['CacheBehavior']
---
--- * 'cbQuantity' @::@ 'Int'
---
-cacheBehaviors :: Int -- ^ 'cbQuantity'
-               -> CacheBehaviors
-cacheBehaviors p1 = CacheBehaviors
-    { _cbQuantity = p1
-    , _cbItems    = mempty
-    }
-
--- | Optional: A complex type that contains cache behaviors for this distribution.
--- If Quantity is 0, you can omit Items.
-cbItems :: Lens' CacheBehaviors [CacheBehavior]
-cbItems = lens _cbItems (\s a -> s { _cbItems = a }) . _List
-
--- | The number of cache behaviors for this distribution.
-cbQuantity :: Lens' CacheBehaviors Int
-cbQuantity = lens _cbQuantity (\s a -> s { _cbQuantity = a })
-
-instance FromXML CacheBehaviors where
-    parseXML x = CacheBehaviors
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML CacheBehaviors where
-    toXML CacheBehaviors{..} = nodes "CacheBehaviors"
-        [ "Quantity" =@ _cbQuantity
-        , "Items"    =@ _cbItems
-        ]
-
-data DefaultCacheBehavior = DefaultCacheBehavior
-    { _dcbAllowedMethods       :: Maybe AllowedMethods
-    , _dcbForwardedValues      :: ForwardedValues
-    , _dcbMinTTL               :: Integer
-    , _dcbSmoothStreaming      :: Maybe Bool
-    , _dcbTargetOriginId       :: Text
-    , _dcbTrustedSigners       :: TrustedSigners
-    , _dcbViewerProtocolPolicy :: ViewerProtocolPolicy
-    } deriving (Eq, Read, Show)
-
--- | 'DefaultCacheBehavior' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dcbAllowedMethods' @::@ 'Maybe' 'AllowedMethods'
---
--- * 'dcbForwardedValues' @::@ 'ForwardedValues'
---
--- * 'dcbMinTTL' @::@ 'Integer'
---
--- * 'dcbSmoothStreaming' @::@ 'Maybe' 'Bool'
---
--- * 'dcbTargetOriginId' @::@ 'Text'
---
--- * 'dcbTrustedSigners' @::@ 'TrustedSigners'
---
--- * 'dcbViewerProtocolPolicy' @::@ 'ViewerProtocolPolicy'
---
-defaultCacheBehavior :: Text -- ^ 'dcbTargetOriginId'
-                     -> ForwardedValues -- ^ 'dcbForwardedValues'
-                     -> TrustedSigners -- ^ 'dcbTrustedSigners'
-                     -> ViewerProtocolPolicy -- ^ 'dcbViewerProtocolPolicy'
-                     -> Integer -- ^ 'dcbMinTTL'
-                     -> DefaultCacheBehavior
-defaultCacheBehavior p1 p2 p3 p4 p5 = DefaultCacheBehavior
-    { _dcbTargetOriginId       = p1
-    , _dcbForwardedValues      = p2
-    , _dcbTrustedSigners       = p3
-    , _dcbViewerProtocolPolicy = p4
-    , _dcbMinTTL               = p5
-    , _dcbAllowedMethods       = Nothing
-    , _dcbSmoothStreaming      = Nothing
-    }
-
-dcbAllowedMethods :: Lens' DefaultCacheBehavior (Maybe AllowedMethods)
-dcbAllowedMethods =
-    lens _dcbAllowedMethods (\s a -> s { _dcbAllowedMethods = a })
-
--- | A complex type that specifies how CloudFront handles query strings, cookies
--- and headers.
-dcbForwardedValues :: Lens' DefaultCacheBehavior ForwardedValues
-dcbForwardedValues =
-    lens _dcbForwardedValues (\s a -> s { _dcbForwardedValues = a })
-
--- | The minimum amount of time that you want objects to stay in CloudFront caches
--- before CloudFront queries your origin to see whether the object has been
--- updated.You can specify a value from 0 to 3,153,600,000 seconds (100 years).
-dcbMinTTL :: Lens' DefaultCacheBehavior Integer
-dcbMinTTL = lens _dcbMinTTL (\s a -> s { _dcbMinTTL = a })
-
--- | Indicates whether you want to distribute media files in Microsoft Smooth
--- Streaming format using the origin that is associated with this cache
--- behavior. If so, specify true; if not, specify false.
-dcbSmoothStreaming :: Lens' DefaultCacheBehavior (Maybe Bool)
-dcbSmoothStreaming =
-    lens _dcbSmoothStreaming (\s a -> s { _dcbSmoothStreaming = a })
-
--- | The value of ID for the origin that you want CloudFront to route requests to
--- when a request matches the path pattern either for a cache behavior or for
--- the default cache behavior.
-dcbTargetOriginId :: Lens' DefaultCacheBehavior Text
-dcbTargetOriginId =
-    lens _dcbTargetOriginId (\s a -> s { _dcbTargetOriginId = a })
-
--- | A complex type that specifies the AWS accounts, if any, that you want to
--- allow to create signed URLs for private content. If you want to require
--- signed URLs in requests for objects in the target origin that match the
--- PathPattern for this cache behavior, specify true for Enabled, and specify
--- the applicable values for Quantity and Items. For more information, go to
--- Using a Signed URL to Serve Private Content in the Amazon CloudFront
--- Developer Guide. If you don't want to require signed URLs in requests for
--- objects that match PathPattern, specify false for Enabled and 0 for Quantity.
--- Omit Items. To add, change, or remove one or more trusted signers, change
--- Enabled to true (if it's currently false), change Quantity as applicable, and
--- specify all of the trusted signers that you want to include in the updated
--- distribution.
-dcbTrustedSigners :: Lens' DefaultCacheBehavior TrustedSigners
-dcbTrustedSigners =
-    lens _dcbTrustedSigners (\s a -> s { _dcbTrustedSigners = a })
-
--- | Use this element to specify the protocol that users can use to access the
--- files in the origin specified by TargetOriginId when a request matches the
--- path pattern in PathPattern. If you want CloudFront to allow end users to use
--- any available protocol, specify allow-all. If you want CloudFront to require
--- HTTPS, specify https. If you want CloudFront to respond to an HTTP request
--- with an HTTP status code of 301 (Moved Permanently) and the HTTPS URL,
--- specify redirect-to-https. The viewer then resubmits the request using the
--- HTTPS URL.
-dcbViewerProtocolPolicy :: Lens' DefaultCacheBehavior ViewerProtocolPolicy
-dcbViewerProtocolPolicy =
-    lens _dcbViewerProtocolPolicy (\s a -> s { _dcbViewerProtocolPolicy = a })
-
-instance FromXML DefaultCacheBehavior where
-    parseXML x = DefaultCacheBehavior
-        <$> x .@? "AllowedMethods"
-        <*> x .@  "ForwardedValues"
-        <*> x .@  "MinTTL"
-        <*> x .@? "SmoothStreaming"
-        <*> x .@  "TargetOriginId"
-        <*> x .@  "TrustedSigners"
-        <*> x .@  "ViewerProtocolPolicy"
-
-instance ToXML DefaultCacheBehavior where
-    toXML DefaultCacheBehavior{..} = nodes "DefaultCacheBehavior"
-        [ "TargetOriginId"       =@ _dcbTargetOriginId
-        , "ForwardedValues"      =@ _dcbForwardedValues
-        , "TrustedSigners"       =@ _dcbTrustedSigners
-        , "ViewerProtocolPolicy" =@ _dcbViewerProtocolPolicy
-        , "MinTTL"               =@ _dcbMinTTL
-        , "AllowedMethods"       =@ _dcbAllowedMethods
-        , "SmoothStreaming"      =@ _dcbSmoothStreaming
-        ]
-
-data InvalidationList = InvalidationList
-    { _ilIsTruncated :: Bool
-    , _ilItems       :: List "InvalidationSummary" InvalidationSummary
-    , _ilMarker      :: Text
-    , _ilMaxItems    :: Int
-    , _ilNextMarker  :: Maybe Text
-    , _ilQuantity    :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'InvalidationList' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ilIsTruncated' @::@ 'Bool'
---
--- * 'ilItems' @::@ ['InvalidationSummary']
---
--- * 'ilMarker' @::@ 'Text'
---
--- * 'ilMaxItems' @::@ 'Int'
---
--- * 'ilNextMarker' @::@ 'Maybe' 'Text'
---
--- * 'ilQuantity' @::@ 'Int'
---
-invalidationList :: Text -- ^ 'ilMarker'
-                 -> Int -- ^ 'ilMaxItems'
-                 -> Bool -- ^ 'ilIsTruncated'
-                 -> Int -- ^ 'ilQuantity'
-                 -> InvalidationList
-invalidationList p1 p2 p3 p4 = InvalidationList
-    { _ilMarker      = p1
-    , _ilMaxItems    = p2
-    , _ilIsTruncated = p3
-    , _ilQuantity    = p4
-    , _ilNextMarker  = Nothing
-    , _ilItems       = mempty
-    }
-
--- | A flag that indicates whether more invalidation batch requests remain to be
--- listed. If your results were truncated, you can make a follow-up pagination
--- request using the Marker request parameter to retrieve more invalidation
--- batches in the list.
-ilIsTruncated :: Lens' InvalidationList Bool
-ilIsTruncated = lens _ilIsTruncated (\s a -> s { _ilIsTruncated = a })
-
--- | A complex type that contains one InvalidationSummary element for each
--- invalidation batch that was created by the current AWS account.
-ilItems :: Lens' InvalidationList [InvalidationSummary]
-ilItems = lens _ilItems (\s a -> s { _ilItems = a }) . _List
-
--- | The value you provided for the Marker request parameter.
-ilMarker :: Lens' InvalidationList Text
-ilMarker = lens _ilMarker (\s a -> s { _ilMarker = a })
-
--- | The value you provided for the MaxItems request parameter.
-ilMaxItems :: Lens' InvalidationList Int
-ilMaxItems = lens _ilMaxItems (\s a -> s { _ilMaxItems = a })
-
--- | If IsTruncated is true, this element is present and contains the value you
--- can use for the Marker request parameter to continue listing your
--- invalidation batches where they left off.
-ilNextMarker :: Lens' InvalidationList (Maybe Text)
-ilNextMarker = lens _ilNextMarker (\s a -> s { _ilNextMarker = a })
-
--- | The number of invalidation batches that were created by the current AWS
--- account.
-ilQuantity :: Lens' InvalidationList Int
-ilQuantity = lens _ilQuantity (\s a -> s { _ilQuantity = a })
-
-instance FromXML InvalidationList where
-    parseXML x = InvalidationList
-        <$> x .@  "IsTruncated"
-        <*> x .@? "Items" .!@ mempty
-        <*> x .@  "Marker"
-        <*> x .@  "MaxItems"
-        <*> x .@? "NextMarker"
-        <*> x .@  "Quantity"
-
-instance ToXML InvalidationList where
-    toXML InvalidationList{..} = nodes "InvalidationList"
-        [ "Marker"      =@ _ilMarker
-        , "NextMarker"  =@ _ilNextMarker
-        , "MaxItems"    =@ _ilMaxItems
-        , "IsTruncated" =@ _ilIsTruncated
-        , "Quantity"    =@ _ilQuantity
-        , "Items"       =@ _ilItems
-        ]
-
-data StreamingDistribution = StreamingDistribution
-    { _sdActiveTrustedSigners        :: ActiveTrustedSigners
-    , _sdDomainName                  :: Text
-    , _sdId                          :: Text
-    , _sdLastModifiedTime            :: Maybe ISO8601
-    , _sdStatus                      :: Text
-    , _sdStreamingDistributionConfig :: StreamingDistributionConfig
-    } deriving (Eq, Read, Show)
-
--- | 'StreamingDistribution' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'sdActiveTrustedSigners' @::@ 'ActiveTrustedSigners'
---
--- * 'sdDomainName' @::@ 'Text'
---
--- * 'sdId' @::@ 'Text'
---
--- * 'sdLastModifiedTime' @::@ 'Maybe' 'UTCTime'
---
--- * 'sdStatus' @::@ 'Text'
---
--- * 'sdStreamingDistributionConfig' @::@ 'StreamingDistributionConfig'
---
-streamingDistribution :: Text -- ^ 'sdId'
-                      -> Text -- ^ 'sdStatus'
-                      -> Text -- ^ 'sdDomainName'
-                      -> ActiveTrustedSigners -- ^ 'sdActiveTrustedSigners'
-                      -> StreamingDistributionConfig -- ^ 'sdStreamingDistributionConfig'
-                      -> StreamingDistribution
-streamingDistribution p1 p2 p3 p4 p5 = StreamingDistribution
-    { _sdId                          = p1
-    , _sdStatus                      = p2
-    , _sdDomainName                  = p3
-    , _sdActiveTrustedSigners        = p4
-    , _sdStreamingDistributionConfig = p5
-    , _sdLastModifiedTime            = Nothing
-    }
-
--- | CloudFront automatically adds this element to the response only if you've set
--- up the distribution to serve private content with signed URLs. The element
--- lists the key pair IDs that CloudFront is aware of for each trusted signer.
--- The Signer child element lists the AWS account number of the trusted signer
--- (or an empty Self element if the signer is you). The Signer element also
--- includes the IDs of any active key pairs associated with the trusted signer's
--- AWS account. If no KeyPairId element appears for a Signer, that signer can't
--- create working signed URLs.
-sdActiveTrustedSigners :: Lens' StreamingDistribution ActiveTrustedSigners
-sdActiveTrustedSigners =
-    lens _sdActiveTrustedSigners (\s a -> s { _sdActiveTrustedSigners = a })
-
--- | The domain name corresponding to the streaming distribution. For example:
--- s5c39gqb8ow64r.cloudfront.net.
-sdDomainName :: Lens' StreamingDistribution Text
-sdDomainName = lens _sdDomainName (\s a -> s { _sdDomainName = a })
-
--- | The identifier for the streaming distribution. For example: EGTXBD79H29TRA8.
-sdId :: Lens' StreamingDistribution Text
-sdId = lens _sdId (\s a -> s { _sdId = a })
-
--- | The date and time the distribution was last modified.
-sdLastModifiedTime :: Lens' StreamingDistribution (Maybe UTCTime)
-sdLastModifiedTime =
-    lens _sdLastModifiedTime (\s a -> s { _sdLastModifiedTime = a })
-        . mapping _Time
-
--- | The current status of the streaming distribution. When the status is
--- Deployed, the distribution's information is fully propagated throughout the
--- Amazon CloudFront system.
-sdStatus :: Lens' StreamingDistribution Text
-sdStatus = lens _sdStatus (\s a -> s { _sdStatus = a })
-
--- | The current configuration information for the streaming distribution.
-sdStreamingDistributionConfig :: Lens' StreamingDistribution StreamingDistributionConfig
-sdStreamingDistributionConfig =
-    lens _sdStreamingDistributionConfig
-        (\s a -> s { _sdStreamingDistributionConfig = a })
-
-instance FromXML StreamingDistribution where
-    parseXML x = StreamingDistribution
-        <$> x .@  "ActiveTrustedSigners"
-        <*> x .@  "DomainName"
-        <*> x .@  "Id"
-        <*> x .@? "LastModifiedTime"
-        <*> x .@  "Status"
-        <*> x .@  "StreamingDistributionConfig"
-
-instance ToXMLRoot StreamingDistribution where
-    toXMLRoot StreamingDistribution{..} = namespaced ns "StreamingDistribution"
-        [ "Id"                          =@ _sdId
-        , "Status"                      =@ _sdStatus
-        , "LastModifiedTime"            =@ _sdLastModifiedTime
-        , "DomainName"                  =@ _sdDomainName
-        , "ActiveTrustedSigners"        =@ _sdActiveTrustedSigners
-        , "StreamingDistributionConfig" =@ _sdStreamingDistributionConfig
-        ]
-
-instance ToXML StreamingDistribution
-
-data Paths = Paths
-    { _pItems    :: List "Path" Text
-    , _pQuantity :: Int
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'Paths' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'pItems' @::@ ['Text']
---
--- * 'pQuantity' @::@ 'Int'
---
-paths :: Int -- ^ 'pQuantity'
-      -> Paths
-paths p1 = Paths
-    { _pQuantity = p1
-    , _pItems    = mempty
-    }
-
--- | A complex type that contains a list of the objects that you want to
--- invalidate.
-pItems :: Lens' Paths [Text]
-pItems = lens _pItems (\s a -> s { _pItems = a }) . _List
-
--- | The number of objects that you want to invalidate.
-pQuantity :: Lens' Paths Int
-pQuantity = lens _pQuantity (\s a -> s { _pQuantity = a })
-
-instance FromXML Paths where
-    parseXML x = Paths
-        <$> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML Paths where
-    toXML Paths{..} = nodes "Paths"
-        [ "Quantity" =@ _pQuantity
-        , "Items"    =@ _pItems
-        ]
-
-data CloudFrontOriginAccessIdentity = CloudFrontOriginAccessIdentity
-    { _cfoaiCloudFrontOriginAccessIdentityConfig :: Maybe CloudFrontOriginAccessIdentityConfig
-    , _cfoaiId                                   :: Text
-    , _cfoaiS3CanonicalUserId                    :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'CloudFrontOriginAccessIdentity' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'cfoaiCloudFrontOriginAccessIdentityConfig' @::@ 'Maybe' 'CloudFrontOriginAccessIdentityConfig'
---
--- * 'cfoaiId' @::@ 'Text'
---
--- * 'cfoaiS3CanonicalUserId' @::@ 'Text'
---
-cloudFrontOriginAccessIdentity :: Text -- ^ 'cfoaiId'
-                               -> Text -- ^ 'cfoaiS3CanonicalUserId'
-                               -> CloudFrontOriginAccessIdentity
-cloudFrontOriginAccessIdentity p1 p2 = CloudFrontOriginAccessIdentity
-    { _cfoaiId                                   = p1
-    , _cfoaiS3CanonicalUserId                    = p2
-    , _cfoaiCloudFrontOriginAccessIdentityConfig = Nothing
-    }
-
--- | The current configuration information for the identity.
-cfoaiCloudFrontOriginAccessIdentityConfig :: Lens' CloudFrontOriginAccessIdentity (Maybe CloudFrontOriginAccessIdentityConfig)
-cfoaiCloudFrontOriginAccessIdentityConfig =
-    lens _cfoaiCloudFrontOriginAccessIdentityConfig
-        (\s a -> s { _cfoaiCloudFrontOriginAccessIdentityConfig = a })
-
--- | The ID for the origin access identity. For example: E74FTE3AJFJ256A.
-cfoaiId :: Lens' CloudFrontOriginAccessIdentity Text
-cfoaiId = lens _cfoaiId (\s a -> s { _cfoaiId = a })
-
--- | The Amazon S3 canonical user ID for the origin access identity, which you use
--- when giving the origin access identity read permission to an object in Amazon
--- S3.
-cfoaiS3CanonicalUserId :: Lens' CloudFrontOriginAccessIdentity Text
-cfoaiS3CanonicalUserId =
-    lens _cfoaiS3CanonicalUserId (\s a -> s { _cfoaiS3CanonicalUserId = a })
-
-instance FromXML CloudFrontOriginAccessIdentity where
-    parseXML x = CloudFrontOriginAccessIdentity
-        <$> x .@? "CloudFrontOriginAccessIdentityConfig"
-        <*> x .@  "Id"
-        <*> x .@  "S3CanonicalUserId"
-
-instance ToXMLRoot CloudFrontOriginAccessIdentity where
-    toXMLRoot CloudFrontOriginAccessIdentity{..} = namespaced ns "CloudFrontOriginAccessIdentity"
-        [ "Id"                                   =@ _cfoaiId
-        , "S3CanonicalUserId"                    =@ _cfoaiS3CanonicalUserId
-        , "CloudFrontOriginAccessIdentityConfig" =@ _cfoaiCloudFrontOriginAccessIdentityConfig
-        ]
-
-instance ToXML CloudFrontOriginAccessIdentity
-
-data ActiveTrustedSigners = ActiveTrustedSigners
-    { _atsEnabled  :: Bool
-    , _atsItems    :: List "Signer" Signer
-    , _atsQuantity :: Int
-    } deriving (Eq, Read, Show)
-
--- | 'ActiveTrustedSigners' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'atsEnabled' @::@ 'Bool'
---
--- * 'atsItems' @::@ ['Signer']
---
--- * 'atsQuantity' @::@ 'Int'
---
-activeTrustedSigners :: Bool -- ^ 'atsEnabled'
-                     -> Int -- ^ 'atsQuantity'
-                     -> ActiveTrustedSigners
-activeTrustedSigners p1 p2 = ActiveTrustedSigners
-    { _atsEnabled  = p1
-    , _atsQuantity = p2
-    , _atsItems    = mempty
-    }
-
--- | Each active trusted signer.
-atsEnabled :: Lens' ActiveTrustedSigners Bool
-atsEnabled = lens _atsEnabled (\s a -> s { _atsEnabled = a })
-
--- | A complex type that contains one Signer complex type for each unique trusted
--- signer that is specified in the TrustedSigners complex type, including
--- trusted signers in the default cache behavior and in all of the other cache
--- behaviors.
-atsItems :: Lens' ActiveTrustedSigners [Signer]
-atsItems = lens _atsItems (\s a -> s { _atsItems = a }) . _List
-
--- | The number of unique trusted signers included in all cache behaviors. For
--- example, if three cache behaviors all list the same three AWS accounts, the
--- value of Quantity for ActiveTrustedSigners will be 3.
-atsQuantity :: Lens' ActiveTrustedSigners Int
-atsQuantity = lens _atsQuantity (\s a -> s { _atsQuantity = a })
-
-instance FromXML ActiveTrustedSigners where
-    parseXML x = ActiveTrustedSigners
-        <$> x .@  "Enabled"
-        <*> x .@? "Items" .!@ mempty
-        <*> x .@  "Quantity"
-
-instance ToXML ActiveTrustedSigners where
-    toXML ActiveTrustedSigners{..} = nodes "ActiveTrustedSigners"
-        [ "Enabled"  =@ _atsEnabled
-        , "Quantity" =@ _atsQuantity
-        , "Items"    =@ _atsItems
-        ]
-
-data DistributionSummary = DistributionSummary
-    { _dsAliases              :: Aliases
-    , _dsCacheBehaviors       :: CacheBehaviors
-    , _dsComment              :: Text
-    , _dsCustomErrorResponses :: CustomErrorResponses
-    , _dsDefaultCacheBehavior :: DefaultCacheBehavior
-    , _dsDomainName           :: Text
-    , _dsEnabled              :: Bool
-    , _dsId                   :: Text
-    , _dsLastModifiedTime     :: ISO8601
-    , _dsOrigins              :: Origins
-    , _dsPriceClass           :: PriceClass
-    , _dsRestrictions         :: Restrictions
-    , _dsStatus               :: Text
-    , _dsViewerCertificate    :: ViewerCertificate
-    } deriving (Eq, Read, Show)
-
--- | 'DistributionSummary' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'dsAliases' @::@ 'Aliases'
---
--- * 'dsCacheBehaviors' @::@ 'CacheBehaviors'
---
--- * 'dsComment' @::@ 'Text'
---
--- * 'dsCustomErrorResponses' @::@ 'CustomErrorResponses'
---
--- * 'dsDefaultCacheBehavior' @::@ 'DefaultCacheBehavior'
---
--- * 'dsDomainName' @::@ 'Text'
---
--- * 'dsEnabled' @::@ 'Bool'
---
--- * 'dsId' @::@ 'Text'
---
--- * 'dsLastModifiedTime' @::@ 'UTCTime'
---
--- * 'dsOrigins' @::@ 'Origins'
---
--- * 'dsPriceClass' @::@ 'PriceClass'
---
--- * 'dsRestrictions' @::@ 'Restrictions'
---
--- * 'dsStatus' @::@ 'Text'
---
--- * 'dsViewerCertificate' @::@ 'ViewerCertificate'
---
-distributionSummary :: Text -- ^ 'dsId'
-                    -> Text -- ^ 'dsStatus'
-                    -> UTCTime -- ^ 'dsLastModifiedTime'
-                    -> Text -- ^ 'dsDomainName'
-                    -> Aliases -- ^ 'dsAliases'
-                    -> Origins -- ^ 'dsOrigins'
-                    -> DefaultCacheBehavior -- ^ 'dsDefaultCacheBehavior'
-                    -> CacheBehaviors -- ^ 'dsCacheBehaviors'
-                    -> CustomErrorResponses -- ^ 'dsCustomErrorResponses'
-                    -> Text -- ^ 'dsComment'
-                    -> PriceClass -- ^ 'dsPriceClass'
-                    -> Bool -- ^ 'dsEnabled'
-                    -> ViewerCertificate -- ^ 'dsViewerCertificate'
-                    -> Restrictions -- ^ 'dsRestrictions'
-                    -> DistributionSummary
-distributionSummary p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 = DistributionSummary
-    { _dsId                   = p1
-    , _dsStatus               = p2
-    , _dsLastModifiedTime     = withIso _Time (const id) p3
-    , _dsDomainName           = p4
-    , _dsAliases              = p5
-    , _dsOrigins              = p6
-    , _dsDefaultCacheBehavior = p7
-    , _dsCacheBehaviors       = p8
-    , _dsCustomErrorResponses = p9
-    , _dsComment              = p10
-    , _dsPriceClass           = p11
-    , _dsEnabled              = p12
-    , _dsViewerCertificate    = p13
-    , _dsRestrictions         = p14
-    }
-
--- | A complex type that contains information about CNAMEs (alternate domain
--- names), if any, for this distribution.
-dsAliases :: Lens' DistributionSummary Aliases
-dsAliases = lens _dsAliases (\s a -> s { _dsAliases = a })
-
--- | A complex type that contains zero or more CacheBehavior elements.
-dsCacheBehaviors :: Lens' DistributionSummary CacheBehaviors
-dsCacheBehaviors = lens _dsCacheBehaviors (\s a -> s { _dsCacheBehaviors = a })
-
--- | The comment originally specified when this distribution was created.
-dsComment :: Lens' DistributionSummary Text
-dsComment = lens _dsComment (\s a -> s { _dsComment = a })
-
--- | A complex type that contains zero or more CustomErrorResponses elements.
-dsCustomErrorResponses :: Lens' DistributionSummary CustomErrorResponses
-dsCustomErrorResponses =
-    lens _dsCustomErrorResponses (\s a -> s { _dsCustomErrorResponses = a })
-
--- | A complex type that describes the default cache behavior if you do not
--- specify a CacheBehavior element or if files don't match any of the values of
--- PathPattern in CacheBehavior elements.You must create exactly one default
--- cache behavior.
-dsDefaultCacheBehavior :: Lens' DistributionSummary DefaultCacheBehavior
-dsDefaultCacheBehavior =
-    lens _dsDefaultCacheBehavior (\s a -> s { _dsDefaultCacheBehavior = a })
-
--- | The domain name corresponding to the distribution. For example:
--- d604721fxaaqy9.cloudfront.net.
-dsDomainName :: Lens' DistributionSummary Text
-dsDomainName = lens _dsDomainName (\s a -> s { _dsDomainName = a })
-
--- | Whether the distribution is enabled to accept end user requests for content.
-dsEnabled :: Lens' DistributionSummary Bool
-dsEnabled = lens _dsEnabled (\s a -> s { _dsEnabled = a })
-
--- | The identifier for the distribution. For example: EDFDVBD632BHDS5.
-dsId :: Lens' DistributionSummary Text
-dsId = lens _dsId (\s a -> s { _dsId = a })
-
--- | The date and time the distribution was last modified.
-dsLastModifiedTime :: Lens' DistributionSummary UTCTime
-dsLastModifiedTime =
-    lens _dsLastModifiedTime (\s a -> s { _dsLastModifiedTime = a })
-        . _Time
-
--- | A complex type that contains information about origins for this distribution.
-dsOrigins :: Lens' DistributionSummary Origins
-dsOrigins = lens _dsOrigins (\s a -> s { _dsOrigins = a })
-
-dsPriceClass :: Lens' DistributionSummary PriceClass
-dsPriceClass = lens _dsPriceClass (\s a -> s { _dsPriceClass = a })
-
-dsRestrictions :: Lens' DistributionSummary Restrictions
-dsRestrictions = lens _dsRestrictions (\s a -> s { _dsRestrictions = a })
-
--- | This response element indicates the current status of the distribution. When
--- the status is Deployed, the distribution's information is fully propagated
--- throughout the Amazon CloudFront system.
-dsStatus :: Lens' DistributionSummary Text
-dsStatus = lens _dsStatus (\s a -> s { _dsStatus = a })
-
-dsViewerCertificate :: Lens' DistributionSummary ViewerCertificate
-dsViewerCertificate =
-    lens _dsViewerCertificate (\s a -> s { _dsViewerCertificate = a })
-
-instance FromXML DistributionSummary where
-    parseXML x = DistributionSummary
-        <$> x .@  "Aliases"
-        <*> x .@  "CacheBehaviors"
-        <*> x .@  "Comment"
-        <*> x .@  "CustomErrorResponses"
-        <*> x .@  "DefaultCacheBehavior"
-        <*> x .@  "DomainName"
-        <*> x .@  "Enabled"
-        <*> x .@  "Id"
-        <*> x .@  "LastModifiedTime"
-        <*> x .@  "Origins"
-        <*> x .@  "PriceClass"
-        <*> x .@  "Restrictions"
-        <*> x .@  "Status"
-        <*> x .@  "ViewerCertificate"
-
-instance ToXML DistributionSummary where
-    toXML DistributionSummary{..} = nodes "DistributionSummary"
-        [ "Id"                   =@ _dsId
-        , "Status"               =@ _dsStatus
-        , "LastModifiedTime"     =@ _dsLastModifiedTime
-        , "DomainName"           =@ _dsDomainName
-        , "Aliases"              =@ _dsAliases
-        , "Origins"              =@ _dsOrigins
-        , "DefaultCacheBehavior" =@ _dsDefaultCacheBehavior
-        , "CacheBehaviors"       =@ _dsCacheBehaviors
-        , "CustomErrorResponses" =@ _dsCustomErrorResponses
-        , "Comment"              =@ _dsComment
-        , "PriceClass"           =@ _dsPriceClass
-        , "Enabled"              =@ _dsEnabled
-        , "ViewerCertificate"    =@ _dsViewerCertificate
-        , "Restrictions"         =@ _dsRestrictions
-        ]
-
-data GeoRestrictionType
-    = GRTBlacklist -- ^ blacklist
-    | GRTNone      -- ^ none
-    | GRTWhitelist -- ^ whitelist
-      deriving (Eq, Ord, Read, Show, Generic, Enum)
-
-instance Hashable GeoRestrictionType
-
-instance FromText GeoRestrictionType where
-    parser = takeLowerText >>= \case
-        "blacklist" -> pure GRTBlacklist
-        "none"      -> pure GRTNone
-        "whitelist" -> pure GRTWhitelist
-        e           -> fail $
-            "Failure parsing GeoRestrictionType from " ++ show e
-
-instance ToText GeoRestrictionType where
-    toText = \case
-        GRTBlacklist -> "blacklist"
-        GRTNone      -> "none"
-        GRTWhitelist -> "whitelist"
-
-instance ToByteString GeoRestrictionType
-instance ToHeader     GeoRestrictionType
-instance ToQuery      GeoRestrictionType
-
-instance FromXML GeoRestrictionType where
-    parseXML = parseXMLText "GeoRestrictionType"
-
-instance ToXML GeoRestrictionType where
-    toXML = toXMLText
-
-data LoggingConfig = LoggingConfig
-    { _lcBucket         :: Text
-    , _lcEnabled        :: Bool
-    , _lcIncludeCookies :: Bool
-    , _lcPrefix         :: Text
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'LoggingConfig' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lcBucket' @::@ 'Text'
---
--- * 'lcEnabled' @::@ 'Bool'
---
--- * 'lcIncludeCookies' @::@ 'Bool'
---
--- * 'lcPrefix' @::@ 'Text'
---
-loggingConfig :: Bool -- ^ 'lcEnabled'
-              -> Bool -- ^ 'lcIncludeCookies'
-              -> Text -- ^ 'lcBucket'
-              -> Text -- ^ 'lcPrefix'
-              -> LoggingConfig
-loggingConfig p1 p2 p3 p4 = LoggingConfig
-    { _lcEnabled        = p1
-    , _lcIncludeCookies = p2
-    , _lcBucket         = p3
-    , _lcPrefix         = p4
-    }
-
--- | The Amazon S3 bucket to store the access logs in, for example,
--- myawslogbucket.s3.amazonaws.com.
-lcBucket :: Lens' LoggingConfig Text
-lcBucket = lens _lcBucket (\s a -> s { _lcBucket = a })
-
--- | Specifies whether you want CloudFront to save access logs to an Amazon S3
--- bucket. If you do not want to enable logging when you create a distribution
--- or if you want to disable logging for an existing distribution, specify false
--- for Enabled, and specify empty Bucket and Prefix elements. If you specify
--- false for Enabled but you specify values for Bucket, prefix and
--- IncludeCookies, the values are automatically deleted.
-lcEnabled :: Lens' LoggingConfig Bool
-lcEnabled = lens _lcEnabled (\s a -> s { _lcEnabled = a })
-
--- | Specifies whether you want CloudFront to include cookies in access logs,
--- specify true for IncludeCookies. If you choose to include cookies in logs,
--- CloudFront logs all cookies regardless of how you configure the cache
--- behaviors for this distribution. If you do not want to include cookies when
--- you create a distribution or if you want to disable include cookies for an
--- existing distribution, specify false for IncludeCookies.
-lcIncludeCookies :: Lens' LoggingConfig Bool
-lcIncludeCookies = lens _lcIncludeCookies (\s a -> s { _lcIncludeCookies = a })
-
--- | An optional string that you want CloudFront to prefix to the access log
--- filenames for this distribution, for example, myprefix/. If you want to
--- enable logging, but you do not want to specify a prefix, you still must
--- include an empty Prefix element in the Logging element.
-lcPrefix :: Lens' LoggingConfig Text
-lcPrefix = lens _lcPrefix (\s a -> s { _lcPrefix = a })
-
-instance FromXML LoggingConfig where
-    parseXML x = LoggingConfig
-        <$> x .@  "Bucket"
-        <*> x .@  "Enabled"
-        <*> x .@  "IncludeCookies"
-        <*> x .@  "Prefix"
-
-instance ToXML LoggingConfig where
-    toXML LoggingConfig{..} = nodes "LoggingConfig"
-        [ "Enabled"        =@ _lcEnabled
-        , "IncludeCookies" =@ _lcIncludeCookies
-        , "Bucket"         =@ _lcBucket
-        , "Prefix"         =@ _lcPrefix
-        ]
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.CloudFront.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.CloudFront.Types
+    (
+    -- * Service
+      CloudFront
+
+    -- * Errors
+    , _InvalidErrorCode
+    , _TooManyCacheBehaviors
+    , _DistributionNotDisabled
+    , _InvalidOriginAccessIdentity
+    , _TooManyCloudFrontOriginAccessIdentities
+    , _TooManyStreamingDistributions
+    , _InvalidArgument
+    , _NoSuchCloudFrontOriginAccessIdentity
+    , _NoSuchStreamingDistribution
+    , _CloudFrontOriginAccessIdentityInUse
+    , _InconsistentQuantities
+    , _TooManyInvalidationsInProgress
+    , _TooManyDistributionCNAMEs
+    , _InvalidForwardCookies
+    , _TooManyCookieNamesInWhiteList
+    , _BatchTooLarge
+    , _InvalidOrigin
+    , _TooManyTrustedSigners
+    , _NoSuchOrigin
+    , _NoSuchInvalidation
+    , _StreamingDistributionNotDisabled
+    , _InvalidTTLOrder
+    , _TooManyStreamingDistributionCNAMEs
+    , _TooManyDistributions
+    , _InvalidRequiredProtocol
+    , _TooManyHeadersInForwardedValues
+    , _TooManyCertificates
+    , _MissingBody
+    , _DistributionAlreadyExists
+    , _IllegalUpdate
+    , _InvalidResponseCode
+    , _InvalidIfMatchVersion
+    , _PreconditionFailed
+    , _InvalidProtocolSettings
+    , _TrustedSignerDoesNotExist
+    , _InvalidHeadersForS3Origin
+    , _CNAMEAlreadyExists
+    , _StreamingDistributionAlreadyExists
+    , _TooManyOrigins
+    , _CloudFrontOriginAccessIdentityAlreadyExists
+    , _InvalidRelativePath
+    , _InvalidMinimumProtocolVersion
+    , _AccessDenied
+    , _NoSuchDistribution
+    , _InvalidViewerCertificate
+    , _InvalidDefaultRootObject
+    , _InvalidLocationCode
+    , _InvalidGeoRestrictionParameter
+
+    -- * GeoRestrictionType
+    , GeoRestrictionType (..)
+
+    -- * ItemSelection
+    , ItemSelection (..)
+
+    -- * Method
+    , Method (..)
+
+    -- * MinimumProtocolVersion
+    , MinimumProtocolVersion (..)
+
+    -- * OriginProtocolPolicy
+    , OriginProtocolPolicy (..)
+
+    -- * PriceClass
+    , PriceClass (..)
+
+    -- * SSLSupportMethod
+    , SSLSupportMethod (..)
+
+    -- * ViewerProtocolPolicy
+    , ViewerProtocolPolicy (..)
+
+    -- * ActiveTrustedSigners
+    , ActiveTrustedSigners
+    , activeTrustedSigners
+    , atsItems
+    , atsEnabled
+    , atsQuantity
+
+    -- * Aliases
+    , Aliases
+    , aliases
+    , aItems
+    , aQuantity
+
+    -- * AllowedMethods
+    , AllowedMethods
+    , allowedMethods
+    , amCachedMethods
+    , amQuantity
+    , amItems
+
+    -- * CacheBehavior
+    , CacheBehavior
+    , cacheBehavior
+    , cbAllowedMethods
+    , cbMaxTTL
+    , cbSmoothStreaming
+    , cbDefaultTTL
+    , cbPathPattern
+    , cbTargetOriginId
+    , cbForwardedValues
+    , cbTrustedSigners
+    , cbViewerProtocolPolicy
+    , cbMinTTL
+
+    -- * CacheBehaviors
+    , CacheBehaviors
+    , cacheBehaviors
+    , cbItems
+    , cbQuantity
+
+    -- * CachedMethods
+    , CachedMethods
+    , cachedMethods
+    , cmQuantity
+    , cmItems
+
+    -- * CloudFrontOriginAccessIdentity
+    , CloudFrontOriginAccessIdentity
+    , cloudFrontOriginAccessIdentity
+    , cfoaiCloudFrontOriginAccessIdentityConfig
+    , cfoaiId
+    , cfoaiS3CanonicalUserId
+
+    -- * CloudFrontOriginAccessIdentityConfig
+    , CloudFrontOriginAccessIdentityConfig
+    , cloudFrontOriginAccessIdentityConfig
+    , cfoaicCallerReference
+    , cfoaicComment
+
+    -- * CloudFrontOriginAccessIdentityList
+    , CloudFrontOriginAccessIdentityList
+    , cloudFrontOriginAccessIdentityList
+    , cfoailItems
+    , cfoailNextMarker
+    , cfoailMarker
+    , cfoailMaxItems
+    , cfoailIsTruncated
+    , cfoailQuantity
+
+    -- * CloudFrontOriginAccessIdentitySummary
+    , CloudFrontOriginAccessIdentitySummary
+    , cloudFrontOriginAccessIdentitySummary
+    , cfoaisId
+    , cfoaisS3CanonicalUserId
+    , cfoaisComment
+
+    -- * CookieNames
+    , CookieNames
+    , cookieNames
+    , cnItems
+    , cnQuantity
+
+    -- * CookiePreference
+    , CookiePreference
+    , cookiePreference
+    , cpWhitelistedNames
+    , cpForward
+
+    -- * CustomErrorResponse
+    , CustomErrorResponse
+    , customErrorResponse
+    , ceResponsePagePath
+    , ceResponseCode
+    , ceErrorCachingMinTTL
+    , ceErrorCode
+
+    -- * CustomErrorResponses
+    , CustomErrorResponses
+    , customErrorResponses
+    , cerItems
+    , cerQuantity
+
+    -- * CustomOriginConfig
+    , CustomOriginConfig
+    , customOriginConfig
+    , cocHTTPPort
+    , cocHTTPSPort
+    , cocOriginProtocolPolicy
+
+    -- * DefaultCacheBehavior
+    , DefaultCacheBehavior
+    , defaultCacheBehavior
+    , dcbAllowedMethods
+    , dcbMaxTTL
+    , dcbSmoothStreaming
+    , dcbDefaultTTL
+    , dcbTargetOriginId
+    , dcbForwardedValues
+    , dcbTrustedSigners
+    , dcbViewerProtocolPolicy
+    , dcbMinTTL
+
+    -- * Distribution
+    , Distribution
+    , distribution
+    , dId
+    , dStatus
+    , dLastModifiedTime
+    , dInProgressInvalidationBatches
+    , dDomainName
+    , dActiveTrustedSigners
+    , dDistributionConfig
+
+    -- * DistributionConfig
+    , DistributionConfig
+    , distributionConfig
+    , dcDefaultRootObject
+    , dcAliases
+    , dcCustomErrorResponses
+    , dcPriceClass
+    , dcViewerCertificate
+    , dcRestrictions
+    , dcCacheBehaviors
+    , dcLogging
+    , dcCallerReference
+    , dcOrigins
+    , dcDefaultCacheBehavior
+    , dcComment
+    , dcEnabled
+
+    -- * DistributionList
+    , DistributionList
+    , distributionList
+    , dlItems
+    , dlNextMarker
+    , dlMarker
+    , dlMaxItems
+    , dlIsTruncated
+    , dlQuantity
+
+    -- * DistributionSummary
+    , DistributionSummary
+    , distributionSummary
+    , dsId
+    , dsStatus
+    , dsLastModifiedTime
+    , dsDomainName
+    , dsAliases
+    , dsOrigins
+    , dsDefaultCacheBehavior
+    , dsCacheBehaviors
+    , dsCustomErrorResponses
+    , dsComment
+    , dsPriceClass
+    , dsEnabled
+    , dsViewerCertificate
+    , dsRestrictions
+
+    -- * ForwardedValues
+    , ForwardedValues
+    , forwardedValues
+    , fvHeaders
+    , fvQueryString
+    , fvCookies
+
+    -- * GeoRestriction
+    , GeoRestriction
+    , geoRestriction
+    , grItems
+    , grRestrictionType
+    , grQuantity
+
+    -- * Headers
+    , Headers
+    , headers
+    , hItems
+    , hQuantity
+
+    -- * Invalidation
+    , Invalidation
+    , invalidation
+    , iId
+    , iStatus
+    , iCreateTime
+    , iInvalidationBatch
+
+    -- * InvalidationBatch
+    , InvalidationBatch
+    , invalidationBatch
+    , ibPaths
+    , ibCallerReference
+
+    -- * InvalidationList
+    , InvalidationList
+    , invalidationList
+    , ilItems
+    , ilNextMarker
+    , ilMarker
+    , ilMaxItems
+    , ilIsTruncated
+    , ilQuantity
+
+    -- * InvalidationSummary
+    , InvalidationSummary
+    , invalidationSummary
+    , isId
+    , isCreateTime
+    , isStatus
+
+    -- * KeyPairIds
+    , KeyPairIds
+    , keyPairIds
+    , kpiItems
+    , kpiQuantity
+
+    -- * LoggingConfig
+    , LoggingConfig
+    , loggingConfig
+    , lcEnabled
+    , lcIncludeCookies
+    , lcBucket
+    , lcPrefix
+
+    -- * Origin
+    , Origin
+    , origin
+    , oCustomOriginConfig
+    , oS3OriginConfig
+    , oOriginPath
+    , oId
+    , oDomainName
+
+    -- * Origins
+    , Origins
+    , origins
+    , oItems
+    , oQuantity
+
+    -- * Paths
+    , Paths
+    , paths
+    , pItems
+    , pQuantity
+
+    -- * Restrictions
+    , Restrictions
+    , restrictions
+    , rGeoRestriction
+
+    -- * S3Origin
+    , S3Origin
+    , s3Origin
+    , soDomainName
+    , soOriginAccessIdentity
+
+    -- * S3OriginConfig
+    , S3OriginConfig
+    , s3OriginConfig
+    , socOriginAccessIdentity
+
+    -- * Signer
+    , Signer
+    , signer
+    , sAWSAccountNumber
+    , sKeyPairIds
+
+    -- * StreamingDistribution
+    , StreamingDistribution
+    , streamingDistribution
+    , sdLastModifiedTime
+    , sdId
+    , sdStatus
+    , sdDomainName
+    , sdActiveTrustedSigners
+    , sdStreamingDistributionConfig
+
+    -- * StreamingDistributionConfig
+    , StreamingDistributionConfig
+    , streamingDistributionConfig
+    , sdcAliases
+    , sdcPriceClass
+    , sdcLogging
+    , sdcCallerReference
+    , sdcS3Origin
+    , sdcComment
+    , sdcTrustedSigners
+    , sdcEnabled
+
+    -- * StreamingDistributionList
+    , StreamingDistributionList
+    , streamingDistributionList
+    , sdlItems
+    , sdlNextMarker
+    , sdlMarker
+    , sdlMaxItems
+    , sdlIsTruncated
+    , sdlQuantity
+
+    -- * StreamingDistributionSummary
+    , StreamingDistributionSummary
+    , streamingDistributionSummary
+    , sdsId
+    , sdsStatus
+    , sdsLastModifiedTime
+    , sdsDomainName
+    , sdsS3Origin
+    , sdsAliases
+    , sdsTrustedSigners
+    , sdsComment
+    , sdsPriceClass
+    , sdsEnabled
+
+    -- * StreamingLoggingConfig
+    , StreamingLoggingConfig
+    , streamingLoggingConfig
+    , slcEnabled
+    , slcBucket
+    , slcPrefix
+
+    -- * TrustedSigners
+    , TrustedSigners
+    , trustedSigners
+    , tsItems
+    , tsEnabled
+    , tsQuantity
+
+    -- * ViewerCertificate
+    , ViewerCertificate
+    , viewerCertificate
+    , vcSSLSupportMethod
+    , vcMinimumProtocolVersion
+    , vcIAMCertificateId
+    , vcCloudFrontDefaultCertificate
+    ) where
+
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.CloudFront.Types.Sum
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+
+-- | Version @2015-04-17@ of the Amazon CloudFront SDK.
+data CloudFront
+
+instance AWSService CloudFront where
+    type Sg CloudFront = V4
+    service = const svc
+      where
+        svc =
+            Service
+            { _svcAbbrev = "CloudFront"
+            , _svcPrefix = "cloudfront"
+            , _svcVersion = "2015-04-17"
+            , _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
+
+-- | Prism for InvalidErrorCode' errors.
+_InvalidErrorCode :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidErrorCode = _ServiceError . hasStatus 400 . hasCode "InvalidErrorCode"
+
+-- | You cannot create anymore cache behaviors for the distribution.
+_TooManyCacheBehaviors :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyCacheBehaviors =
+    _ServiceError . hasStatus 400 . hasCode "TooManyCacheBehaviors"
+
+-- | Prism for DistributionNotDisabled' errors.
+_DistributionNotDisabled :: AsError a => Getting (First ServiceError) a ServiceError
+_DistributionNotDisabled =
+    _ServiceError . hasStatus 409 . hasCode "DistributionNotDisabled"
+
+-- | The origin access identity is not valid or doesn\'t exist.
+_InvalidOriginAccessIdentity :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidOriginAccessIdentity =
+    _ServiceError . hasStatus 400 . hasCode "InvalidOriginAccessIdentity"
+
+-- | Processing your request would cause you to exceed the maximum number of
+-- origin access identities allowed.
+_TooManyCloudFrontOriginAccessIdentities :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyCloudFrontOriginAccessIdentities =
+    _ServiceError .
+    hasStatus 400 . hasCode "TooManyCloudFrontOriginAccessIdentities"
+
+-- | Processing your request would cause you to exceed the maximum number of
+-- streaming distributions allowed.
+_TooManyStreamingDistributions :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyStreamingDistributions =
+    _ServiceError . hasStatus 400 . hasCode "TooManyStreamingDistributions"
+
+-- | The argument is invalid.
+_InvalidArgument :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidArgument = _ServiceError . hasStatus 400 . hasCode "InvalidArgument"
+
+-- | The specified origin access identity does not exist.
+_NoSuchCloudFrontOriginAccessIdentity :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchCloudFrontOriginAccessIdentity =
+    _ServiceError .
+    hasStatus 404 . hasCode "NoSuchCloudFrontOriginAccessIdentity"
+
+-- | The specified streaming distribution does not exist.
+_NoSuchStreamingDistribution :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchStreamingDistribution =
+    _ServiceError . hasStatus 404 . hasCode "NoSuchStreamingDistribution"
+
+-- | Prism for CloudFrontOriginAccessIdentityInUse' errors.
+_CloudFrontOriginAccessIdentityInUse :: AsError a => Getting (First ServiceError) a ServiceError
+_CloudFrontOriginAccessIdentityInUse =
+    _ServiceError .
+    hasStatus 409 . hasCode "CloudFrontOriginAccessIdentityInUse"
+
+-- | The value of Quantity and the size of Items do not match.
+_InconsistentQuantities :: AsError a => Getting (First ServiceError) a ServiceError
+_InconsistentQuantities =
+    _ServiceError . hasStatus 400 . hasCode "InconsistentQuantities"
+
+-- | You have exceeded the maximum number of allowable InProgress
+-- invalidation batch requests, or invalidation objects.
+_TooManyInvalidationsInProgress :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyInvalidationsInProgress =
+    _ServiceError . hasStatus 400 . hasCode "TooManyInvalidationsInProgress"
+
+-- | Your request contains more CNAMEs than are allowed per distribution.
+_TooManyDistributionCNAMEs :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyDistributionCNAMEs =
+    _ServiceError . hasStatus 400 . hasCode "TooManyDistributionCNAMEs"
+
+-- | Your request contains forward cookies option which doesn\'t match with
+-- the expectation for the whitelisted list of cookie names. Either list of
+-- cookie names has been specified when not allowed or list of cookie names
+-- is missing when expected.
+_InvalidForwardCookies :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidForwardCookies =
+    _ServiceError . hasStatus 400 . hasCode "InvalidForwardCookies"
+
+-- | Your request contains more cookie names in the whitelist than are
+-- allowed per cache behavior.
+_TooManyCookieNamesInWhiteList :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyCookieNamesInWhiteList =
+    _ServiceError . hasStatus 400 . hasCode "TooManyCookieNamesInWhiteList"
+
+-- | Prism for BatchTooLarge' errors.
+_BatchTooLarge :: AsError a => Getting (First ServiceError) a ServiceError
+_BatchTooLarge = _ServiceError . hasStatus 413 . hasCode "BatchTooLarge"
+
+-- | The Amazon S3 origin server specified does not refer to a valid Amazon
+-- S3 bucket.
+_InvalidOrigin :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidOrigin = _ServiceError . hasStatus 400 . hasCode "InvalidOrigin"
+
+-- | Your request contains more trusted signers than are allowed per
+-- distribution.
+_TooManyTrustedSigners :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyTrustedSigners =
+    _ServiceError . hasStatus 400 . hasCode "TooManyTrustedSigners"
+
+-- | No origin exists with the specified Origin Id.
+_NoSuchOrigin :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchOrigin = _ServiceError . hasStatus 404 . hasCode "NoSuchOrigin"
+
+-- | The specified invalidation does not exist.
+_NoSuchInvalidation :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchInvalidation =
+    _ServiceError . hasStatus 404 . hasCode "NoSuchInvalidation"
+
+-- | Prism for StreamingDistributionNotDisabled' errors.
+_StreamingDistributionNotDisabled :: AsError a => Getting (First ServiceError) a ServiceError
+_StreamingDistributionNotDisabled =
+    _ServiceError . hasStatus 409 . hasCode "StreamingDistributionNotDisabled"
+
+-- | Prism for InvalidTTLOrder' errors.
+_InvalidTTLOrder :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidTTLOrder = _ServiceError . hasStatus 400 . hasCode "InvalidTTLOrder"
+
+-- | Prism for TooManyStreamingDistributionCNAMEs' errors.
+_TooManyStreamingDistributionCNAMEs :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyStreamingDistributionCNAMEs =
+    _ServiceError .
+    hasStatus 400 . hasCode "TooManyStreamingDistributionCNAMEs"
+
+-- | Processing your request would cause you to exceed the maximum number of
+-- distributions allowed.
+_TooManyDistributions :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyDistributions =
+    _ServiceError . hasStatus 400 . hasCode "TooManyDistributions"
+
+-- | This operation requires the HTTPS protocol. Ensure that you specify the
+-- HTTPS protocol in your request, or omit the RequiredProtocols element
+-- from your distribution configuration.
+_InvalidRequiredProtocol :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidRequiredProtocol =
+    _ServiceError . hasStatus 400 . hasCode "InvalidRequiredProtocol"
+
+-- | Prism for TooManyHeadersInForwardedValues' errors.
+_TooManyHeadersInForwardedValues :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyHeadersInForwardedValues =
+    _ServiceError . hasStatus 400 . hasCode "TooManyHeadersInForwardedValues"
+
+-- | You cannot create anymore custom ssl certificates.
+_TooManyCertificates :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyCertificates =
+    _ServiceError . hasStatus 400 . hasCode "TooManyCertificates"
+
+-- | This operation requires a body. Ensure that the body is present and the
+-- Content-Type header is set.
+_MissingBody :: AsError a => Getting (First ServiceError) a ServiceError
+_MissingBody = _ServiceError . hasStatus 400 . hasCode "MissingBody"
+
+-- | The caller reference you attempted to create the distribution with is
+-- associated with another distribution.
+_DistributionAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_DistributionAlreadyExists =
+    _ServiceError . hasStatus 409 . hasCode "DistributionAlreadyExists"
+
+-- | Origin and CallerReference cannot be updated.
+_IllegalUpdate :: AsError a => Getting (First ServiceError) a ServiceError
+_IllegalUpdate = _ServiceError . hasStatus 400 . hasCode "IllegalUpdate"
+
+-- | Prism for InvalidResponseCode' errors.
+_InvalidResponseCode :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidResponseCode =
+    _ServiceError . hasStatus 400 . hasCode "InvalidResponseCode"
+
+-- | The If-Match version is missing or not valid for the distribution.
+_InvalidIfMatchVersion :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidIfMatchVersion =
+    _ServiceError . hasStatus 400 . hasCode "InvalidIfMatchVersion"
+
+-- | The precondition given in one or more of the request-header fields
+-- evaluated to false.
+_PreconditionFailed :: AsError a => Getting (First ServiceError) a ServiceError
+_PreconditionFailed =
+    _ServiceError . hasStatus 412 . hasCode "PreconditionFailed"
+
+-- | You cannot specify SSLv3 as the minimum protocol version if you only
+-- want to support only clients that Support Server Name Indication (SNI).
+_InvalidProtocolSettings :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidProtocolSettings =
+    _ServiceError . hasStatus 400 . hasCode "InvalidProtocolSettings"
+
+-- | One or more of your trusted signers do not exist.
+_TrustedSignerDoesNotExist :: AsError a => Getting (First ServiceError) a ServiceError
+_TrustedSignerDoesNotExist =
+    _ServiceError . hasStatus 400 . hasCode "TrustedSignerDoesNotExist"
+
+-- | Prism for InvalidHeadersForS3Origin' errors.
+_InvalidHeadersForS3Origin :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidHeadersForS3Origin =
+    _ServiceError . hasStatus 400 . hasCode "InvalidHeadersForS3Origin"
+
+-- | Prism for CNAMEAlreadyExists' errors.
+_CNAMEAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_CNAMEAlreadyExists =
+    _ServiceError . hasStatus 409 . hasCode "CNAMEAlreadyExists"
+
+-- | Prism for StreamingDistributionAlreadyExists' errors.
+_StreamingDistributionAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_StreamingDistributionAlreadyExists =
+    _ServiceError .
+    hasStatus 409 . hasCode "StreamingDistributionAlreadyExists"
+
+-- | You cannot create anymore origins for the distribution.
+_TooManyOrigins :: AsError a => Getting (First ServiceError) a ServiceError
+_TooManyOrigins = _ServiceError . hasStatus 400 . hasCode "TooManyOrigins"
+
+-- | If the CallerReference is a value you already sent in a previous request
+-- to create an identity but the content of the
+-- CloudFrontOriginAccessIdentityConfig is different from the original
+-- request, CloudFront returns a
+-- CloudFrontOriginAccessIdentityAlreadyExists error.
+_CloudFrontOriginAccessIdentityAlreadyExists :: AsError a => Getting (First ServiceError) a ServiceError
+_CloudFrontOriginAccessIdentityAlreadyExists =
+    _ServiceError .
+    hasStatus 409 . hasCode "CloudFrontOriginAccessIdentityAlreadyExists"
+
+-- | The relative path is too big, is not URL-encoded, or does not begin with
+-- a slash (\/).
+_InvalidRelativePath :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidRelativePath =
+    _ServiceError . hasStatus 400 . hasCode "InvalidRelativePath"
+
+-- | Prism for InvalidMinimumProtocolVersion' errors.
+_InvalidMinimumProtocolVersion :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidMinimumProtocolVersion =
+    _ServiceError . hasStatus 400 . hasCode "InvalidMinimumProtocolVersion"
+
+-- | Access denied.
+_AccessDenied :: AsError a => Getting (First ServiceError) a ServiceError
+_AccessDenied = _ServiceError . hasStatus 403 . hasCode "AccessDenied"
+
+-- | The specified distribution does not exist.
+_NoSuchDistribution :: AsError a => Getting (First ServiceError) a ServiceError
+_NoSuchDistribution =
+    _ServiceError . hasStatus 404 . hasCode "NoSuchDistribution"
+
+-- | Prism for InvalidViewerCertificate' errors.
+_InvalidViewerCertificate :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidViewerCertificate =
+    _ServiceError . hasStatus 400 . hasCode "InvalidViewerCertificate"
+
+-- | The default root object file name is too big or contains an invalid
+-- character.
+_InvalidDefaultRootObject :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidDefaultRootObject =
+    _ServiceError . hasStatus 400 . hasCode "InvalidDefaultRootObject"
+
+-- | Prism for InvalidLocationCode' errors.
+_InvalidLocationCode :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidLocationCode =
+    _ServiceError . hasStatus 400 . hasCode "InvalidLocationCode"
+
+-- | Prism for InvalidGeoRestrictionParameter' errors.
+_InvalidGeoRestrictionParameter :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidGeoRestrictionParameter =
+    _ServiceError . hasStatus 400 . hasCode "InvalidGeoRestrictionParameter"
diff --git a/gen/Network/AWS/CloudFront/Types/Product.hs b/gen/Network/AWS/CloudFront/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudFront/Types/Product.hs
@@ -0,0 +1,3297 @@
+{-# 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.CloudFront.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.CloudFront.Types.Product where
+
+import           Network.AWS.CloudFront.Types.Sum
+import           Network.AWS.Prelude
+
+-- | A complex type that lists the AWS accounts, if any, that you included in
+-- the TrustedSigners complex type for the default cache behavior or for
+-- any of the other cache behaviors for this distribution. These are
+-- accounts that you want to allow to create signed URLs for private
+-- content.
+--
+-- /See:/ 'activeTrustedSigners' smart constructor.
+data ActiveTrustedSigners = ActiveTrustedSigners'
+    { _atsItems    :: !(Maybe [Signer])
+    , _atsEnabled  :: !Bool
+    , _atsQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActiveTrustedSigners' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'atsItems'
+--
+-- * 'atsEnabled'
+--
+-- * 'atsQuantity'
+activeTrustedSigners
+    :: Bool -- ^ 'atsEnabled'
+    -> Int -- ^ 'atsQuantity'
+    -> ActiveTrustedSigners
+activeTrustedSigners pEnabled_ pQuantity_ =
+    ActiveTrustedSigners'
+    { _atsItems = Nothing
+    , _atsEnabled = pEnabled_
+    , _atsQuantity = pQuantity_
+    }
+
+-- | A complex type that contains one Signer complex type for each unique
+-- trusted signer that is specified in the TrustedSigners complex type,
+-- including trusted signers in the default cache behavior and in all of
+-- the other cache behaviors.
+atsItems :: Lens' ActiveTrustedSigners [Signer]
+atsItems = lens _atsItems (\ s a -> s{_atsItems = a}) . _Default . _Coerce;
+
+-- | Each active trusted signer.
+atsEnabled :: Lens' ActiveTrustedSigners Bool
+atsEnabled = lens _atsEnabled (\ s a -> s{_atsEnabled = a});
+
+-- | The number of unique trusted signers included in all cache behaviors.
+-- For example, if three cache behaviors all list the same three AWS
+-- accounts, the value of Quantity for ActiveTrustedSigners will be 3.
+atsQuantity :: Lens' ActiveTrustedSigners Int
+atsQuantity = lens _atsQuantity (\ s a -> s{_atsQuantity = a});
+
+instance FromXML ActiveTrustedSigners where
+        parseXML x
+          = ActiveTrustedSigners' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "Signer"))
+                <*> (x .@ "Enabled")
+                <*> (x .@ "Quantity")
+
+-- | A complex type that contains information about CNAMEs (alternate domain
+-- names), if any, for this distribution.
+--
+-- /See:/ 'aliases' smart constructor.
+data Aliases = Aliases'
+    { _aItems    :: !(Maybe [Text])
+    , _aQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Aliases' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aItems'
+--
+-- * 'aQuantity'
+aliases
+    :: Int -- ^ 'aQuantity'
+    -> Aliases
+aliases pQuantity_ =
+    Aliases'
+    { _aItems = Nothing
+    , _aQuantity = pQuantity_
+    }
+
+-- | Optional: A complex type that contains CNAME elements, if any, for this
+-- distribution. If Quantity is 0, you can omit Items.
+aItems :: Lens' Aliases [Text]
+aItems = lens _aItems (\ s a -> s{_aItems = a}) . _Default . _Coerce;
+
+-- | The number of CNAMEs, if any, for this distribution.
+aQuantity :: Lens' Aliases Int
+aQuantity = lens _aQuantity (\ s a -> s{_aQuantity = a});
+
+instance FromXML Aliases where
+        parseXML x
+          = Aliases' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "CNAME"))
+                <*> (x .@ "Quantity")
+
+instance ToXML Aliases where
+        toXML Aliases'{..}
+          = mconcat
+              ["Items" @= toXML (toXMLList "CNAME" <$> _aItems),
+               "Quantity" @= _aQuantity]
+
+-- | A complex type that controls which HTTP methods CloudFront processes and
+-- forwards to your Amazon S3 bucket or your custom origin. There are three
+-- choices: - CloudFront forwards only GET and HEAD requests. - CloudFront
+-- forwards only GET, HEAD and OPTIONS requests. - CloudFront forwards GET,
+-- HEAD, OPTIONS, PUT, PATCH, POST, and DELETE requests. If you pick the
+-- third choice, you may need to restrict access to your Amazon S3 bucket
+-- or to your custom origin so users can\'t perform operations that you
+-- don\'t want them to. For example, you may not want users to have
+-- permission to delete objects from your origin.
+--
+-- /See:/ 'allowedMethods' smart constructor.
+data AllowedMethods = AllowedMethods'
+    { _amCachedMethods :: !(Maybe CachedMethods)
+    , _amQuantity      :: !Int
+    , _amItems         :: ![Method]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AllowedMethods' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'amCachedMethods'
+--
+-- * 'amQuantity'
+--
+-- * 'amItems'
+allowedMethods
+    :: Int -- ^ 'amQuantity'
+    -> AllowedMethods
+allowedMethods pQuantity_ =
+    AllowedMethods'
+    { _amCachedMethods = Nothing
+    , _amQuantity = pQuantity_
+    , _amItems = mempty
+    }
+
+-- | Undocumented member.
+amCachedMethods :: Lens' AllowedMethods (Maybe CachedMethods)
+amCachedMethods = lens _amCachedMethods (\ s a -> s{_amCachedMethods = a});
+
+-- | The number of HTTP methods that you want CloudFront to forward to your
+-- origin. Valid values are 2 (for GET and HEAD requests), 3 (for GET, HEAD
+-- and OPTIONS requests) and 7 (for GET, HEAD, OPTIONS, PUT, PATCH, POST,
+-- and DELETE requests).
+amQuantity :: Lens' AllowedMethods Int
+amQuantity = lens _amQuantity (\ s a -> s{_amQuantity = a});
+
+-- | A complex type that contains the HTTP methods that you want CloudFront
+-- to process and forward to your origin.
+amItems :: Lens' AllowedMethods [Method]
+amItems = lens _amItems (\ s a -> s{_amItems = a}) . _Coerce;
+
+instance FromXML AllowedMethods where
+        parseXML x
+          = AllowedMethods' <$>
+              (x .@? "CachedMethods") <*> (x .@ "Quantity") <*>
+                (x .@? "Items" .!@ mempty >>= parseXMLList "Method")
+
+instance ToXML AllowedMethods where
+        toXML AllowedMethods'{..}
+          = mconcat
+              ["CachedMethods" @= _amCachedMethods,
+               "Quantity" @= _amQuantity,
+               "Items" @= toXMLList "Method" _amItems]
+
+-- | A complex type that describes how CloudFront processes requests. You can
+-- create up to 10 cache behaviors.You must create at least as many cache
+-- behaviors (including the default cache behavior) as you have origins if
+-- you want CloudFront to distribute objects from all of the origins. Each
+-- cache behavior specifies the one origin from which you want CloudFront
+-- to get objects. If you have two origins and only the default cache
+-- behavior, the default cache behavior will cause CloudFront to get
+-- objects from one of the origins, but the other origin will never be
+-- used. If you don\'t want to specify any cache behaviors, include only an
+-- empty CacheBehaviors element. Don\'t include an empty CacheBehavior
+-- element, or CloudFront returns a MalformedXML error. To delete all cache
+-- behaviors in an existing distribution, update the distribution
+-- configuration and include only an empty CacheBehaviors element. To add,
+-- change, or remove one or more cache behaviors, update the distribution
+-- configuration and specify all of the cache behaviors that you want to
+-- include in the updated distribution.
+--
+-- /See:/ 'cacheBehavior' smart constructor.
+data CacheBehavior = CacheBehavior'
+    { _cbAllowedMethods       :: !(Maybe AllowedMethods)
+    , _cbMaxTTL               :: !(Maybe Integer)
+    , _cbSmoothStreaming      :: !(Maybe Bool)
+    , _cbDefaultTTL           :: !(Maybe Integer)
+    , _cbPathPattern          :: !Text
+    , _cbTargetOriginId       :: !Text
+    , _cbForwardedValues      :: !ForwardedValues
+    , _cbTrustedSigners       :: !TrustedSigners
+    , _cbViewerProtocolPolicy :: !ViewerProtocolPolicy
+    , _cbMinTTL               :: !Integer
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CacheBehavior' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbAllowedMethods'
+--
+-- * 'cbMaxTTL'
+--
+-- * 'cbSmoothStreaming'
+--
+-- * 'cbDefaultTTL'
+--
+-- * 'cbPathPattern'
+--
+-- * 'cbTargetOriginId'
+--
+-- * 'cbForwardedValues'
+--
+-- * 'cbTrustedSigners'
+--
+-- * 'cbViewerProtocolPolicy'
+--
+-- * 'cbMinTTL'
+cacheBehavior
+    :: Text -- ^ 'cbPathPattern'
+    -> Text -- ^ 'cbTargetOriginId'
+    -> ForwardedValues -- ^ 'cbForwardedValues'
+    -> TrustedSigners -- ^ 'cbTrustedSigners'
+    -> ViewerProtocolPolicy -- ^ 'cbViewerProtocolPolicy'
+    -> Integer -- ^ 'cbMinTTL'
+    -> CacheBehavior
+cacheBehavior pPathPattern_ pTargetOriginId_ pForwardedValues_ pTrustedSigners_ pViewerProtocolPolicy_ pMinTTL_ =
+    CacheBehavior'
+    { _cbAllowedMethods = Nothing
+    , _cbMaxTTL = Nothing
+    , _cbSmoothStreaming = Nothing
+    , _cbDefaultTTL = Nothing
+    , _cbPathPattern = pPathPattern_
+    , _cbTargetOriginId = pTargetOriginId_
+    , _cbForwardedValues = pForwardedValues_
+    , _cbTrustedSigners = pTrustedSigners_
+    , _cbViewerProtocolPolicy = pViewerProtocolPolicy_
+    , _cbMinTTL = pMinTTL_
+    }
+
+-- | Undocumented member.
+cbAllowedMethods :: Lens' CacheBehavior (Maybe AllowedMethods)
+cbAllowedMethods = lens _cbAllowedMethods (\ s a -> s{_cbAllowedMethods = a});
+
+-- | The maximum amount of time (in seconds) that an object is in a
+-- CloudFront cache before CloudFront forwards another request to your
+-- origin to determine whether the object has been updated. The value that
+-- you specify applies only when your origin adds HTTP headers such as
+-- Cache-Control max-age, Cache-Control s-maxage, and Expires to objects.
+-- You can specify a value from 0 to 3,153,600,000 seconds (100 years).
+cbMaxTTL :: Lens' CacheBehavior (Maybe Integer)
+cbMaxTTL = lens _cbMaxTTL (\ s a -> s{_cbMaxTTL = a});
+
+-- | Indicates whether you want to distribute media files in Microsoft Smooth
+-- Streaming format using the origin that is associated with this cache
+-- behavior. If so, specify true; if not, specify false.
+cbSmoothStreaming :: Lens' CacheBehavior (Maybe Bool)
+cbSmoothStreaming = lens _cbSmoothStreaming (\ s a -> s{_cbSmoothStreaming = a});
+
+-- | If you don\'t configure your origin to add a Cache-Control max-age
+-- directive or an Expires header, DefaultTTL is the default amount of time
+-- (in seconds) that an object is in a CloudFront cache before CloudFront
+-- forwards another request to your origin to determine whether the object
+-- has been updated. The value that you specify applies only when your
+-- origin does not add HTTP headers such as Cache-Control max-age,
+-- Cache-Control s-maxage, and Expires to objects. You can specify a value
+-- from 0 to 3,153,600,000 seconds (100 years).
+cbDefaultTTL :: Lens' CacheBehavior (Maybe Integer)
+cbDefaultTTL = lens _cbDefaultTTL (\ s a -> s{_cbDefaultTTL = a});
+
+-- | The pattern (for example, images\/*.jpg) that specifies which requests
+-- you want this cache behavior to apply to. When CloudFront receives an
+-- end-user request, the requested path is compared with path patterns in
+-- the order in which cache behaviors are listed in the distribution. The
+-- path pattern for the default cache behavior is * and cannot be changed.
+-- If the request for an object does not match the path pattern for any
+-- cache behaviors, CloudFront applies the behavior in the default cache
+-- behavior.
+cbPathPattern :: Lens' CacheBehavior Text
+cbPathPattern = lens _cbPathPattern (\ s a -> s{_cbPathPattern = a});
+
+-- | The value of ID for the origin that you want CloudFront to route
+-- requests to when a request matches the path pattern either for a cache
+-- behavior or for the default cache behavior.
+cbTargetOriginId :: Lens' CacheBehavior Text
+cbTargetOriginId = lens _cbTargetOriginId (\ s a -> s{_cbTargetOriginId = a});
+
+-- | A complex type that specifies how CloudFront handles query strings,
+-- cookies and headers.
+cbForwardedValues :: Lens' CacheBehavior ForwardedValues
+cbForwardedValues = lens _cbForwardedValues (\ s a -> s{_cbForwardedValues = a});
+
+-- | A complex type that specifies the AWS accounts, if any, that you want to
+-- allow to create signed URLs for private content. If you want to require
+-- signed URLs in requests for objects in the target origin that match the
+-- PathPattern for this cache behavior, specify true for Enabled, and
+-- specify the applicable values for Quantity and Items. For more
+-- information, go to Using a Signed URL to Serve Private Content in the
+-- Amazon CloudFront Developer Guide. If you don\'t want to require signed
+-- URLs in requests for objects that match PathPattern, specify false for
+-- Enabled and 0 for Quantity. Omit Items. To add, change, or remove one or
+-- more trusted signers, change Enabled to true (if it\'s currently false),
+-- change Quantity as applicable, and specify all of the trusted signers
+-- that you want to include in the updated distribution.
+cbTrustedSigners :: Lens' CacheBehavior TrustedSigners
+cbTrustedSigners = lens _cbTrustedSigners (\ s a -> s{_cbTrustedSigners = a});
+
+-- | Use this element to specify the protocol that users can use to access
+-- the files in the origin specified by TargetOriginId when a request
+-- matches the path pattern in PathPattern. If you want CloudFront to allow
+-- end users to use any available protocol, specify allow-all. If you want
+-- CloudFront to require HTTPS, specify https. If you want CloudFront to
+-- respond to an HTTP request with an HTTP status code of 301 (Moved
+-- Permanently) and the HTTPS URL, specify redirect-to-https. The viewer
+-- then resubmits the request using the HTTPS URL.
+cbViewerProtocolPolicy :: Lens' CacheBehavior ViewerProtocolPolicy
+cbViewerProtocolPolicy = lens _cbViewerProtocolPolicy (\ s a -> s{_cbViewerProtocolPolicy = a});
+
+-- | The minimum amount of time that you want objects to stay in CloudFront
+-- caches before CloudFront queries your origin to see whether the object
+-- has been updated.You can specify a value from 0 to 3,153,600,000 seconds
+-- (100 years).
+cbMinTTL :: Lens' CacheBehavior Integer
+cbMinTTL = lens _cbMinTTL (\ s a -> s{_cbMinTTL = a});
+
+instance FromXML CacheBehavior where
+        parseXML x
+          = CacheBehavior' <$>
+              (x .@? "AllowedMethods") <*> (x .@? "MaxTTL") <*>
+                (x .@? "SmoothStreaming")
+                <*> (x .@? "DefaultTTL")
+                <*> (x .@ "PathPattern")
+                <*> (x .@ "TargetOriginId")
+                <*> (x .@ "ForwardedValues")
+                <*> (x .@ "TrustedSigners")
+                <*> (x .@ "ViewerProtocolPolicy")
+                <*> (x .@ "MinTTL")
+
+instance ToXML CacheBehavior where
+        toXML CacheBehavior'{..}
+          = mconcat
+              ["AllowedMethods" @= _cbAllowedMethods,
+               "MaxTTL" @= _cbMaxTTL,
+               "SmoothStreaming" @= _cbSmoothStreaming,
+               "DefaultTTL" @= _cbDefaultTTL,
+               "PathPattern" @= _cbPathPattern,
+               "TargetOriginId" @= _cbTargetOriginId,
+               "ForwardedValues" @= _cbForwardedValues,
+               "TrustedSigners" @= _cbTrustedSigners,
+               "ViewerProtocolPolicy" @= _cbViewerProtocolPolicy,
+               "MinTTL" @= _cbMinTTL]
+
+-- | A complex type that contains zero or more CacheBehavior elements.
+--
+-- /See:/ 'cacheBehaviors' smart constructor.
+data CacheBehaviors = CacheBehaviors'
+    { _cbItems    :: !(Maybe [CacheBehavior])
+    , _cbQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CacheBehaviors' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbItems'
+--
+-- * 'cbQuantity'
+cacheBehaviors
+    :: Int -- ^ 'cbQuantity'
+    -> CacheBehaviors
+cacheBehaviors pQuantity_ =
+    CacheBehaviors'
+    { _cbItems = Nothing
+    , _cbQuantity = pQuantity_
+    }
+
+-- | Optional: A complex type that contains cache behaviors for this
+-- distribution. If Quantity is 0, you can omit Items.
+cbItems :: Lens' CacheBehaviors [CacheBehavior]
+cbItems = lens _cbItems (\ s a -> s{_cbItems = a}) . _Default . _Coerce;
+
+-- | The number of cache behaviors for this distribution.
+cbQuantity :: Lens' CacheBehaviors Int
+cbQuantity = lens _cbQuantity (\ s a -> s{_cbQuantity = a});
+
+instance FromXML CacheBehaviors where
+        parseXML x
+          = CacheBehaviors' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "CacheBehavior"))
+                <*> (x .@ "Quantity")
+
+instance ToXML CacheBehaviors where
+        toXML CacheBehaviors'{..}
+          = mconcat
+              ["Items" @=
+                 toXML (toXMLList "CacheBehavior" <$> _cbItems),
+               "Quantity" @= _cbQuantity]
+
+-- | A complex type that controls whether CloudFront caches the response to
+-- requests using the specified HTTP methods. There are two choices: -
+-- CloudFront caches responses to GET and HEAD requests. - CloudFront
+-- caches responses to GET, HEAD, and OPTIONS requests. If you pick the
+-- second choice for your S3 Origin, you may need to forward
+-- Access-Control-Request-Method, Access-Control-Request-Headers and Origin
+-- headers for the responses to be cached correctly.
+--
+-- /See:/ 'cachedMethods' smart constructor.
+data CachedMethods = CachedMethods'
+    { _cmQuantity :: !Int
+    , _cmItems    :: ![Method]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CachedMethods' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmQuantity'
+--
+-- * 'cmItems'
+cachedMethods
+    :: Int -- ^ 'cmQuantity'
+    -> CachedMethods
+cachedMethods pQuantity_ =
+    CachedMethods'
+    { _cmQuantity = pQuantity_
+    , _cmItems = mempty
+    }
+
+-- | The number of HTTP methods for which you want CloudFront to cache
+-- responses. Valid values are 2 (for caching responses to GET and HEAD
+-- requests) and 3 (for caching responses to GET, HEAD, and OPTIONS
+-- requests).
+cmQuantity :: Lens' CachedMethods Int
+cmQuantity = lens _cmQuantity (\ s a -> s{_cmQuantity = a});
+
+-- | A complex type that contains the HTTP methods that you want CloudFront
+-- to cache responses to.
+cmItems :: Lens' CachedMethods [Method]
+cmItems = lens _cmItems (\ s a -> s{_cmItems = a}) . _Coerce;
+
+instance FromXML CachedMethods where
+        parseXML x
+          = CachedMethods' <$>
+              (x .@ "Quantity") <*>
+                (x .@? "Items" .!@ mempty >>= parseXMLList "Method")
+
+instance ToXML CachedMethods where
+        toXML CachedMethods'{..}
+          = mconcat
+              ["Quantity" @= _cmQuantity,
+               "Items" @= toXMLList "Method" _cmItems]
+
+-- | CloudFront origin access identity.
+--
+-- /See:/ 'cloudFrontOriginAccessIdentity' smart constructor.
+data CloudFrontOriginAccessIdentity = CloudFrontOriginAccessIdentity'
+    { _cfoaiCloudFrontOriginAccessIdentityConfig :: !(Maybe CloudFrontOriginAccessIdentityConfig)
+    , _cfoaiId                                   :: !Text
+    , _cfoaiS3CanonicalUserId                    :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudFrontOriginAccessIdentity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfoaiCloudFrontOriginAccessIdentityConfig'
+--
+-- * 'cfoaiId'
+--
+-- * 'cfoaiS3CanonicalUserId'
+cloudFrontOriginAccessIdentity
+    :: Text -- ^ 'cfoaiId'
+    -> Text -- ^ 'cfoaiS3CanonicalUserId'
+    -> CloudFrontOriginAccessIdentity
+cloudFrontOriginAccessIdentity pId_ pS3CanonicalUserId_ =
+    CloudFrontOriginAccessIdentity'
+    { _cfoaiCloudFrontOriginAccessIdentityConfig = Nothing
+    , _cfoaiId = pId_
+    , _cfoaiS3CanonicalUserId = pS3CanonicalUserId_
+    }
+
+-- | The current configuration information for the identity.
+cfoaiCloudFrontOriginAccessIdentityConfig :: Lens' CloudFrontOriginAccessIdentity (Maybe CloudFrontOriginAccessIdentityConfig)
+cfoaiCloudFrontOriginAccessIdentityConfig = lens _cfoaiCloudFrontOriginAccessIdentityConfig (\ s a -> s{_cfoaiCloudFrontOriginAccessIdentityConfig = a});
+
+-- | The ID for the origin access identity. For example: E74FTE3AJFJ256A.
+cfoaiId :: Lens' CloudFrontOriginAccessIdentity Text
+cfoaiId = lens _cfoaiId (\ s a -> s{_cfoaiId = a});
+
+-- | The Amazon S3 canonical user ID for the origin access identity, which
+-- you use when giving the origin access identity read permission to an
+-- object in Amazon S3.
+cfoaiS3CanonicalUserId :: Lens' CloudFrontOriginAccessIdentity Text
+cfoaiS3CanonicalUserId = lens _cfoaiS3CanonicalUserId (\ s a -> s{_cfoaiS3CanonicalUserId = a});
+
+instance FromXML CloudFrontOriginAccessIdentity where
+        parseXML x
+          = CloudFrontOriginAccessIdentity' <$>
+              (x .@? "CloudFrontOriginAccessIdentityConfig") <*>
+                (x .@ "Id")
+                <*> (x .@ "S3CanonicalUserId")
+
+-- | Origin access identity configuration.
+--
+-- /See:/ 'cloudFrontOriginAccessIdentityConfig' smart constructor.
+data CloudFrontOriginAccessIdentityConfig = CloudFrontOriginAccessIdentityConfig'
+    { _cfoaicCallerReference :: !Text
+    , _cfoaicComment         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudFrontOriginAccessIdentityConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfoaicCallerReference'
+--
+-- * 'cfoaicComment'
+cloudFrontOriginAccessIdentityConfig
+    :: Text -- ^ 'cfoaicCallerReference'
+    -> Text -- ^ 'cfoaicComment'
+    -> CloudFrontOriginAccessIdentityConfig
+cloudFrontOriginAccessIdentityConfig pCallerReference_ pComment_ =
+    CloudFrontOriginAccessIdentityConfig'
+    { _cfoaicCallerReference = pCallerReference_
+    , _cfoaicComment = pComment_
+    }
+
+-- | A unique number that ensures the request can\'t be replayed. If the
+-- CallerReference is new (no matter the content of the
+-- CloudFrontOriginAccessIdentityConfig object), a new origin access
+-- identity is created. If the CallerReference is a value you already sent
+-- in a previous request to create an identity, and the content of the
+-- CloudFrontOriginAccessIdentityConfig is identical to the original
+-- request (ignoring white space), the response includes the same
+-- information returned to the original request. If the CallerReference is
+-- a value you already sent in a previous request to create an identity but
+-- the content of the CloudFrontOriginAccessIdentityConfig is different
+-- from the original request, CloudFront returns a
+-- CloudFrontOriginAccessIdentityAlreadyExists error.
+cfoaicCallerReference :: Lens' CloudFrontOriginAccessIdentityConfig Text
+cfoaicCallerReference = lens _cfoaicCallerReference (\ s a -> s{_cfoaicCallerReference = a});
+
+-- | Any comments you want to include about the origin access identity.
+cfoaicComment :: Lens' CloudFrontOriginAccessIdentityConfig Text
+cfoaicComment = lens _cfoaicComment (\ s a -> s{_cfoaicComment = a});
+
+instance FromXML CloudFrontOriginAccessIdentityConfig
+         where
+        parseXML x
+          = CloudFrontOriginAccessIdentityConfig' <$>
+              (x .@ "CallerReference") <*> (x .@ "Comment")
+
+instance ToXML CloudFrontOriginAccessIdentityConfig
+         where
+        toXML CloudFrontOriginAccessIdentityConfig'{..}
+          = mconcat
+              ["CallerReference" @= _cfoaicCallerReference,
+               "Comment" @= _cfoaicComment]
+
+-- | The CloudFrontOriginAccessIdentityList type.
+--
+-- /See:/ 'cloudFrontOriginAccessIdentityList' smart constructor.
+data CloudFrontOriginAccessIdentityList = CloudFrontOriginAccessIdentityList'
+    { _cfoailItems       :: !(Maybe [CloudFrontOriginAccessIdentitySummary])
+    , _cfoailNextMarker  :: !(Maybe Text)
+    , _cfoailMarker      :: !Text
+    , _cfoailMaxItems    :: !Int
+    , _cfoailIsTruncated :: !Bool
+    , _cfoailQuantity    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudFrontOriginAccessIdentityList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfoailItems'
+--
+-- * 'cfoailNextMarker'
+--
+-- * 'cfoailMarker'
+--
+-- * 'cfoailMaxItems'
+--
+-- * 'cfoailIsTruncated'
+--
+-- * 'cfoailQuantity'
+cloudFrontOriginAccessIdentityList
+    :: Text -- ^ 'cfoailMarker'
+    -> Int -- ^ 'cfoailMaxItems'
+    -> Bool -- ^ 'cfoailIsTruncated'
+    -> Int -- ^ 'cfoailQuantity'
+    -> CloudFrontOriginAccessIdentityList
+cloudFrontOriginAccessIdentityList pMarker_ pMaxItems_ pIsTruncated_ pQuantity_ =
+    CloudFrontOriginAccessIdentityList'
+    { _cfoailItems = Nothing
+    , _cfoailNextMarker = Nothing
+    , _cfoailMarker = pMarker_
+    , _cfoailMaxItems = pMaxItems_
+    , _cfoailIsTruncated = pIsTruncated_
+    , _cfoailQuantity = pQuantity_
+    }
+
+-- | A complex type that contains one CloudFrontOriginAccessIdentitySummary
+-- element for each origin access identity that was created by the current
+-- AWS account.
+cfoailItems :: Lens' CloudFrontOriginAccessIdentityList [CloudFrontOriginAccessIdentitySummary]
+cfoailItems = lens _cfoailItems (\ s a -> s{_cfoailItems = a}) . _Default . _Coerce;
+
+-- | If IsTruncated is true, this element is present and contains the value
+-- you can use for the Marker request parameter to continue listing your
+-- origin access identities where they left off.
+cfoailNextMarker :: Lens' CloudFrontOriginAccessIdentityList (Maybe Text)
+cfoailNextMarker = lens _cfoailNextMarker (\ s a -> s{_cfoailNextMarker = a});
+
+-- | The value you provided for the Marker request parameter.
+cfoailMarker :: Lens' CloudFrontOriginAccessIdentityList Text
+cfoailMarker = lens _cfoailMarker (\ s a -> s{_cfoailMarker = a});
+
+-- | The value you provided for the MaxItems request parameter.
+cfoailMaxItems :: Lens' CloudFrontOriginAccessIdentityList Int
+cfoailMaxItems = lens _cfoailMaxItems (\ s a -> s{_cfoailMaxItems = a});
+
+-- | A flag that indicates whether more origin access identities remain to be
+-- listed. If your results were truncated, you can make a follow-up
+-- pagination request using the Marker request parameter to retrieve more
+-- items in the list.
+cfoailIsTruncated :: Lens' CloudFrontOriginAccessIdentityList Bool
+cfoailIsTruncated = lens _cfoailIsTruncated (\ s a -> s{_cfoailIsTruncated = a});
+
+-- | The number of CloudFront origin access identities that were created by
+-- the current AWS account.
+cfoailQuantity :: Lens' CloudFrontOriginAccessIdentityList Int
+cfoailQuantity = lens _cfoailQuantity (\ s a -> s{_cfoailQuantity = a});
+
+instance FromXML CloudFrontOriginAccessIdentityList
+         where
+        parseXML x
+          = CloudFrontOriginAccessIdentityList' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may
+                   (parseXMLList
+                      "CloudFrontOriginAccessIdentitySummary"))
+                <*> (x .@? "NextMarker")
+                <*> (x .@ "Marker")
+                <*> (x .@ "MaxItems")
+                <*> (x .@ "IsTruncated")
+                <*> (x .@ "Quantity")
+
+-- | Summary of the information about a CloudFront origin access identity.
+--
+-- /See:/ 'cloudFrontOriginAccessIdentitySummary' smart constructor.
+data CloudFrontOriginAccessIdentitySummary = CloudFrontOriginAccessIdentitySummary'
+    { _cfoaisId                :: !Text
+    , _cfoaisS3CanonicalUserId :: !Text
+    , _cfoaisComment           :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CloudFrontOriginAccessIdentitySummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfoaisId'
+--
+-- * 'cfoaisS3CanonicalUserId'
+--
+-- * 'cfoaisComment'
+cloudFrontOriginAccessIdentitySummary
+    :: Text -- ^ 'cfoaisId'
+    -> Text -- ^ 'cfoaisS3CanonicalUserId'
+    -> Text -- ^ 'cfoaisComment'
+    -> CloudFrontOriginAccessIdentitySummary
+cloudFrontOriginAccessIdentitySummary pId_ pS3CanonicalUserId_ pComment_ =
+    CloudFrontOriginAccessIdentitySummary'
+    { _cfoaisId = pId_
+    , _cfoaisS3CanonicalUserId = pS3CanonicalUserId_
+    , _cfoaisComment = pComment_
+    }
+
+-- | The ID for the origin access identity. For example: E74FTE3AJFJ256A.
+cfoaisId :: Lens' CloudFrontOriginAccessIdentitySummary Text
+cfoaisId = lens _cfoaisId (\ s a -> s{_cfoaisId = a});
+
+-- | The Amazon S3 canonical user ID for the origin access identity, which
+-- you use when giving the origin access identity read permission to an
+-- object in Amazon S3.
+cfoaisS3CanonicalUserId :: Lens' CloudFrontOriginAccessIdentitySummary Text
+cfoaisS3CanonicalUserId = lens _cfoaisS3CanonicalUserId (\ s a -> s{_cfoaisS3CanonicalUserId = a});
+
+-- | The comment for this origin access identity, as originally specified
+-- when created.
+cfoaisComment :: Lens' CloudFrontOriginAccessIdentitySummary Text
+cfoaisComment = lens _cfoaisComment (\ s a -> s{_cfoaisComment = a});
+
+instance FromXML
+         CloudFrontOriginAccessIdentitySummary where
+        parseXML x
+          = CloudFrontOriginAccessIdentitySummary' <$>
+              (x .@ "Id") <*> (x .@ "S3CanonicalUserId") <*>
+                (x .@ "Comment")
+
+-- | A complex type that specifies the whitelisted cookies, if any, that you
+-- want CloudFront to forward to your origin that is associated with this
+-- cache behavior.
+--
+-- /See:/ 'cookieNames' smart constructor.
+data CookieNames = CookieNames'
+    { _cnItems    :: !(Maybe [Text])
+    , _cnQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CookieNames' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cnItems'
+--
+-- * 'cnQuantity'
+cookieNames
+    :: Int -- ^ 'cnQuantity'
+    -> CookieNames
+cookieNames pQuantity_ =
+    CookieNames'
+    { _cnItems = Nothing
+    , _cnQuantity = pQuantity_
+    }
+
+-- | Optional: A complex type that contains whitelisted cookies for this
+-- cache behavior. If Quantity is 0, you can omit Items.
+cnItems :: Lens' CookieNames [Text]
+cnItems = lens _cnItems (\ s a -> s{_cnItems = a}) . _Default . _Coerce;
+
+-- | The number of whitelisted cookies for this cache behavior.
+cnQuantity :: Lens' CookieNames Int
+cnQuantity = lens _cnQuantity (\ s a -> s{_cnQuantity = a});
+
+instance FromXML CookieNames where
+        parseXML x
+          = CookieNames' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "Name"))
+                <*> (x .@ "Quantity")
+
+instance ToXML CookieNames where
+        toXML CookieNames'{..}
+          = mconcat
+              ["Items" @= toXML (toXMLList "Name" <$> _cnItems),
+               "Quantity" @= _cnQuantity]
+
+-- | A complex type that specifies the cookie preferences associated with
+-- this cache behavior.
+--
+-- /See:/ 'cookiePreference' smart constructor.
+data CookiePreference = CookiePreference'
+    { _cpWhitelistedNames :: !(Maybe CookieNames)
+    , _cpForward          :: !ItemSelection
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CookiePreference' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpWhitelistedNames'
+--
+-- * 'cpForward'
+cookiePreference
+    :: ItemSelection -- ^ 'cpForward'
+    -> CookiePreference
+cookiePreference pForward_ =
+    CookiePreference'
+    { _cpWhitelistedNames = Nothing
+    , _cpForward = pForward_
+    }
+
+-- | A complex type that specifies the whitelisted cookies, if any, that you
+-- want CloudFront to forward to your origin that is associated with this
+-- cache behavior.
+cpWhitelistedNames :: Lens' CookiePreference (Maybe CookieNames)
+cpWhitelistedNames = lens _cpWhitelistedNames (\ s a -> s{_cpWhitelistedNames = a});
+
+-- | Use this element to specify whether you want CloudFront to forward
+-- cookies to the origin that is associated with this cache behavior. You
+-- can specify all, none or whitelist. If you choose All, CloudFront
+-- forwards all cookies regardless of how many your application uses.
+cpForward :: Lens' CookiePreference ItemSelection
+cpForward = lens _cpForward (\ s a -> s{_cpForward = a});
+
+instance FromXML CookiePreference where
+        parseXML x
+          = CookiePreference' <$>
+              (x .@? "WhitelistedNames") <*> (x .@ "Forward")
+
+instance ToXML CookiePreference where
+        toXML CookiePreference'{..}
+          = mconcat
+              ["WhitelistedNames" @= _cpWhitelistedNames,
+               "Forward" @= _cpForward]
+
+-- | A complex type that describes how you\'d prefer CloudFront to respond to
+-- requests that result in either a 4xx or 5xx response. You can control
+-- whether a custom error page should be displayed, what the desired
+-- response code should be for this error page and how long should the
+-- error response be cached by CloudFront. If you don\'t want to specify
+-- any custom error responses, include only an empty CustomErrorResponses
+-- element. To delete all custom error responses in an existing
+-- distribution, update the distribution configuration and include only an
+-- empty CustomErrorResponses element. To add, change, or remove one or
+-- more custom error responses, update the distribution configuration and
+-- specify all of the custom error responses that you want to include in
+-- the updated distribution.
+--
+-- /See:/ 'customErrorResponse' smart constructor.
+data CustomErrorResponse = CustomErrorResponse'
+    { _ceResponsePagePath   :: !(Maybe Text)
+    , _ceResponseCode       :: !(Maybe Text)
+    , _ceErrorCachingMinTTL :: !(Maybe Integer)
+    , _ceErrorCode          :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomErrorResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ceResponsePagePath'
+--
+-- * 'ceResponseCode'
+--
+-- * 'ceErrorCachingMinTTL'
+--
+-- * 'ceErrorCode'
+customErrorResponse
+    :: Int -- ^ 'ceErrorCode'
+    -> CustomErrorResponse
+customErrorResponse pErrorCode_ =
+    CustomErrorResponse'
+    { _ceResponsePagePath = Nothing
+    , _ceResponseCode = Nothing
+    , _ceErrorCachingMinTTL = Nothing
+    , _ceErrorCode = pErrorCode_
+    }
+
+-- | The path of the custom error page (for example, \/custom_404.html). The
+-- path is relative to the distribution and must begin with a slash (\/).
+-- If the path includes any non-ASCII characters or unsafe characters as
+-- defined in RFC 1783 (http:\/\/www.ietf.org\/rfc\/rfc1738.txt), URL
+-- encode those characters. Do not URL encode any other characters in the
+-- path, or CloudFront will not return the custom error page to the viewer.
+ceResponsePagePath :: Lens' CustomErrorResponse (Maybe Text)
+ceResponsePagePath = lens _ceResponsePagePath (\ s a -> s{_ceResponsePagePath = a});
+
+-- | The HTTP status code that you want CloudFront to return with the custom
+-- error page to the viewer. For a list of HTTP status codes that you can
+-- replace, see CloudFront Documentation.
+ceResponseCode :: Lens' CustomErrorResponse (Maybe Text)
+ceResponseCode = lens _ceResponseCode (\ s a -> s{_ceResponseCode = a});
+
+-- | The minimum amount of time you want HTTP error codes to stay in
+-- CloudFront caches before CloudFront queries your origin to see whether
+-- the object has been updated. You can specify a value from 0 to
+-- 31,536,000.
+ceErrorCachingMinTTL :: Lens' CustomErrorResponse (Maybe Integer)
+ceErrorCachingMinTTL = lens _ceErrorCachingMinTTL (\ s a -> s{_ceErrorCachingMinTTL = a});
+
+-- | The 4xx or 5xx HTTP status code that you want to customize. For a list
+-- of HTTP status codes that you can customize, see CloudFront
+-- documentation.
+ceErrorCode :: Lens' CustomErrorResponse Int
+ceErrorCode = lens _ceErrorCode (\ s a -> s{_ceErrorCode = a});
+
+instance FromXML CustomErrorResponse where
+        parseXML x
+          = CustomErrorResponse' <$>
+              (x .@? "ResponsePagePath") <*> (x .@? "ResponseCode")
+                <*> (x .@? "ErrorCachingMinTTL")
+                <*> (x .@ "ErrorCode")
+
+instance ToXML CustomErrorResponse where
+        toXML CustomErrorResponse'{..}
+          = mconcat
+              ["ResponsePagePath" @= _ceResponsePagePath,
+               "ResponseCode" @= _ceResponseCode,
+               "ErrorCachingMinTTL" @= _ceErrorCachingMinTTL,
+               "ErrorCode" @= _ceErrorCode]
+
+-- | A complex type that contains zero or more CustomErrorResponse elements.
+--
+-- /See:/ 'customErrorResponses' smart constructor.
+data CustomErrorResponses = CustomErrorResponses'
+    { _cerItems    :: !(Maybe [CustomErrorResponse])
+    , _cerQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomErrorResponses' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cerItems'
+--
+-- * 'cerQuantity'
+customErrorResponses
+    :: Int -- ^ 'cerQuantity'
+    -> CustomErrorResponses
+customErrorResponses pQuantity_ =
+    CustomErrorResponses'
+    { _cerItems = Nothing
+    , _cerQuantity = pQuantity_
+    }
+
+-- | Optional: A complex type that contains custom error responses for this
+-- distribution. If Quantity is 0, you can omit Items.
+cerItems :: Lens' CustomErrorResponses [CustomErrorResponse]
+cerItems = lens _cerItems (\ s a -> s{_cerItems = a}) . _Default . _Coerce;
+
+-- | The number of custom error responses for this distribution.
+cerQuantity :: Lens' CustomErrorResponses Int
+cerQuantity = lens _cerQuantity (\ s a -> s{_cerQuantity = a});
+
+instance FromXML CustomErrorResponses where
+        parseXML x
+          = CustomErrorResponses' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "CustomErrorResponse"))
+                <*> (x .@ "Quantity")
+
+instance ToXML CustomErrorResponses where
+        toXML CustomErrorResponses'{..}
+          = mconcat
+              ["Items" @=
+                 toXML
+                   (toXMLList "CustomErrorResponse" <$> _cerItems),
+               "Quantity" @= _cerQuantity]
+
+-- | A customer origin.
+--
+-- /See:/ 'customOriginConfig' smart constructor.
+data CustomOriginConfig = CustomOriginConfig'
+    { _cocHTTPPort             :: !Int
+    , _cocHTTPSPort            :: !Int
+    , _cocOriginProtocolPolicy :: !OriginProtocolPolicy
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomOriginConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cocHTTPPort'
+--
+-- * 'cocHTTPSPort'
+--
+-- * 'cocOriginProtocolPolicy'
+customOriginConfig
+    :: Int -- ^ 'cocHTTPPort'
+    -> Int -- ^ 'cocHTTPSPort'
+    -> OriginProtocolPolicy -- ^ 'cocOriginProtocolPolicy'
+    -> CustomOriginConfig
+customOriginConfig pHTTPPort_ pHTTPSPort_ pOriginProtocolPolicy_ =
+    CustomOriginConfig'
+    { _cocHTTPPort = pHTTPPort_
+    , _cocHTTPSPort = pHTTPSPort_
+    , _cocOriginProtocolPolicy = pOriginProtocolPolicy_
+    }
+
+-- | The HTTP port the custom origin listens on.
+cocHTTPPort :: Lens' CustomOriginConfig Int
+cocHTTPPort = lens _cocHTTPPort (\ s a -> s{_cocHTTPPort = a});
+
+-- | The HTTPS port the custom origin listens on.
+cocHTTPSPort :: Lens' CustomOriginConfig Int
+cocHTTPSPort = lens _cocHTTPSPort (\ s a -> s{_cocHTTPSPort = a});
+
+-- | The origin protocol policy to apply to your origin.
+cocOriginProtocolPolicy :: Lens' CustomOriginConfig OriginProtocolPolicy
+cocOriginProtocolPolicy = lens _cocOriginProtocolPolicy (\ s a -> s{_cocOriginProtocolPolicy = a});
+
+instance FromXML CustomOriginConfig where
+        parseXML x
+          = CustomOriginConfig' <$>
+              (x .@ "HTTPPort") <*> (x .@ "HTTPSPort") <*>
+                (x .@ "OriginProtocolPolicy")
+
+instance ToXML CustomOriginConfig where
+        toXML CustomOriginConfig'{..}
+          = mconcat
+              ["HTTPPort" @= _cocHTTPPort,
+               "HTTPSPort" @= _cocHTTPSPort,
+               "OriginProtocolPolicy" @= _cocOriginProtocolPolicy]
+
+-- | A complex type that describes the default cache behavior if you do not
+-- specify a CacheBehavior element or if files don\'t match any of the
+-- values of PathPattern in CacheBehavior elements.You must create exactly
+-- one default cache behavior.
+--
+-- /See:/ 'defaultCacheBehavior' smart constructor.
+data DefaultCacheBehavior = DefaultCacheBehavior'
+    { _dcbAllowedMethods       :: !(Maybe AllowedMethods)
+    , _dcbMaxTTL               :: !(Maybe Integer)
+    , _dcbSmoothStreaming      :: !(Maybe Bool)
+    , _dcbDefaultTTL           :: !(Maybe Integer)
+    , _dcbTargetOriginId       :: !Text
+    , _dcbForwardedValues      :: !ForwardedValues
+    , _dcbTrustedSigners       :: !TrustedSigners
+    , _dcbViewerProtocolPolicy :: !ViewerProtocolPolicy
+    , _dcbMinTTL               :: !Integer
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DefaultCacheBehavior' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcbAllowedMethods'
+--
+-- * 'dcbMaxTTL'
+--
+-- * 'dcbSmoothStreaming'
+--
+-- * 'dcbDefaultTTL'
+--
+-- * 'dcbTargetOriginId'
+--
+-- * 'dcbForwardedValues'
+--
+-- * 'dcbTrustedSigners'
+--
+-- * 'dcbViewerProtocolPolicy'
+--
+-- * 'dcbMinTTL'
+defaultCacheBehavior
+    :: Text -- ^ 'dcbTargetOriginId'
+    -> ForwardedValues -- ^ 'dcbForwardedValues'
+    -> TrustedSigners -- ^ 'dcbTrustedSigners'
+    -> ViewerProtocolPolicy -- ^ 'dcbViewerProtocolPolicy'
+    -> Integer -- ^ 'dcbMinTTL'
+    -> DefaultCacheBehavior
+defaultCacheBehavior pTargetOriginId_ pForwardedValues_ pTrustedSigners_ pViewerProtocolPolicy_ pMinTTL_ =
+    DefaultCacheBehavior'
+    { _dcbAllowedMethods = Nothing
+    , _dcbMaxTTL = Nothing
+    , _dcbSmoothStreaming = Nothing
+    , _dcbDefaultTTL = Nothing
+    , _dcbTargetOriginId = pTargetOriginId_
+    , _dcbForwardedValues = pForwardedValues_
+    , _dcbTrustedSigners = pTrustedSigners_
+    , _dcbViewerProtocolPolicy = pViewerProtocolPolicy_
+    , _dcbMinTTL = pMinTTL_
+    }
+
+-- | Undocumented member.
+dcbAllowedMethods :: Lens' DefaultCacheBehavior (Maybe AllowedMethods)
+dcbAllowedMethods = lens _dcbAllowedMethods (\ s a -> s{_dcbAllowedMethods = a});
+
+-- | The maximum amount of time (in seconds) that an object is in a
+-- CloudFront cache before CloudFront forwards another request to your
+-- origin to determine whether the object has been updated. The value that
+-- you specify applies only when your origin adds HTTP headers such as
+-- Cache-Control max-age, Cache-Control s-maxage, and Expires to objects.
+-- You can specify a value from 0 to 3,153,600,000 seconds (100 years).
+dcbMaxTTL :: Lens' DefaultCacheBehavior (Maybe Integer)
+dcbMaxTTL = lens _dcbMaxTTL (\ s a -> s{_dcbMaxTTL = a});
+
+-- | Indicates whether you want to distribute media files in Microsoft Smooth
+-- Streaming format using the origin that is associated with this cache
+-- behavior. If so, specify true; if not, specify false.
+dcbSmoothStreaming :: Lens' DefaultCacheBehavior (Maybe Bool)
+dcbSmoothStreaming = lens _dcbSmoothStreaming (\ s a -> s{_dcbSmoothStreaming = a});
+
+-- | If you don\'t configure your origin to add a Cache-Control max-age
+-- directive or an Expires header, DefaultTTL is the default amount of time
+-- (in seconds) that an object is in a CloudFront cache before CloudFront
+-- forwards another request to your origin to determine whether the object
+-- has been updated. The value that you specify applies only when your
+-- origin does not add HTTP headers such as Cache-Control max-age,
+-- Cache-Control s-maxage, and Expires to objects. You can specify a value
+-- from 0 to 3,153,600,000 seconds (100 years).
+dcbDefaultTTL :: Lens' DefaultCacheBehavior (Maybe Integer)
+dcbDefaultTTL = lens _dcbDefaultTTL (\ s a -> s{_dcbDefaultTTL = a});
+
+-- | The value of ID for the origin that you want CloudFront to route
+-- requests to when a request matches the path pattern either for a cache
+-- behavior or for the default cache behavior.
+dcbTargetOriginId :: Lens' DefaultCacheBehavior Text
+dcbTargetOriginId = lens _dcbTargetOriginId (\ s a -> s{_dcbTargetOriginId = a});
+
+-- | A complex type that specifies how CloudFront handles query strings,
+-- cookies and headers.
+dcbForwardedValues :: Lens' DefaultCacheBehavior ForwardedValues
+dcbForwardedValues = lens _dcbForwardedValues (\ s a -> s{_dcbForwardedValues = a});
+
+-- | A complex type that specifies the AWS accounts, if any, that you want to
+-- allow to create signed URLs for private content. If you want to require
+-- signed URLs in requests for objects in the target origin that match the
+-- PathPattern for this cache behavior, specify true for Enabled, and
+-- specify the applicable values for Quantity and Items. For more
+-- information, go to Using a Signed URL to Serve Private Content in the
+-- Amazon CloudFront Developer Guide. If you don\'t want to require signed
+-- URLs in requests for objects that match PathPattern, specify false for
+-- Enabled and 0 for Quantity. Omit Items. To add, change, or remove one or
+-- more trusted signers, change Enabled to true (if it\'s currently false),
+-- change Quantity as applicable, and specify all of the trusted signers
+-- that you want to include in the updated distribution.
+dcbTrustedSigners :: Lens' DefaultCacheBehavior TrustedSigners
+dcbTrustedSigners = lens _dcbTrustedSigners (\ s a -> s{_dcbTrustedSigners = a});
+
+-- | Use this element to specify the protocol that users can use to access
+-- the files in the origin specified by TargetOriginId when a request
+-- matches the path pattern in PathPattern. If you want CloudFront to allow
+-- end users to use any available protocol, specify allow-all. If you want
+-- CloudFront to require HTTPS, specify https. If you want CloudFront to
+-- respond to an HTTP request with an HTTP status code of 301 (Moved
+-- Permanently) and the HTTPS URL, specify redirect-to-https. The viewer
+-- then resubmits the request using the HTTPS URL.
+dcbViewerProtocolPolicy :: Lens' DefaultCacheBehavior ViewerProtocolPolicy
+dcbViewerProtocolPolicy = lens _dcbViewerProtocolPolicy (\ s a -> s{_dcbViewerProtocolPolicy = a});
+
+-- | The minimum amount of time that you want objects to stay in CloudFront
+-- caches before CloudFront queries your origin to see whether the object
+-- has been updated.You can specify a value from 0 to 3,153,600,000 seconds
+-- (100 years).
+dcbMinTTL :: Lens' DefaultCacheBehavior Integer
+dcbMinTTL = lens _dcbMinTTL (\ s a -> s{_dcbMinTTL = a});
+
+instance FromXML DefaultCacheBehavior where
+        parseXML x
+          = DefaultCacheBehavior' <$>
+              (x .@? "AllowedMethods") <*> (x .@? "MaxTTL") <*>
+                (x .@? "SmoothStreaming")
+                <*> (x .@? "DefaultTTL")
+                <*> (x .@ "TargetOriginId")
+                <*> (x .@ "ForwardedValues")
+                <*> (x .@ "TrustedSigners")
+                <*> (x .@ "ViewerProtocolPolicy")
+                <*> (x .@ "MinTTL")
+
+instance ToXML DefaultCacheBehavior where
+        toXML DefaultCacheBehavior'{..}
+          = mconcat
+              ["AllowedMethods" @= _dcbAllowedMethods,
+               "MaxTTL" @= _dcbMaxTTL,
+               "SmoothStreaming" @= _dcbSmoothStreaming,
+               "DefaultTTL" @= _dcbDefaultTTL,
+               "TargetOriginId" @= _dcbTargetOriginId,
+               "ForwardedValues" @= _dcbForwardedValues,
+               "TrustedSigners" @= _dcbTrustedSigners,
+               "ViewerProtocolPolicy" @= _dcbViewerProtocolPolicy,
+               "MinTTL" @= _dcbMinTTL]
+
+-- | A distribution.
+--
+-- /See:/ 'distribution' smart constructor.
+data Distribution = Distribution'
+    { _dId                            :: !Text
+    , _dStatus                        :: !Text
+    , _dLastModifiedTime              :: !ISO8601
+    , _dInProgressInvalidationBatches :: !Int
+    , _dDomainName                    :: !Text
+    , _dActiveTrustedSigners          :: !ActiveTrustedSigners
+    , _dDistributionConfig            :: !DistributionConfig
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Distribution' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dId'
+--
+-- * 'dStatus'
+--
+-- * 'dLastModifiedTime'
+--
+-- * 'dInProgressInvalidationBatches'
+--
+-- * 'dDomainName'
+--
+-- * 'dActiveTrustedSigners'
+--
+-- * 'dDistributionConfig'
+distribution
+    :: Text -- ^ 'dId'
+    -> Text -- ^ 'dStatus'
+    -> UTCTime -- ^ 'dLastModifiedTime'
+    -> Int -- ^ 'dInProgressInvalidationBatches'
+    -> Text -- ^ 'dDomainName'
+    -> ActiveTrustedSigners -- ^ 'dActiveTrustedSigners'
+    -> DistributionConfig -- ^ 'dDistributionConfig'
+    -> Distribution
+distribution pId_ pStatus_ pLastModifiedTime_ pInProgressInvalidationBatches_ pDomainName_ pActiveTrustedSigners_ pDistributionConfig_ =
+    Distribution'
+    { _dId = pId_
+    , _dStatus = pStatus_
+    , _dLastModifiedTime = _Time # pLastModifiedTime_
+    , _dInProgressInvalidationBatches = pInProgressInvalidationBatches_
+    , _dDomainName = pDomainName_
+    , _dActiveTrustedSigners = pActiveTrustedSigners_
+    , _dDistributionConfig = pDistributionConfig_
+    }
+
+-- | The identifier for the distribution. For example: EDFDVBD632BHDS5.
+dId :: Lens' Distribution Text
+dId = lens _dId (\ s a -> s{_dId = a});
+
+-- | This response element indicates the current status of the distribution.
+-- When the status is Deployed, the distribution\'s information is fully
+-- propagated throughout the Amazon CloudFront system.
+dStatus :: Lens' Distribution Text
+dStatus = lens _dStatus (\ s a -> s{_dStatus = a});
+
+-- | The date and time the distribution was last modified.
+dLastModifiedTime :: Lens' Distribution UTCTime
+dLastModifiedTime = lens _dLastModifiedTime (\ s a -> s{_dLastModifiedTime = a}) . _Time;
+
+-- | The number of invalidation batches currently in progress.
+dInProgressInvalidationBatches :: Lens' Distribution Int
+dInProgressInvalidationBatches = lens _dInProgressInvalidationBatches (\ s a -> s{_dInProgressInvalidationBatches = a});
+
+-- | The domain name corresponding to the distribution. For example:
+-- d604721fxaaqy9.cloudfront.net.
+dDomainName :: Lens' Distribution Text
+dDomainName = lens _dDomainName (\ s a -> s{_dDomainName = a});
+
+-- | CloudFront automatically adds this element to the response only if
+-- you\'ve set up the distribution to serve private content with signed
+-- URLs. The element lists the key pair IDs that CloudFront is aware of for
+-- each trusted signer. The Signer child element lists the AWS account
+-- number of the trusted signer (or an empty Self element if the signer is
+-- you). The Signer element also includes the IDs of any active key pairs
+-- associated with the trusted signer\'s AWS account. If no KeyPairId
+-- element appears for a Signer, that signer can\'t create working signed
+-- URLs.
+dActiveTrustedSigners :: Lens' Distribution ActiveTrustedSigners
+dActiveTrustedSigners = lens _dActiveTrustedSigners (\ s a -> s{_dActiveTrustedSigners = a});
+
+-- | The current configuration information for the distribution.
+dDistributionConfig :: Lens' Distribution DistributionConfig
+dDistributionConfig = lens _dDistributionConfig (\ s a -> s{_dDistributionConfig = a});
+
+instance FromXML Distribution where
+        parseXML x
+          = Distribution' <$>
+              (x .@ "Id") <*> (x .@ "Status") <*>
+                (x .@ "LastModifiedTime")
+                <*> (x .@ "InProgressInvalidationBatches")
+                <*> (x .@ "DomainName")
+                <*> (x .@ "ActiveTrustedSigners")
+                <*> (x .@ "DistributionConfig")
+
+-- | A distribution Configuration.
+--
+-- /See:/ 'distributionConfig' smart constructor.
+data DistributionConfig = DistributionConfig'
+    { _dcDefaultRootObject    :: !(Maybe Text)
+    , _dcAliases              :: !(Maybe Aliases)
+    , _dcCustomErrorResponses :: !(Maybe CustomErrorResponses)
+    , _dcPriceClass           :: !(Maybe PriceClass)
+    , _dcViewerCertificate    :: !(Maybe ViewerCertificate)
+    , _dcRestrictions         :: !(Maybe Restrictions)
+    , _dcCacheBehaviors       :: !(Maybe CacheBehaviors)
+    , _dcLogging              :: !(Maybe LoggingConfig)
+    , _dcCallerReference      :: !Text
+    , _dcOrigins              :: !Origins
+    , _dcDefaultCacheBehavior :: !DefaultCacheBehavior
+    , _dcComment              :: !Text
+    , _dcEnabled              :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DistributionConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcDefaultRootObject'
+--
+-- * 'dcAliases'
+--
+-- * 'dcCustomErrorResponses'
+--
+-- * 'dcPriceClass'
+--
+-- * 'dcViewerCertificate'
+--
+-- * 'dcRestrictions'
+--
+-- * 'dcCacheBehaviors'
+--
+-- * 'dcLogging'
+--
+-- * 'dcCallerReference'
+--
+-- * 'dcOrigins'
+--
+-- * 'dcDefaultCacheBehavior'
+--
+-- * 'dcComment'
+--
+-- * 'dcEnabled'
+distributionConfig
+    :: Text -- ^ 'dcCallerReference'
+    -> Origins -- ^ 'dcOrigins'
+    -> DefaultCacheBehavior -- ^ 'dcDefaultCacheBehavior'
+    -> Text -- ^ 'dcComment'
+    -> Bool -- ^ 'dcEnabled'
+    -> DistributionConfig
+distributionConfig pCallerReference_ pOrigins_ pDefaultCacheBehavior_ pComment_ pEnabled_ =
+    DistributionConfig'
+    { _dcDefaultRootObject = Nothing
+    , _dcAliases = Nothing
+    , _dcCustomErrorResponses = Nothing
+    , _dcPriceClass = Nothing
+    , _dcViewerCertificate = Nothing
+    , _dcRestrictions = Nothing
+    , _dcCacheBehaviors = Nothing
+    , _dcLogging = Nothing
+    , _dcCallerReference = pCallerReference_
+    , _dcOrigins = pOrigins_
+    , _dcDefaultCacheBehavior = pDefaultCacheBehavior_
+    , _dcComment = pComment_
+    , _dcEnabled = pEnabled_
+    }
+
+-- | The object that you want CloudFront to return (for example, index.html)
+-- when an end user requests the root URL for your distribution
+-- (http:\/\/www.example.com) instead of an object in your distribution
+-- (http:\/\/www.example.com\/index.html). Specifying a default root object
+-- avoids exposing the contents of your distribution. If you don\'t want to
+-- specify a default root object when you create a distribution, include an
+-- empty DefaultRootObject element. To delete the default root object from
+-- an existing distribution, update the distribution configuration and
+-- include an empty DefaultRootObject element. To replace the default root
+-- object, update the distribution configuration and specify the new
+-- object.
+dcDefaultRootObject :: Lens' DistributionConfig (Maybe Text)
+dcDefaultRootObject = lens _dcDefaultRootObject (\ s a -> s{_dcDefaultRootObject = a});
+
+-- | A complex type that contains information about CNAMEs (alternate domain
+-- names), if any, for this distribution.
+dcAliases :: Lens' DistributionConfig (Maybe Aliases)
+dcAliases = lens _dcAliases (\ s a -> s{_dcAliases = a});
+
+-- | A complex type that contains zero or more CustomErrorResponse elements.
+dcCustomErrorResponses :: Lens' DistributionConfig (Maybe CustomErrorResponses)
+dcCustomErrorResponses = lens _dcCustomErrorResponses (\ s a -> s{_dcCustomErrorResponses = a});
+
+-- | A complex type that contains information about price class for this
+-- distribution.
+dcPriceClass :: Lens' DistributionConfig (Maybe PriceClass)
+dcPriceClass = lens _dcPriceClass (\ s a -> s{_dcPriceClass = a});
+
+-- | Undocumented member.
+dcViewerCertificate :: Lens' DistributionConfig (Maybe ViewerCertificate)
+dcViewerCertificate = lens _dcViewerCertificate (\ s a -> s{_dcViewerCertificate = a});
+
+-- | Undocumented member.
+dcRestrictions :: Lens' DistributionConfig (Maybe Restrictions)
+dcRestrictions = lens _dcRestrictions (\ s a -> s{_dcRestrictions = a});
+
+-- | A complex type that contains zero or more CacheBehavior elements.
+dcCacheBehaviors :: Lens' DistributionConfig (Maybe CacheBehaviors)
+dcCacheBehaviors = lens _dcCacheBehaviors (\ s a -> s{_dcCacheBehaviors = a});
+
+-- | A complex type that controls whether access logs are written for the
+-- distribution.
+dcLogging :: Lens' DistributionConfig (Maybe LoggingConfig)
+dcLogging = lens _dcLogging (\ s a -> s{_dcLogging = a});
+
+-- | A unique number that ensures the request can\'t be replayed. If the
+-- CallerReference is new (no matter the content of the DistributionConfig
+-- object), a new distribution is created. If the CallerReference is a
+-- value you already sent in a previous request to create a distribution,
+-- and the content of the DistributionConfig is identical to the original
+-- request (ignoring white space), the response includes the same
+-- information returned to the original request. If the CallerReference is
+-- a value you already sent in a previous request to create a distribution
+-- but the content of the DistributionConfig is different from the original
+-- request, CloudFront returns a DistributionAlreadyExists error.
+dcCallerReference :: Lens' DistributionConfig Text
+dcCallerReference = lens _dcCallerReference (\ s a -> s{_dcCallerReference = a});
+
+-- | A complex type that contains information about origins for this
+-- distribution.
+dcOrigins :: Lens' DistributionConfig Origins
+dcOrigins = lens _dcOrigins (\ s a -> s{_dcOrigins = a});
+
+-- | A complex type that describes the default cache behavior if you do not
+-- specify a CacheBehavior element or if files don\'t match any of the
+-- values of PathPattern in CacheBehavior elements.You must create exactly
+-- one default cache behavior.
+dcDefaultCacheBehavior :: Lens' DistributionConfig DefaultCacheBehavior
+dcDefaultCacheBehavior = lens _dcDefaultCacheBehavior (\ s a -> s{_dcDefaultCacheBehavior = a});
+
+-- | Any comments you want to include about the distribution.
+dcComment :: Lens' DistributionConfig Text
+dcComment = lens _dcComment (\ s a -> s{_dcComment = a});
+
+-- | Whether the distribution is enabled to accept end user requests for
+-- content.
+dcEnabled :: Lens' DistributionConfig Bool
+dcEnabled = lens _dcEnabled (\ s a -> s{_dcEnabled = a});
+
+instance FromXML DistributionConfig where
+        parseXML x
+          = DistributionConfig' <$>
+              (x .@? "DefaultRootObject") <*> (x .@? "Aliases") <*>
+                (x .@? "CustomErrorResponses")
+                <*> (x .@? "PriceClass")
+                <*> (x .@? "ViewerCertificate")
+                <*> (x .@? "Restrictions")
+                <*> (x .@? "CacheBehaviors")
+                <*> (x .@? "Logging")
+                <*> (x .@ "CallerReference")
+                <*> (x .@ "Origins")
+                <*> (x .@ "DefaultCacheBehavior")
+                <*> (x .@ "Comment")
+                <*> (x .@ "Enabled")
+
+instance ToXML DistributionConfig where
+        toXML DistributionConfig'{..}
+          = mconcat
+              ["DefaultRootObject" @= _dcDefaultRootObject,
+               "Aliases" @= _dcAliases,
+               "CustomErrorResponses" @= _dcCustomErrorResponses,
+               "PriceClass" @= _dcPriceClass,
+               "ViewerCertificate" @= _dcViewerCertificate,
+               "Restrictions" @= _dcRestrictions,
+               "CacheBehaviors" @= _dcCacheBehaviors,
+               "Logging" @= _dcLogging,
+               "CallerReference" @= _dcCallerReference,
+               "Origins" @= _dcOrigins,
+               "DefaultCacheBehavior" @= _dcDefaultCacheBehavior,
+               "Comment" @= _dcComment, "Enabled" @= _dcEnabled]
+
+-- | A distribution list.
+--
+-- /See:/ 'distributionList' smart constructor.
+data DistributionList = DistributionList'
+    { _dlItems       :: !(Maybe [DistributionSummary])
+    , _dlNextMarker  :: !(Maybe Text)
+    , _dlMarker      :: !Text
+    , _dlMaxItems    :: !Int
+    , _dlIsTruncated :: !Bool
+    , _dlQuantity    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DistributionList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dlItems'
+--
+-- * 'dlNextMarker'
+--
+-- * 'dlMarker'
+--
+-- * 'dlMaxItems'
+--
+-- * 'dlIsTruncated'
+--
+-- * 'dlQuantity'
+distributionList
+    :: Text -- ^ 'dlMarker'
+    -> Int -- ^ 'dlMaxItems'
+    -> Bool -- ^ 'dlIsTruncated'
+    -> Int -- ^ 'dlQuantity'
+    -> DistributionList
+distributionList pMarker_ pMaxItems_ pIsTruncated_ pQuantity_ =
+    DistributionList'
+    { _dlItems = Nothing
+    , _dlNextMarker = Nothing
+    , _dlMarker = pMarker_
+    , _dlMaxItems = pMaxItems_
+    , _dlIsTruncated = pIsTruncated_
+    , _dlQuantity = pQuantity_
+    }
+
+-- | A complex type that contains one DistributionSummary element for each
+-- distribution that was created by the current AWS account.
+dlItems :: Lens' DistributionList [DistributionSummary]
+dlItems = lens _dlItems (\ s a -> s{_dlItems = a}) . _Default . _Coerce;
+
+-- | If IsTruncated is true, this element is present and contains the value
+-- you can use for the Marker request parameter to continue listing your
+-- distributions where they left off.
+dlNextMarker :: Lens' DistributionList (Maybe Text)
+dlNextMarker = lens _dlNextMarker (\ s a -> s{_dlNextMarker = a});
+
+-- | The value you provided for the Marker request parameter.
+dlMarker :: Lens' DistributionList Text
+dlMarker = lens _dlMarker (\ s a -> s{_dlMarker = a});
+
+-- | The value you provided for the MaxItems request parameter.
+dlMaxItems :: Lens' DistributionList Int
+dlMaxItems = lens _dlMaxItems (\ s a -> s{_dlMaxItems = a});
+
+-- | A flag that indicates whether more distributions remain to be listed. If
+-- your results were truncated, you can make a follow-up pagination request
+-- using the Marker request parameter to retrieve more distributions in the
+-- list.
+dlIsTruncated :: Lens' DistributionList Bool
+dlIsTruncated = lens _dlIsTruncated (\ s a -> s{_dlIsTruncated = a});
+
+-- | The number of distributions that were created by the current AWS
+-- account.
+dlQuantity :: Lens' DistributionList Int
+dlQuantity = lens _dlQuantity (\ s a -> s{_dlQuantity = a});
+
+instance FromXML DistributionList where
+        parseXML x
+          = DistributionList' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "DistributionSummary"))
+                <*> (x .@? "NextMarker")
+                <*> (x .@ "Marker")
+                <*> (x .@ "MaxItems")
+                <*> (x .@ "IsTruncated")
+                <*> (x .@ "Quantity")
+
+-- | A summary of the information for an Amazon CloudFront distribution.
+--
+-- /See:/ 'distributionSummary' smart constructor.
+data DistributionSummary = DistributionSummary'
+    { _dsId                   :: !Text
+    , _dsStatus               :: !Text
+    , _dsLastModifiedTime     :: !ISO8601
+    , _dsDomainName           :: !Text
+    , _dsAliases              :: !Aliases
+    , _dsOrigins              :: !Origins
+    , _dsDefaultCacheBehavior :: !DefaultCacheBehavior
+    , _dsCacheBehaviors       :: !CacheBehaviors
+    , _dsCustomErrorResponses :: !CustomErrorResponses
+    , _dsComment              :: !Text
+    , _dsPriceClass           :: !PriceClass
+    , _dsEnabled              :: !Bool
+    , _dsViewerCertificate    :: !ViewerCertificate
+    , _dsRestrictions         :: !Restrictions
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DistributionSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsId'
+--
+-- * 'dsStatus'
+--
+-- * 'dsLastModifiedTime'
+--
+-- * 'dsDomainName'
+--
+-- * 'dsAliases'
+--
+-- * 'dsOrigins'
+--
+-- * 'dsDefaultCacheBehavior'
+--
+-- * 'dsCacheBehaviors'
+--
+-- * 'dsCustomErrorResponses'
+--
+-- * 'dsComment'
+--
+-- * 'dsPriceClass'
+--
+-- * 'dsEnabled'
+--
+-- * 'dsViewerCertificate'
+--
+-- * 'dsRestrictions'
+distributionSummary
+    :: Text -- ^ 'dsId'
+    -> Text -- ^ 'dsStatus'
+    -> UTCTime -- ^ 'dsLastModifiedTime'
+    -> Text -- ^ 'dsDomainName'
+    -> Aliases -- ^ 'dsAliases'
+    -> Origins -- ^ 'dsOrigins'
+    -> DefaultCacheBehavior -- ^ 'dsDefaultCacheBehavior'
+    -> CacheBehaviors -- ^ 'dsCacheBehaviors'
+    -> CustomErrorResponses -- ^ 'dsCustomErrorResponses'
+    -> Text -- ^ 'dsComment'
+    -> PriceClass -- ^ 'dsPriceClass'
+    -> Bool -- ^ 'dsEnabled'
+    -> ViewerCertificate -- ^ 'dsViewerCertificate'
+    -> Restrictions -- ^ 'dsRestrictions'
+    -> DistributionSummary
+distributionSummary pId_ pStatus_ pLastModifiedTime_ pDomainName_ pAliases_ pOrigins_ pDefaultCacheBehavior_ pCacheBehaviors_ pCustomErrorResponses_ pComment_ pPriceClass_ pEnabled_ pViewerCertificate_ pRestrictions_ =
+    DistributionSummary'
+    { _dsId = pId_
+    , _dsStatus = pStatus_
+    , _dsLastModifiedTime = _Time # pLastModifiedTime_
+    , _dsDomainName = pDomainName_
+    , _dsAliases = pAliases_
+    , _dsOrigins = pOrigins_
+    , _dsDefaultCacheBehavior = pDefaultCacheBehavior_
+    , _dsCacheBehaviors = pCacheBehaviors_
+    , _dsCustomErrorResponses = pCustomErrorResponses_
+    , _dsComment = pComment_
+    , _dsPriceClass = pPriceClass_
+    , _dsEnabled = pEnabled_
+    , _dsViewerCertificate = pViewerCertificate_
+    , _dsRestrictions = pRestrictions_
+    }
+
+-- | The identifier for the distribution. For example: EDFDVBD632BHDS5.
+dsId :: Lens' DistributionSummary Text
+dsId = lens _dsId (\ s a -> s{_dsId = a});
+
+-- | This response element indicates the current status of the distribution.
+-- When the status is Deployed, the distribution\'s information is fully
+-- propagated throughout the Amazon CloudFront system.
+dsStatus :: Lens' DistributionSummary Text
+dsStatus = lens _dsStatus (\ s a -> s{_dsStatus = a});
+
+-- | The date and time the distribution was last modified.
+dsLastModifiedTime :: Lens' DistributionSummary UTCTime
+dsLastModifiedTime = lens _dsLastModifiedTime (\ s a -> s{_dsLastModifiedTime = a}) . _Time;
+
+-- | The domain name corresponding to the distribution. For example:
+-- d604721fxaaqy9.cloudfront.net.
+dsDomainName :: Lens' DistributionSummary Text
+dsDomainName = lens _dsDomainName (\ s a -> s{_dsDomainName = a});
+
+-- | A complex type that contains information about CNAMEs (alternate domain
+-- names), if any, for this distribution.
+dsAliases :: Lens' DistributionSummary Aliases
+dsAliases = lens _dsAliases (\ s a -> s{_dsAliases = a});
+
+-- | A complex type that contains information about origins for this
+-- distribution.
+dsOrigins :: Lens' DistributionSummary Origins
+dsOrigins = lens _dsOrigins (\ s a -> s{_dsOrigins = a});
+
+-- | A complex type that describes the default cache behavior if you do not
+-- specify a CacheBehavior element or if files don\'t match any of the
+-- values of PathPattern in CacheBehavior elements.You must create exactly
+-- one default cache behavior.
+dsDefaultCacheBehavior :: Lens' DistributionSummary DefaultCacheBehavior
+dsDefaultCacheBehavior = lens _dsDefaultCacheBehavior (\ s a -> s{_dsDefaultCacheBehavior = a});
+
+-- | A complex type that contains zero or more CacheBehavior elements.
+dsCacheBehaviors :: Lens' DistributionSummary CacheBehaviors
+dsCacheBehaviors = lens _dsCacheBehaviors (\ s a -> s{_dsCacheBehaviors = a});
+
+-- | A complex type that contains zero or more CustomErrorResponses elements.
+dsCustomErrorResponses :: Lens' DistributionSummary CustomErrorResponses
+dsCustomErrorResponses = lens _dsCustomErrorResponses (\ s a -> s{_dsCustomErrorResponses = a});
+
+-- | The comment originally specified when this distribution was created.
+dsComment :: Lens' DistributionSummary Text
+dsComment = lens _dsComment (\ s a -> s{_dsComment = a});
+
+-- | Undocumented member.
+dsPriceClass :: Lens' DistributionSummary PriceClass
+dsPriceClass = lens _dsPriceClass (\ s a -> s{_dsPriceClass = a});
+
+-- | Whether the distribution is enabled to accept end user requests for
+-- content.
+dsEnabled :: Lens' DistributionSummary Bool
+dsEnabled = lens _dsEnabled (\ s a -> s{_dsEnabled = a});
+
+-- | Undocumented member.
+dsViewerCertificate :: Lens' DistributionSummary ViewerCertificate
+dsViewerCertificate = lens _dsViewerCertificate (\ s a -> s{_dsViewerCertificate = a});
+
+-- | Undocumented member.
+dsRestrictions :: Lens' DistributionSummary Restrictions
+dsRestrictions = lens _dsRestrictions (\ s a -> s{_dsRestrictions = a});
+
+instance FromXML DistributionSummary where
+        parseXML x
+          = DistributionSummary' <$>
+              (x .@ "Id") <*> (x .@ "Status") <*>
+                (x .@ "LastModifiedTime")
+                <*> (x .@ "DomainName")
+                <*> (x .@ "Aliases")
+                <*> (x .@ "Origins")
+                <*> (x .@ "DefaultCacheBehavior")
+                <*> (x .@ "CacheBehaviors")
+                <*> (x .@ "CustomErrorResponses")
+                <*> (x .@ "Comment")
+                <*> (x .@ "PriceClass")
+                <*> (x .@ "Enabled")
+                <*> (x .@ "ViewerCertificate")
+                <*> (x .@ "Restrictions")
+
+-- | A complex type that specifies how CloudFront handles query strings,
+-- cookies and headers.
+--
+-- /See:/ 'forwardedValues' smart constructor.
+data ForwardedValues = ForwardedValues'
+    { _fvHeaders     :: !(Maybe Headers)
+    , _fvQueryString :: !Bool
+    , _fvCookies     :: !CookiePreference
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ForwardedValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fvHeaders'
+--
+-- * 'fvQueryString'
+--
+-- * 'fvCookies'
+forwardedValues
+    :: Bool -- ^ 'fvQueryString'
+    -> CookiePreference -- ^ 'fvCookies'
+    -> ForwardedValues
+forwardedValues pQueryString_ pCookies_ =
+    ForwardedValues'
+    { _fvHeaders = Nothing
+    , _fvQueryString = pQueryString_
+    , _fvCookies = pCookies_
+    }
+
+-- | A complex type that specifies the Headers, if any, that you want
+-- CloudFront to vary upon for this cache behavior.
+fvHeaders :: Lens' ForwardedValues (Maybe Headers)
+fvHeaders = lens _fvHeaders (\ s a -> s{_fvHeaders = a});
+
+-- | Indicates whether you want CloudFront to forward query strings to the
+-- origin that is associated with this cache behavior. If so, specify true;
+-- if not, specify false.
+fvQueryString :: Lens' ForwardedValues Bool
+fvQueryString = lens _fvQueryString (\ s a -> s{_fvQueryString = a});
+
+-- | A complex type that specifies how CloudFront handles cookies.
+fvCookies :: Lens' ForwardedValues CookiePreference
+fvCookies = lens _fvCookies (\ s a -> s{_fvCookies = a});
+
+instance FromXML ForwardedValues where
+        parseXML x
+          = ForwardedValues' <$>
+              (x .@? "Headers") <*> (x .@ "QueryString") <*>
+                (x .@ "Cookies")
+
+instance ToXML ForwardedValues where
+        toXML ForwardedValues'{..}
+          = mconcat
+              ["Headers" @= _fvHeaders,
+               "QueryString" @= _fvQueryString,
+               "Cookies" @= _fvCookies]
+
+-- | A complex type that controls the countries in which your content is
+-- distributed. For more information about geo restriction, go to
+-- Customizing Error Responses in the Amazon CloudFront Developer Guide.
+-- CloudFront determines the location of your users using MaxMind GeoIP
+-- databases. For information about the accuracy of these databases, see
+-- How accurate are your GeoIP databases? on the MaxMind website.
+--
+-- /See:/ 'geoRestriction' smart constructor.
+data GeoRestriction = GeoRestriction'
+    { _grItems           :: !(Maybe [Text])
+    , _grRestrictionType :: !GeoRestrictionType
+    , _grQuantity        :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GeoRestriction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grItems'
+--
+-- * 'grRestrictionType'
+--
+-- * 'grQuantity'
+geoRestriction
+    :: GeoRestrictionType -- ^ 'grRestrictionType'
+    -> Int -- ^ 'grQuantity'
+    -> GeoRestriction
+geoRestriction pRestrictionType_ pQuantity_ =
+    GeoRestriction'
+    { _grItems = Nothing
+    , _grRestrictionType = pRestrictionType_
+    , _grQuantity = pQuantity_
+    }
+
+-- | A complex type that contains a Location element for each country in
+-- which you want CloudFront either to distribute your content (whitelist)
+-- or not distribute your content (blacklist). The Location element is a
+-- two-letter, uppercase country code for a country that you want to
+-- include in your blacklist or whitelist. Include one Location element for
+-- each country. CloudFront and MaxMind both use ISO 3166 country codes.
+-- For the current list of countries and the corresponding codes, see ISO
+-- 3166-1-alpha-2 code on the International Organization for
+-- Standardization website. You can also refer to the country list in the
+-- CloudFront console, which includes both country names and codes.
+grItems :: Lens' GeoRestriction [Text]
+grItems = lens _grItems (\ s a -> s{_grItems = a}) . _Default . _Coerce;
+
+-- | The method that you want to use to restrict distribution of your content
+-- by country: - none: No geo restriction is enabled, meaning access to
+-- content is not restricted by client geo location. - blacklist: The
+-- Location elements specify the countries in which you do not want
+-- CloudFront to distribute your content. - whitelist: The Location
+-- elements specify the countries in which you want CloudFront to
+-- distribute your content.
+grRestrictionType :: Lens' GeoRestriction GeoRestrictionType
+grRestrictionType = lens _grRestrictionType (\ s a -> s{_grRestrictionType = a});
+
+-- | When geo restriction is enabled, this is the number of countries in your
+-- whitelist or blacklist. Otherwise, when it is not enabled, Quantity is
+-- 0, and you can omit Items.
+grQuantity :: Lens' GeoRestriction Int
+grQuantity = lens _grQuantity (\ s a -> s{_grQuantity = a});
+
+instance FromXML GeoRestriction where
+        parseXML x
+          = GeoRestriction' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "Location"))
+                <*> (x .@ "RestrictionType")
+                <*> (x .@ "Quantity")
+
+instance ToXML GeoRestriction where
+        toXML GeoRestriction'{..}
+          = mconcat
+              ["Items" @=
+                 toXML (toXMLList "Location" <$> _grItems),
+               "RestrictionType" @= _grRestrictionType,
+               "Quantity" @= _grQuantity]
+
+-- | A complex type that specifies the headers that you want CloudFront to
+-- forward to the origin for this cache behavior. For the headers that you
+-- specify, CloudFront also caches separate versions of a given object
+-- based on the header values in viewer requests; this is known as varying
+-- on headers. For example, suppose viewer requests for logo.jpg contain a
+-- custom Product header that has a value of either Acme or Apex, and you
+-- configure CloudFront to vary on the Product header. CloudFront forwards
+-- the Product header to the origin and caches the response from the origin
+-- once for each header value.
+--
+-- /See:/ 'headers' smart constructor.
+data Headers = Headers'
+    { _hItems    :: !(Maybe [Text])
+    , _hQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Headers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hItems'
+--
+-- * 'hQuantity'
+headers
+    :: Int -- ^ 'hQuantity'
+    -> Headers
+headers pQuantity_ =
+    Headers'
+    { _hItems = Nothing
+    , _hQuantity = pQuantity_
+    }
+
+-- | Optional: A complex type that contains a Name element for each header
+-- that you want CloudFront to forward to the origin and to vary on for
+-- this cache behavior. If Quantity is 0, omit Items.
+hItems :: Lens' Headers [Text]
+hItems = lens _hItems (\ s a -> s{_hItems = a}) . _Default . _Coerce;
+
+-- | The number of different headers that you want CloudFront to forward to
+-- the origin and to vary on for this cache behavior. The maximum number of
+-- headers that you can specify by name is 10. If you want CloudFront to
+-- forward all headers to the origin and vary on all of them, specify 1 for
+-- Quantity and * for Name. If you don\'t want CloudFront to forward any
+-- additional headers to the origin or to vary on any headers, specify 0
+-- for Quantity and omit Items.
+hQuantity :: Lens' Headers Int
+hQuantity = lens _hQuantity (\ s a -> s{_hQuantity = a});
+
+instance FromXML Headers where
+        parseXML x
+          = Headers' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "Name"))
+                <*> (x .@ "Quantity")
+
+instance ToXML Headers where
+        toXML Headers'{..}
+          = mconcat
+              ["Items" @= toXML (toXMLList "Name" <$> _hItems),
+               "Quantity" @= _hQuantity]
+
+-- | An invalidation.
+--
+-- /See:/ 'invalidation' smart constructor.
+data Invalidation = Invalidation'
+    { _iId                :: !Text
+    , _iStatus            :: !Text
+    , _iCreateTime        :: !ISO8601
+    , _iInvalidationBatch :: !InvalidationBatch
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Invalidation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iId'
+--
+-- * 'iStatus'
+--
+-- * 'iCreateTime'
+--
+-- * 'iInvalidationBatch'
+invalidation
+    :: Text -- ^ 'iId'
+    -> Text -- ^ 'iStatus'
+    -> UTCTime -- ^ 'iCreateTime'
+    -> InvalidationBatch -- ^ 'iInvalidationBatch'
+    -> Invalidation
+invalidation pId_ pStatus_ pCreateTime_ pInvalidationBatch_ =
+    Invalidation'
+    { _iId = pId_
+    , _iStatus = pStatus_
+    , _iCreateTime = _Time # pCreateTime_
+    , _iInvalidationBatch = pInvalidationBatch_
+    }
+
+-- | The identifier for the invalidation request. For example:
+-- IDFDVBD632BHDS5.
+iId :: Lens' Invalidation Text
+iId = lens _iId (\ s a -> s{_iId = a});
+
+-- | The status of the invalidation request. When the invalidation batch is
+-- finished, the status is Completed.
+iStatus :: Lens' Invalidation Text
+iStatus = lens _iStatus (\ s a -> s{_iStatus = a});
+
+-- | The date and time the invalidation request was first made.
+iCreateTime :: Lens' Invalidation UTCTime
+iCreateTime = lens _iCreateTime (\ s a -> s{_iCreateTime = a}) . _Time;
+
+-- | The current invalidation information for the batch request.
+iInvalidationBatch :: Lens' Invalidation InvalidationBatch
+iInvalidationBatch = lens _iInvalidationBatch (\ s a -> s{_iInvalidationBatch = a});
+
+instance FromXML Invalidation where
+        parseXML x
+          = Invalidation' <$>
+              (x .@ "Id") <*> (x .@ "Status") <*>
+                (x .@ "CreateTime")
+                <*> (x .@ "InvalidationBatch")
+
+-- | An invalidation batch.
+--
+-- /See:/ 'invalidationBatch' smart constructor.
+data InvalidationBatch = InvalidationBatch'
+    { _ibPaths           :: !Paths
+    , _ibCallerReference :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvalidationBatch' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ibPaths'
+--
+-- * 'ibCallerReference'
+invalidationBatch
+    :: Paths -- ^ 'ibPaths'
+    -> Text -- ^ 'ibCallerReference'
+    -> InvalidationBatch
+invalidationBatch pPaths_ pCallerReference_ =
+    InvalidationBatch'
+    { _ibPaths = pPaths_
+    , _ibCallerReference = pCallerReference_
+    }
+
+-- | The path of the object to invalidate. The path is relative to the
+-- distribution and must begin with a slash (\/). You must enclose each
+-- invalidation object with the Path element tags. If the path includes
+-- non-ASCII characters or unsafe characters as defined in RFC 1783
+-- (http:\/\/www.ietf.org\/rfc\/rfc1738.txt), URL encode those characters.
+-- Do not URL encode any other characters in the path, or CloudFront will
+-- not invalidate the old version of the updated object.
+ibPaths :: Lens' InvalidationBatch Paths
+ibPaths = lens _ibPaths (\ s a -> s{_ibPaths = a});
+
+-- | A unique name that ensures the request can\'t be replayed. If the
+-- CallerReference is new (no matter the content of the Path object), a new
+-- distribution is created. If the CallerReference is a value you already
+-- sent in a previous request to create an invalidation batch, and the
+-- content of each Path element is identical to the original request, the
+-- response includes the same information returned to the original request.
+-- If the CallerReference is a value you already sent in a previous request
+-- to create a distribution but the content of any Path is different from
+-- the original request, CloudFront returns an
+-- InvalidationBatchAlreadyExists error.
+ibCallerReference :: Lens' InvalidationBatch Text
+ibCallerReference = lens _ibCallerReference (\ s a -> s{_ibCallerReference = a});
+
+instance FromXML InvalidationBatch where
+        parseXML x
+          = InvalidationBatch' <$>
+              (x .@ "Paths") <*> (x .@ "CallerReference")
+
+instance ToXML InvalidationBatch where
+        toXML InvalidationBatch'{..}
+          = mconcat
+              ["Paths" @= _ibPaths,
+               "CallerReference" @= _ibCallerReference]
+
+-- | An invalidation list.
+--
+-- /See:/ 'invalidationList' smart constructor.
+data InvalidationList = InvalidationList'
+    { _ilItems       :: !(Maybe [InvalidationSummary])
+    , _ilNextMarker  :: !(Maybe Text)
+    , _ilMarker      :: !Text
+    , _ilMaxItems    :: !Int
+    , _ilIsTruncated :: !Bool
+    , _ilQuantity    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvalidationList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ilItems'
+--
+-- * 'ilNextMarker'
+--
+-- * 'ilMarker'
+--
+-- * 'ilMaxItems'
+--
+-- * 'ilIsTruncated'
+--
+-- * 'ilQuantity'
+invalidationList
+    :: Text -- ^ 'ilMarker'
+    -> Int -- ^ 'ilMaxItems'
+    -> Bool -- ^ 'ilIsTruncated'
+    -> Int -- ^ 'ilQuantity'
+    -> InvalidationList
+invalidationList pMarker_ pMaxItems_ pIsTruncated_ pQuantity_ =
+    InvalidationList'
+    { _ilItems = Nothing
+    , _ilNextMarker = Nothing
+    , _ilMarker = pMarker_
+    , _ilMaxItems = pMaxItems_
+    , _ilIsTruncated = pIsTruncated_
+    , _ilQuantity = pQuantity_
+    }
+
+-- | A complex type that contains one InvalidationSummary element for each
+-- invalidation batch that was created by the current AWS account.
+ilItems :: Lens' InvalidationList [InvalidationSummary]
+ilItems = lens _ilItems (\ s a -> s{_ilItems = a}) . _Default . _Coerce;
+
+-- | If IsTruncated is true, this element is present and contains the value
+-- you can use for the Marker request parameter to continue listing your
+-- invalidation batches where they left off.
+ilNextMarker :: Lens' InvalidationList (Maybe Text)
+ilNextMarker = lens _ilNextMarker (\ s a -> s{_ilNextMarker = a});
+
+-- | The value you provided for the Marker request parameter.
+ilMarker :: Lens' InvalidationList Text
+ilMarker = lens _ilMarker (\ s a -> s{_ilMarker = a});
+
+-- | The value you provided for the MaxItems request parameter.
+ilMaxItems :: Lens' InvalidationList Int
+ilMaxItems = lens _ilMaxItems (\ s a -> s{_ilMaxItems = a});
+
+-- | A flag that indicates whether more invalidation batch requests remain to
+-- be listed. If your results were truncated, you can make a follow-up
+-- pagination request using the Marker request parameter to retrieve more
+-- invalidation batches in the list.
+ilIsTruncated :: Lens' InvalidationList Bool
+ilIsTruncated = lens _ilIsTruncated (\ s a -> s{_ilIsTruncated = a});
+
+-- | The number of invalidation batches that were created by the current AWS
+-- account.
+ilQuantity :: Lens' InvalidationList Int
+ilQuantity = lens _ilQuantity (\ s a -> s{_ilQuantity = a});
+
+instance FromXML InvalidationList where
+        parseXML x
+          = InvalidationList' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "InvalidationSummary"))
+                <*> (x .@? "NextMarker")
+                <*> (x .@ "Marker")
+                <*> (x .@ "MaxItems")
+                <*> (x .@ "IsTruncated")
+                <*> (x .@ "Quantity")
+
+-- | Summary of an invalidation request.
+--
+-- /See:/ 'invalidationSummary' smart constructor.
+data InvalidationSummary = InvalidationSummary'
+    { _isId         :: !Text
+    , _isCreateTime :: !ISO8601
+    , _isStatus     :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InvalidationSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isId'
+--
+-- * 'isCreateTime'
+--
+-- * 'isStatus'
+invalidationSummary
+    :: Text -- ^ 'isId'
+    -> UTCTime -- ^ 'isCreateTime'
+    -> Text -- ^ 'isStatus'
+    -> InvalidationSummary
+invalidationSummary pId_ pCreateTime_ pStatus_ =
+    InvalidationSummary'
+    { _isId = pId_
+    , _isCreateTime = _Time # pCreateTime_
+    , _isStatus = pStatus_
+    }
+
+-- | The unique ID for an invalidation request.
+isId :: Lens' InvalidationSummary Text
+isId = lens _isId (\ s a -> s{_isId = a});
+
+-- | Undocumented member.
+isCreateTime :: Lens' InvalidationSummary UTCTime
+isCreateTime = lens _isCreateTime (\ s a -> s{_isCreateTime = a}) . _Time;
+
+-- | The status of an invalidation request.
+isStatus :: Lens' InvalidationSummary Text
+isStatus = lens _isStatus (\ s a -> s{_isStatus = a});
+
+instance FromXML InvalidationSummary where
+        parseXML x
+          = InvalidationSummary' <$>
+              (x .@ "Id") <*> (x .@ "CreateTime") <*>
+                (x .@ "Status")
+
+-- | A complex type that lists the active CloudFront key pairs, if any, that
+-- are associated with AwsAccountNumber.
+--
+-- /See:/ 'keyPairIds' smart constructor.
+data KeyPairIds = KeyPairIds'
+    { _kpiItems    :: !(Maybe [Text])
+    , _kpiQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'KeyPairIds' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kpiItems'
+--
+-- * 'kpiQuantity'
+keyPairIds
+    :: Int -- ^ 'kpiQuantity'
+    -> KeyPairIds
+keyPairIds pQuantity_ =
+    KeyPairIds'
+    { _kpiItems = Nothing
+    , _kpiQuantity = pQuantity_
+    }
+
+-- | A complex type that lists the active CloudFront key pairs, if any, that
+-- are associated with AwsAccountNumber.
+kpiItems :: Lens' KeyPairIds [Text]
+kpiItems = lens _kpiItems (\ s a -> s{_kpiItems = a}) . _Default . _Coerce;
+
+-- | The number of active CloudFront key pairs for AwsAccountNumber.
+kpiQuantity :: Lens' KeyPairIds Int
+kpiQuantity = lens _kpiQuantity (\ s a -> s{_kpiQuantity = a});
+
+instance FromXML KeyPairIds where
+        parseXML x
+          = KeyPairIds' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "KeyPairId"))
+                <*> (x .@ "Quantity")
+
+-- | A complex type that controls whether access logs are written for the
+-- distribution.
+--
+-- /See:/ 'loggingConfig' smart constructor.
+data LoggingConfig = LoggingConfig'
+    { _lcEnabled        :: !Bool
+    , _lcIncludeCookies :: !Bool
+    , _lcBucket         :: !Text
+    , _lcPrefix         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LoggingConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lcEnabled'
+--
+-- * 'lcIncludeCookies'
+--
+-- * 'lcBucket'
+--
+-- * 'lcPrefix'
+loggingConfig
+    :: Bool -- ^ 'lcEnabled'
+    -> Bool -- ^ 'lcIncludeCookies'
+    -> Text -- ^ 'lcBucket'
+    -> Text -- ^ 'lcPrefix'
+    -> LoggingConfig
+loggingConfig pEnabled_ pIncludeCookies_ pBucket_ pPrefix_ =
+    LoggingConfig'
+    { _lcEnabled = pEnabled_
+    , _lcIncludeCookies = pIncludeCookies_
+    , _lcBucket = pBucket_
+    , _lcPrefix = pPrefix_
+    }
+
+-- | Specifies whether you want CloudFront to save access logs to an Amazon
+-- S3 bucket. If you do not want to enable logging when you create a
+-- distribution or if you want to disable logging for an existing
+-- distribution, specify false for Enabled, and specify empty Bucket and
+-- Prefix elements. If you specify false for Enabled but you specify values
+-- for Bucket, prefix and IncludeCookies, the values are automatically
+-- deleted.
+lcEnabled :: Lens' LoggingConfig Bool
+lcEnabled = lens _lcEnabled (\ s a -> s{_lcEnabled = a});
+
+-- | Specifies whether you want CloudFront to include cookies in access logs,
+-- specify true for IncludeCookies. If you choose to include cookies in
+-- logs, CloudFront logs all cookies regardless of how you configure the
+-- cache behaviors for this distribution. If you do not want to include
+-- cookies when you create a distribution or if you want to disable include
+-- cookies for an existing distribution, specify false for IncludeCookies.
+lcIncludeCookies :: Lens' LoggingConfig Bool
+lcIncludeCookies = lens _lcIncludeCookies (\ s a -> s{_lcIncludeCookies = a});
+
+-- | The Amazon S3 bucket to store the access logs in, for example,
+-- myawslogbucket.s3.amazonaws.com.
+lcBucket :: Lens' LoggingConfig Text
+lcBucket = lens _lcBucket (\ s a -> s{_lcBucket = a});
+
+-- | An optional string that you want CloudFront to prefix to the access log
+-- filenames for this distribution, for example, myprefix\/. If you want to
+-- enable logging, but you do not want to specify a prefix, you still must
+-- include an empty Prefix element in the Logging element.
+lcPrefix :: Lens' LoggingConfig Text
+lcPrefix = lens _lcPrefix (\ s a -> s{_lcPrefix = a});
+
+instance FromXML LoggingConfig where
+        parseXML x
+          = LoggingConfig' <$>
+              (x .@ "Enabled") <*> (x .@ "IncludeCookies") <*>
+                (x .@ "Bucket")
+                <*> (x .@ "Prefix")
+
+instance ToXML LoggingConfig where
+        toXML LoggingConfig'{..}
+          = mconcat
+              ["Enabled" @= _lcEnabled,
+               "IncludeCookies" @= _lcIncludeCookies,
+               "Bucket" @= _lcBucket, "Prefix" @= _lcPrefix]
+
+-- | A complex type that describes the Amazon S3 bucket or the HTTP server
+-- (for example, a web server) from which CloudFront gets your files.You
+-- must create at least one origin.
+--
+-- /See:/ 'origin' smart constructor.
+data Origin = Origin'
+    { _oCustomOriginConfig :: !(Maybe CustomOriginConfig)
+    , _oS3OriginConfig     :: !(Maybe S3OriginConfig)
+    , _oOriginPath         :: !(Maybe Text)
+    , _oId                 :: !Text
+    , _oDomainName         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Origin' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oCustomOriginConfig'
+--
+-- * 'oS3OriginConfig'
+--
+-- * 'oOriginPath'
+--
+-- * 'oId'
+--
+-- * 'oDomainName'
+origin
+    :: Text -- ^ 'oId'
+    -> Text -- ^ 'oDomainName'
+    -> Origin
+origin pId_ pDomainName_ =
+    Origin'
+    { _oCustomOriginConfig = Nothing
+    , _oS3OriginConfig = Nothing
+    , _oOriginPath = Nothing
+    , _oId = pId_
+    , _oDomainName = pDomainName_
+    }
+
+-- | A complex type that contains information about a custom origin. If the
+-- origin is an Amazon S3 bucket, use the S3OriginConfig element instead.
+oCustomOriginConfig :: Lens' Origin (Maybe CustomOriginConfig)
+oCustomOriginConfig = lens _oCustomOriginConfig (\ s a -> s{_oCustomOriginConfig = a});
+
+-- | A complex type that contains information about the Amazon S3 origin. If
+-- the origin is a custom origin, use the CustomOriginConfig element
+-- instead.
+oS3OriginConfig :: Lens' Origin (Maybe S3OriginConfig)
+oS3OriginConfig = lens _oS3OriginConfig (\ s a -> s{_oS3OriginConfig = a});
+
+-- | An optional element that causes CloudFront to request your content from
+-- a directory in your Amazon S3 bucket or your custom origin. When you
+-- include the OriginPath element, specify the directory name, beginning
+-- with a \/. CloudFront appends the directory name to the value of
+-- DomainName.
+oOriginPath :: Lens' Origin (Maybe Text)
+oOriginPath = lens _oOriginPath (\ s a -> s{_oOriginPath = a});
+
+-- | A unique identifier for the origin. The value of Id must be unique
+-- within the distribution. You use the value of Id when you create a cache
+-- behavior. The Id identifies the origin that CloudFront routes a request
+-- to when the request matches the path pattern for that cache behavior.
+oId :: Lens' Origin Text
+oId = lens _oId (\ s a -> s{_oId = a});
+
+-- | Amazon S3 origins: The DNS name of the Amazon S3 bucket from which you
+-- want CloudFront to get objects for this origin, for example,
+-- myawsbucket.s3.amazonaws.com. Custom origins: The DNS domain name for
+-- the HTTP server from which you want CloudFront to get objects for this
+-- origin, for example, www.example.com.
+oDomainName :: Lens' Origin Text
+oDomainName = lens _oDomainName (\ s a -> s{_oDomainName = a});
+
+instance FromXML Origin where
+        parseXML x
+          = Origin' <$>
+              (x .@? "CustomOriginConfig") <*>
+                (x .@? "S3OriginConfig")
+                <*> (x .@? "OriginPath")
+                <*> (x .@ "Id")
+                <*> (x .@ "DomainName")
+
+instance ToXML Origin where
+        toXML Origin'{..}
+          = mconcat
+              ["CustomOriginConfig" @= _oCustomOriginConfig,
+               "S3OriginConfig" @= _oS3OriginConfig,
+               "OriginPath" @= _oOriginPath, "Id" @= _oId,
+               "DomainName" @= _oDomainName]
+
+-- | A complex type that contains information about origins for this
+-- distribution.
+--
+-- /See:/ 'origins' smart constructor.
+data Origins = Origins'
+    { _oItems    :: !(Maybe (List1 Origin))
+    , _oQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Origins' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oItems'
+--
+-- * 'oQuantity'
+origins
+    :: Int -- ^ 'oQuantity'
+    -> Origins
+origins pQuantity_ =
+    Origins'
+    { _oItems = Nothing
+    , _oQuantity = pQuantity_
+    }
+
+-- | A complex type that contains origins for this distribution.
+oItems :: Lens' Origins (Maybe (NonEmpty Origin))
+oItems = lens _oItems (\ s a -> s{_oItems = a}) . mapping _List1;
+
+-- | The number of origins for this distribution.
+oQuantity :: Lens' Origins Int
+oQuantity = lens _oQuantity (\ s a -> s{_oQuantity = a});
+
+instance FromXML Origins where
+        parseXML x
+          = Origins' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList1 "Origin"))
+                <*> (x .@ "Quantity")
+
+instance ToXML Origins where
+        toXML Origins'{..}
+          = mconcat
+              ["Items" @= toXML (toXMLList "Origin" <$> _oItems),
+               "Quantity" @= _oQuantity]
+
+-- | A complex type that contains information about the objects that you want
+-- to invalidate.
+--
+-- /See:/ 'paths' smart constructor.
+data Paths = Paths'
+    { _pItems    :: !(Maybe [Text])
+    , _pQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Paths' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pItems'
+--
+-- * 'pQuantity'
+paths
+    :: Int -- ^ 'pQuantity'
+    -> Paths
+paths pQuantity_ =
+    Paths'
+    { _pItems = Nothing
+    , _pQuantity = pQuantity_
+    }
+
+-- | A complex type that contains a list of the objects that you want to
+-- invalidate.
+pItems :: Lens' Paths [Text]
+pItems = lens _pItems (\ s a -> s{_pItems = a}) . _Default . _Coerce;
+
+-- | The number of objects that you want to invalidate.
+pQuantity :: Lens' Paths Int
+pQuantity = lens _pQuantity (\ s a -> s{_pQuantity = a});
+
+instance FromXML Paths where
+        parseXML x
+          = Paths' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "Path"))
+                <*> (x .@ "Quantity")
+
+instance ToXML Paths where
+        toXML Paths'{..}
+          = mconcat
+              ["Items" @= toXML (toXMLList "Path" <$> _pItems),
+               "Quantity" @= _pQuantity]
+
+-- | A complex type that identifies ways in which you want to restrict
+-- distribution of your content.
+--
+-- /See:/ 'restrictions' smart constructor.
+newtype Restrictions = Restrictions'
+    { _rGeoRestriction :: GeoRestriction
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Restrictions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rGeoRestriction'
+restrictions
+    :: GeoRestriction -- ^ 'rGeoRestriction'
+    -> Restrictions
+restrictions pGeoRestriction_ =
+    Restrictions'
+    { _rGeoRestriction = pGeoRestriction_
+    }
+
+-- | Undocumented member.
+rGeoRestriction :: Lens' Restrictions GeoRestriction
+rGeoRestriction = lens _rGeoRestriction (\ s a -> s{_rGeoRestriction = a});
+
+instance FromXML Restrictions where
+        parseXML x
+          = Restrictions' <$> (x .@ "GeoRestriction")
+
+instance ToXML Restrictions where
+        toXML Restrictions'{..}
+          = mconcat ["GeoRestriction" @= _rGeoRestriction]
+
+-- | A complex type that contains information about the Amazon S3 bucket from
+-- which you want CloudFront to get your media files for distribution.
+--
+-- /See:/ 's3Origin' smart constructor.
+data S3Origin = S3Origin'
+    { _soDomainName           :: !Text
+    , _soOriginAccessIdentity :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'S3Origin' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'soDomainName'
+--
+-- * 'soOriginAccessIdentity'
+s3Origin
+    :: Text -- ^ 'soDomainName'
+    -> Text -- ^ 'soOriginAccessIdentity'
+    -> S3Origin
+s3Origin pDomainName_ pOriginAccessIdentity_ =
+    S3Origin'
+    { _soDomainName = pDomainName_
+    , _soOriginAccessIdentity = pOriginAccessIdentity_
+    }
+
+-- | The DNS name of the S3 origin.
+soDomainName :: Lens' S3Origin Text
+soDomainName = lens _soDomainName (\ s a -> s{_soDomainName = a});
+
+-- | Your S3 origin\'s origin access identity.
+soOriginAccessIdentity :: Lens' S3Origin Text
+soOriginAccessIdentity = lens _soOriginAccessIdentity (\ s a -> s{_soOriginAccessIdentity = a});
+
+instance FromXML S3Origin where
+        parseXML x
+          = S3Origin' <$>
+              (x .@ "DomainName") <*> (x .@ "OriginAccessIdentity")
+
+instance ToXML S3Origin where
+        toXML S3Origin'{..}
+          = mconcat
+              ["DomainName" @= _soDomainName,
+               "OriginAccessIdentity" @= _soOriginAccessIdentity]
+
+-- | A complex type that contains information about the Amazon S3 origin. If
+-- the origin is a custom origin, use the CustomOriginConfig element
+-- instead.
+--
+-- /See:/ 's3OriginConfig' smart constructor.
+newtype S3OriginConfig = S3OriginConfig'
+    { _socOriginAccessIdentity :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'S3OriginConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'socOriginAccessIdentity'
+s3OriginConfig
+    :: Text -- ^ 'socOriginAccessIdentity'
+    -> S3OriginConfig
+s3OriginConfig pOriginAccessIdentity_ =
+    S3OriginConfig'
+    { _socOriginAccessIdentity = pOriginAccessIdentity_
+    }
+
+-- | The CloudFront origin access identity to associate with the origin. Use
+-- an origin access identity to configure the origin so that end users can
+-- only access objects in an Amazon S3 bucket through CloudFront. If you
+-- want end users to be able to access objects using either the CloudFront
+-- URL or the Amazon S3 URL, specify an empty OriginAccessIdentity element.
+-- To delete the origin access identity from an existing distribution,
+-- update the distribution configuration and include an empty
+-- OriginAccessIdentity element. To replace the origin access identity,
+-- update the distribution configuration and specify the new origin access
+-- identity. Use the format origin-access-identity\/cloudfront\/Id where Id
+-- is the value that CloudFront returned in the Id element when you created
+-- the origin access identity.
+socOriginAccessIdentity :: Lens' S3OriginConfig Text
+socOriginAccessIdentity = lens _socOriginAccessIdentity (\ s a -> s{_socOriginAccessIdentity = a});
+
+instance FromXML S3OriginConfig where
+        parseXML x
+          = S3OriginConfig' <$> (x .@ "OriginAccessIdentity")
+
+instance ToXML S3OriginConfig where
+        toXML S3OriginConfig'{..}
+          = mconcat
+              ["OriginAccessIdentity" @= _socOriginAccessIdentity]
+
+-- | A complex type that lists the AWS accounts that were included in the
+-- TrustedSigners complex type, as well as their active CloudFront key pair
+-- IDs, if any.
+--
+-- /See:/ 'signer' smart constructor.
+data Signer = Signer'
+    { _sAWSAccountNumber :: !(Maybe Text)
+    , _sKeyPairIds       :: !(Maybe KeyPairIds)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Signer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sAWSAccountNumber'
+--
+-- * 'sKeyPairIds'
+signer
+    :: Signer
+signer =
+    Signer'
+    { _sAWSAccountNumber = Nothing
+    , _sKeyPairIds = Nothing
+    }
+
+-- | Specifies an AWS account that can create signed URLs. Values: self,
+-- which indicates that the AWS account that was used to create the
+-- distribution can created signed URLs, or an AWS account number. Omit the
+-- dashes in the account number.
+sAWSAccountNumber :: Lens' Signer (Maybe Text)
+sAWSAccountNumber = lens _sAWSAccountNumber (\ s a -> s{_sAWSAccountNumber = a});
+
+-- | A complex type that lists the active CloudFront key pairs, if any, that
+-- are associated with AwsAccountNumber.
+sKeyPairIds :: Lens' Signer (Maybe KeyPairIds)
+sKeyPairIds = lens _sKeyPairIds (\ s a -> s{_sKeyPairIds = a});
+
+instance FromXML Signer where
+        parseXML x
+          = Signer' <$>
+              (x .@? "AwsAccountNumber") <*> (x .@? "KeyPairIds")
+
+-- | A streaming distribution.
+--
+-- /See:/ 'streamingDistribution' smart constructor.
+data StreamingDistribution = StreamingDistribution'
+    { _sdLastModifiedTime            :: !(Maybe ISO8601)
+    , _sdId                          :: !Text
+    , _sdStatus                      :: !Text
+    , _sdDomainName                  :: !Text
+    , _sdActiveTrustedSigners        :: !ActiveTrustedSigners
+    , _sdStreamingDistributionConfig :: !StreamingDistributionConfig
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StreamingDistribution' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdLastModifiedTime'
+--
+-- * 'sdId'
+--
+-- * 'sdStatus'
+--
+-- * 'sdDomainName'
+--
+-- * 'sdActiveTrustedSigners'
+--
+-- * 'sdStreamingDistributionConfig'
+streamingDistribution
+    :: Text -- ^ 'sdId'
+    -> Text -- ^ 'sdStatus'
+    -> Text -- ^ 'sdDomainName'
+    -> ActiveTrustedSigners -- ^ 'sdActiveTrustedSigners'
+    -> StreamingDistributionConfig -- ^ 'sdStreamingDistributionConfig'
+    -> StreamingDistribution
+streamingDistribution pId_ pStatus_ pDomainName_ pActiveTrustedSigners_ pStreamingDistributionConfig_ =
+    StreamingDistribution'
+    { _sdLastModifiedTime = Nothing
+    , _sdId = pId_
+    , _sdStatus = pStatus_
+    , _sdDomainName = pDomainName_
+    , _sdActiveTrustedSigners = pActiveTrustedSigners_
+    , _sdStreamingDistributionConfig = pStreamingDistributionConfig_
+    }
+
+-- | The date and time the distribution was last modified.
+sdLastModifiedTime :: Lens' StreamingDistribution (Maybe UTCTime)
+sdLastModifiedTime = lens _sdLastModifiedTime (\ s a -> s{_sdLastModifiedTime = a}) . mapping _Time;
+
+-- | The identifier for the streaming distribution. For example:
+-- EGTXBD79H29TRA8.
+sdId :: Lens' StreamingDistribution Text
+sdId = lens _sdId (\ s a -> s{_sdId = a});
+
+-- | The current status of the streaming distribution. When the status is
+-- Deployed, the distribution\'s information is fully propagated throughout
+-- the Amazon CloudFront system.
+sdStatus :: Lens' StreamingDistribution Text
+sdStatus = lens _sdStatus (\ s a -> s{_sdStatus = a});
+
+-- | The domain name corresponding to the streaming distribution. For
+-- example: s5c39gqb8ow64r.cloudfront.net.
+sdDomainName :: Lens' StreamingDistribution Text
+sdDomainName = lens _sdDomainName (\ s a -> s{_sdDomainName = a});
+
+-- | CloudFront automatically adds this element to the response only if
+-- you\'ve set up the distribution to serve private content with signed
+-- URLs. The element lists the key pair IDs that CloudFront is aware of for
+-- each trusted signer. The Signer child element lists the AWS account
+-- number of the trusted signer (or an empty Self element if the signer is
+-- you). The Signer element also includes the IDs of any active key pairs
+-- associated with the trusted signer\'s AWS account. If no KeyPairId
+-- element appears for a Signer, that signer can\'t create working signed
+-- URLs.
+sdActiveTrustedSigners :: Lens' StreamingDistribution ActiveTrustedSigners
+sdActiveTrustedSigners = lens _sdActiveTrustedSigners (\ s a -> s{_sdActiveTrustedSigners = a});
+
+-- | The current configuration information for the streaming distribution.
+sdStreamingDistributionConfig :: Lens' StreamingDistribution StreamingDistributionConfig
+sdStreamingDistributionConfig = lens _sdStreamingDistributionConfig (\ s a -> s{_sdStreamingDistributionConfig = a});
+
+instance FromXML StreamingDistribution where
+        parseXML x
+          = StreamingDistribution' <$>
+              (x .@? "LastModifiedTime") <*> (x .@ "Id") <*>
+                (x .@ "Status")
+                <*> (x .@ "DomainName")
+                <*> (x .@ "ActiveTrustedSigners")
+                <*> (x .@ "StreamingDistributionConfig")
+
+-- | The configuration for the streaming distribution.
+--
+-- /See:/ 'streamingDistributionConfig' smart constructor.
+data StreamingDistributionConfig = StreamingDistributionConfig'
+    { _sdcAliases         :: !(Maybe Aliases)
+    , _sdcPriceClass      :: !(Maybe PriceClass)
+    , _sdcLogging         :: !(Maybe StreamingLoggingConfig)
+    , _sdcCallerReference :: !Text
+    , _sdcS3Origin        :: !S3Origin
+    , _sdcComment         :: !Text
+    , _sdcTrustedSigners  :: !TrustedSigners
+    , _sdcEnabled         :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StreamingDistributionConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdcAliases'
+--
+-- * 'sdcPriceClass'
+--
+-- * 'sdcLogging'
+--
+-- * 'sdcCallerReference'
+--
+-- * 'sdcS3Origin'
+--
+-- * 'sdcComment'
+--
+-- * 'sdcTrustedSigners'
+--
+-- * 'sdcEnabled'
+streamingDistributionConfig
+    :: Text -- ^ 'sdcCallerReference'
+    -> S3Origin -- ^ 'sdcS3Origin'
+    -> Text -- ^ 'sdcComment'
+    -> TrustedSigners -- ^ 'sdcTrustedSigners'
+    -> Bool -- ^ 'sdcEnabled'
+    -> StreamingDistributionConfig
+streamingDistributionConfig pCallerReference_ pS3Origin_ pComment_ pTrustedSigners_ pEnabled_ =
+    StreamingDistributionConfig'
+    { _sdcAliases = Nothing
+    , _sdcPriceClass = Nothing
+    , _sdcLogging = Nothing
+    , _sdcCallerReference = pCallerReference_
+    , _sdcS3Origin = pS3Origin_
+    , _sdcComment = pComment_
+    , _sdcTrustedSigners = pTrustedSigners_
+    , _sdcEnabled = pEnabled_
+    }
+
+-- | A complex type that contains information about CNAMEs (alternate domain
+-- names), if any, for this streaming distribution.
+sdcAliases :: Lens' StreamingDistributionConfig (Maybe Aliases)
+sdcAliases = lens _sdcAliases (\ s a -> s{_sdcAliases = a});
+
+-- | A complex type that contains information about price class for this
+-- streaming distribution.
+sdcPriceClass :: Lens' StreamingDistributionConfig (Maybe PriceClass)
+sdcPriceClass = lens _sdcPriceClass (\ s a -> s{_sdcPriceClass = a});
+
+-- | A complex type that controls whether access logs are written for the
+-- streaming distribution.
+sdcLogging :: Lens' StreamingDistributionConfig (Maybe StreamingLoggingConfig)
+sdcLogging = lens _sdcLogging (\ s a -> s{_sdcLogging = a});
+
+-- | A unique number that ensures the request can\'t be replayed. If the
+-- CallerReference is new (no matter the content of the
+-- StreamingDistributionConfig object), a new streaming distribution is
+-- created. If the CallerReference is a value you already sent in a
+-- previous request to create a streaming distribution, and the content of
+-- the StreamingDistributionConfig is identical to the original request
+-- (ignoring white space), the response includes the same information
+-- returned to the original request. If the CallerReference is a value you
+-- already sent in a previous request to create a streaming distribution
+-- but the content of the StreamingDistributionConfig is different from the
+-- original request, CloudFront returns a DistributionAlreadyExists error.
+sdcCallerReference :: Lens' StreamingDistributionConfig Text
+sdcCallerReference = lens _sdcCallerReference (\ s a -> s{_sdcCallerReference = a});
+
+-- | A complex type that contains information about the Amazon S3 bucket from
+-- which you want CloudFront to get your media files for distribution.
+sdcS3Origin :: Lens' StreamingDistributionConfig S3Origin
+sdcS3Origin = lens _sdcS3Origin (\ s a -> s{_sdcS3Origin = a});
+
+-- | Any comments you want to include about the streaming distribution.
+sdcComment :: Lens' StreamingDistributionConfig Text
+sdcComment = lens _sdcComment (\ s a -> s{_sdcComment = a});
+
+-- | A complex type that specifies the AWS accounts, if any, that you want to
+-- allow to create signed URLs for private content. If you want to require
+-- signed URLs in requests for objects in the target origin that match the
+-- PathPattern for this cache behavior, specify true for Enabled, and
+-- specify the applicable values for Quantity and Items. For more
+-- information, go to Using a Signed URL to Serve Private Content in the
+-- Amazon CloudFront Developer Guide. If you don\'t want to require signed
+-- URLs in requests for objects that match PathPattern, specify false for
+-- Enabled and 0 for Quantity. Omit Items. To add, change, or remove one or
+-- more trusted signers, change Enabled to true (if it\'s currently false),
+-- change Quantity as applicable, and specify all of the trusted signers
+-- that you want to include in the updated distribution.
+sdcTrustedSigners :: Lens' StreamingDistributionConfig TrustedSigners
+sdcTrustedSigners = lens _sdcTrustedSigners (\ s a -> s{_sdcTrustedSigners = a});
+
+-- | Whether the streaming distribution is enabled to accept end user
+-- requests for content.
+sdcEnabled :: Lens' StreamingDistributionConfig Bool
+sdcEnabled = lens _sdcEnabled (\ s a -> s{_sdcEnabled = a});
+
+instance FromXML StreamingDistributionConfig where
+        parseXML x
+          = StreamingDistributionConfig' <$>
+              (x .@? "Aliases") <*> (x .@? "PriceClass") <*>
+                (x .@? "Logging")
+                <*> (x .@ "CallerReference")
+                <*> (x .@ "S3Origin")
+                <*> (x .@ "Comment")
+                <*> (x .@ "TrustedSigners")
+                <*> (x .@ "Enabled")
+
+instance ToXML StreamingDistributionConfig where
+        toXML StreamingDistributionConfig'{..}
+          = mconcat
+              ["Aliases" @= _sdcAliases,
+               "PriceClass" @= _sdcPriceClass,
+               "Logging" @= _sdcLogging,
+               "CallerReference" @= _sdcCallerReference,
+               "S3Origin" @= _sdcS3Origin, "Comment" @= _sdcComment,
+               "TrustedSigners" @= _sdcTrustedSigners,
+               "Enabled" @= _sdcEnabled]
+
+-- | A streaming distribution list.
+--
+-- /See:/ 'streamingDistributionList' smart constructor.
+data StreamingDistributionList = StreamingDistributionList'
+    { _sdlItems       :: !(Maybe [StreamingDistributionSummary])
+    , _sdlNextMarker  :: !(Maybe Text)
+    , _sdlMarker      :: !Text
+    , _sdlMaxItems    :: !Int
+    , _sdlIsTruncated :: !Bool
+    , _sdlQuantity    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StreamingDistributionList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdlItems'
+--
+-- * 'sdlNextMarker'
+--
+-- * 'sdlMarker'
+--
+-- * 'sdlMaxItems'
+--
+-- * 'sdlIsTruncated'
+--
+-- * 'sdlQuantity'
+streamingDistributionList
+    :: Text -- ^ 'sdlMarker'
+    -> Int -- ^ 'sdlMaxItems'
+    -> Bool -- ^ 'sdlIsTruncated'
+    -> Int -- ^ 'sdlQuantity'
+    -> StreamingDistributionList
+streamingDistributionList pMarker_ pMaxItems_ pIsTruncated_ pQuantity_ =
+    StreamingDistributionList'
+    { _sdlItems = Nothing
+    , _sdlNextMarker = Nothing
+    , _sdlMarker = pMarker_
+    , _sdlMaxItems = pMaxItems_
+    , _sdlIsTruncated = pIsTruncated_
+    , _sdlQuantity = pQuantity_
+    }
+
+-- | A complex type that contains one StreamingDistributionSummary element
+-- for each distribution that was created by the current AWS account.
+sdlItems :: Lens' StreamingDistributionList [StreamingDistributionSummary]
+sdlItems = lens _sdlItems (\ s a -> s{_sdlItems = a}) . _Default . _Coerce;
+
+-- | If IsTruncated is true, this element is present and contains the value
+-- you can use for the Marker request parameter to continue listing your
+-- streaming distributions where they left off.
+sdlNextMarker :: Lens' StreamingDistributionList (Maybe Text)
+sdlNextMarker = lens _sdlNextMarker (\ s a -> s{_sdlNextMarker = a});
+
+-- | The value you provided for the Marker request parameter.
+sdlMarker :: Lens' StreamingDistributionList Text
+sdlMarker = lens _sdlMarker (\ s a -> s{_sdlMarker = a});
+
+-- | The value you provided for the MaxItems request parameter.
+sdlMaxItems :: Lens' StreamingDistributionList Int
+sdlMaxItems = lens _sdlMaxItems (\ s a -> s{_sdlMaxItems = a});
+
+-- | A flag that indicates whether more streaming distributions remain to be
+-- listed. If your results were truncated, you can make a follow-up
+-- pagination request using the Marker request parameter to retrieve more
+-- distributions in the list.
+sdlIsTruncated :: Lens' StreamingDistributionList Bool
+sdlIsTruncated = lens _sdlIsTruncated (\ s a -> s{_sdlIsTruncated = a});
+
+-- | The number of streaming distributions that were created by the current
+-- AWS account.
+sdlQuantity :: Lens' StreamingDistributionList Int
+sdlQuantity = lens _sdlQuantity (\ s a -> s{_sdlQuantity = a});
+
+instance FromXML StreamingDistributionList where
+        parseXML x
+          = StreamingDistributionList' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "StreamingDistributionSummary"))
+                <*> (x .@? "NextMarker")
+                <*> (x .@ "Marker")
+                <*> (x .@ "MaxItems")
+                <*> (x .@ "IsTruncated")
+                <*> (x .@ "Quantity")
+
+-- | A summary of the information for an Amazon CloudFront streaming
+-- distribution.
+--
+-- /See:/ 'streamingDistributionSummary' smart constructor.
+data StreamingDistributionSummary = StreamingDistributionSummary'
+    { _sdsId               :: !Text
+    , _sdsStatus           :: !Text
+    , _sdsLastModifiedTime :: !ISO8601
+    , _sdsDomainName       :: !Text
+    , _sdsS3Origin         :: !S3Origin
+    , _sdsAliases          :: !Aliases
+    , _sdsTrustedSigners   :: !TrustedSigners
+    , _sdsComment          :: !Text
+    , _sdsPriceClass       :: !PriceClass
+    , _sdsEnabled          :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StreamingDistributionSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdsId'
+--
+-- * 'sdsStatus'
+--
+-- * 'sdsLastModifiedTime'
+--
+-- * 'sdsDomainName'
+--
+-- * 'sdsS3Origin'
+--
+-- * 'sdsAliases'
+--
+-- * 'sdsTrustedSigners'
+--
+-- * 'sdsComment'
+--
+-- * 'sdsPriceClass'
+--
+-- * 'sdsEnabled'
+streamingDistributionSummary
+    :: Text -- ^ 'sdsId'
+    -> Text -- ^ 'sdsStatus'
+    -> UTCTime -- ^ 'sdsLastModifiedTime'
+    -> Text -- ^ 'sdsDomainName'
+    -> S3Origin -- ^ 'sdsS3Origin'
+    -> Aliases -- ^ 'sdsAliases'
+    -> TrustedSigners -- ^ 'sdsTrustedSigners'
+    -> Text -- ^ 'sdsComment'
+    -> PriceClass -- ^ 'sdsPriceClass'
+    -> Bool -- ^ 'sdsEnabled'
+    -> StreamingDistributionSummary
+streamingDistributionSummary pId_ pStatus_ pLastModifiedTime_ pDomainName_ pS3Origin_ pAliases_ pTrustedSigners_ pComment_ pPriceClass_ pEnabled_ =
+    StreamingDistributionSummary'
+    { _sdsId = pId_
+    , _sdsStatus = pStatus_
+    , _sdsLastModifiedTime = _Time # pLastModifiedTime_
+    , _sdsDomainName = pDomainName_
+    , _sdsS3Origin = pS3Origin_
+    , _sdsAliases = pAliases_
+    , _sdsTrustedSigners = pTrustedSigners_
+    , _sdsComment = pComment_
+    , _sdsPriceClass = pPriceClass_
+    , _sdsEnabled = pEnabled_
+    }
+
+-- | The identifier for the distribution. For example: EDFDVBD632BHDS5.
+sdsId :: Lens' StreamingDistributionSummary Text
+sdsId = lens _sdsId (\ s a -> s{_sdsId = a});
+
+-- | Indicates the current status of the distribution. When the status is
+-- Deployed, the distribution\'s information is fully propagated throughout
+-- the Amazon CloudFront system.
+sdsStatus :: Lens' StreamingDistributionSummary Text
+sdsStatus = lens _sdsStatus (\ s a -> s{_sdsStatus = a});
+
+-- | The date and time the distribution was last modified.
+sdsLastModifiedTime :: Lens' StreamingDistributionSummary UTCTime
+sdsLastModifiedTime = lens _sdsLastModifiedTime (\ s a -> s{_sdsLastModifiedTime = a}) . _Time;
+
+-- | The domain name corresponding to the distribution. For example:
+-- d604721fxaaqy9.cloudfront.net.
+sdsDomainName :: Lens' StreamingDistributionSummary Text
+sdsDomainName = lens _sdsDomainName (\ s a -> s{_sdsDomainName = a});
+
+-- | A complex type that contains information about the Amazon S3 bucket from
+-- which you want CloudFront to get your media files for distribution.
+sdsS3Origin :: Lens' StreamingDistributionSummary S3Origin
+sdsS3Origin = lens _sdsS3Origin (\ s a -> s{_sdsS3Origin = a});
+
+-- | A complex type that contains information about CNAMEs (alternate domain
+-- names), if any, for this streaming distribution.
+sdsAliases :: Lens' StreamingDistributionSummary Aliases
+sdsAliases = lens _sdsAliases (\ s a -> s{_sdsAliases = a});
+
+-- | A complex type that specifies the AWS accounts, if any, that you want to
+-- allow to create signed URLs for private content. If you want to require
+-- signed URLs in requests for objects in the target origin that match the
+-- PathPattern for this cache behavior, specify true for Enabled, and
+-- specify the applicable values for Quantity and Items. For more
+-- information, go to Using a Signed URL to Serve Private Content in the
+-- Amazon CloudFront Developer Guide. If you don\'t want to require signed
+-- URLs in requests for objects that match PathPattern, specify false for
+-- Enabled and 0 for Quantity. Omit Items. To add, change, or remove one or
+-- more trusted signers, change Enabled to true (if it\'s currently false),
+-- change Quantity as applicable, and specify all of the trusted signers
+-- that you want to include in the updated distribution.
+sdsTrustedSigners :: Lens' StreamingDistributionSummary TrustedSigners
+sdsTrustedSigners = lens _sdsTrustedSigners (\ s a -> s{_sdsTrustedSigners = a});
+
+-- | The comment originally specified when this distribution was created.
+sdsComment :: Lens' StreamingDistributionSummary Text
+sdsComment = lens _sdsComment (\ s a -> s{_sdsComment = a});
+
+-- | Undocumented member.
+sdsPriceClass :: Lens' StreamingDistributionSummary PriceClass
+sdsPriceClass = lens _sdsPriceClass (\ s a -> s{_sdsPriceClass = a});
+
+-- | Whether the distribution is enabled to accept end user requests for
+-- content.
+sdsEnabled :: Lens' StreamingDistributionSummary Bool
+sdsEnabled = lens _sdsEnabled (\ s a -> s{_sdsEnabled = a});
+
+instance FromXML StreamingDistributionSummary where
+        parseXML x
+          = StreamingDistributionSummary' <$>
+              (x .@ "Id") <*> (x .@ "Status") <*>
+                (x .@ "LastModifiedTime")
+                <*> (x .@ "DomainName")
+                <*> (x .@ "S3Origin")
+                <*> (x .@ "Aliases")
+                <*> (x .@ "TrustedSigners")
+                <*> (x .@ "Comment")
+                <*> (x .@ "PriceClass")
+                <*> (x .@ "Enabled")
+
+-- | A complex type that controls whether access logs are written for this
+-- streaming distribution.
+--
+-- /See:/ 'streamingLoggingConfig' smart constructor.
+data StreamingLoggingConfig = StreamingLoggingConfig'
+    { _slcEnabled :: !Bool
+    , _slcBucket  :: !Text
+    , _slcPrefix  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StreamingLoggingConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slcEnabled'
+--
+-- * 'slcBucket'
+--
+-- * 'slcPrefix'
+streamingLoggingConfig
+    :: Bool -- ^ 'slcEnabled'
+    -> Text -- ^ 'slcBucket'
+    -> Text -- ^ 'slcPrefix'
+    -> StreamingLoggingConfig
+streamingLoggingConfig pEnabled_ pBucket_ pPrefix_ =
+    StreamingLoggingConfig'
+    { _slcEnabled = pEnabled_
+    , _slcBucket = pBucket_
+    , _slcPrefix = pPrefix_
+    }
+
+-- | Specifies whether you want CloudFront to save access logs to an Amazon
+-- S3 bucket. If you do not want to enable logging when you create a
+-- streaming distribution or if you want to disable logging for an existing
+-- streaming distribution, specify false for Enabled, and specify empty
+-- Bucket and Prefix elements. If you specify false for Enabled but you
+-- specify values for Bucket and Prefix, the values are automatically
+-- deleted.
+slcEnabled :: Lens' StreamingLoggingConfig Bool
+slcEnabled = lens _slcEnabled (\ s a -> s{_slcEnabled = a});
+
+-- | The Amazon S3 bucket to store the access logs in, for example,
+-- myawslogbucket.s3.amazonaws.com.
+slcBucket :: Lens' StreamingLoggingConfig Text
+slcBucket = lens _slcBucket (\ s a -> s{_slcBucket = a});
+
+-- | An optional string that you want CloudFront to prefix to the access log
+-- filenames for this streaming distribution, for example, myprefix\/. If
+-- you want to enable logging, but you do not want to specify a prefix, you
+-- still must include an empty Prefix element in the Logging element.
+slcPrefix :: Lens' StreamingLoggingConfig Text
+slcPrefix = lens _slcPrefix (\ s a -> s{_slcPrefix = a});
+
+instance FromXML StreamingLoggingConfig where
+        parseXML x
+          = StreamingLoggingConfig' <$>
+              (x .@ "Enabled") <*> (x .@ "Bucket") <*>
+                (x .@ "Prefix")
+
+instance ToXML StreamingLoggingConfig where
+        toXML StreamingLoggingConfig'{..}
+          = mconcat
+              ["Enabled" @= _slcEnabled, "Bucket" @= _slcBucket,
+               "Prefix" @= _slcPrefix]
+
+-- | A complex type that specifies the AWS accounts, if any, that you want to
+-- allow to create signed URLs for private content. If you want to require
+-- signed URLs in requests for objects in the target origin that match the
+-- PathPattern for this cache behavior, specify true for Enabled, and
+-- specify the applicable values for Quantity and Items. For more
+-- information, go to Using a Signed URL to Serve Private Content in the
+-- Amazon CloudFront Developer Guide. If you don\'t want to require signed
+-- URLs in requests for objects that match PathPattern, specify false for
+-- Enabled and 0 for Quantity. Omit Items. To add, change, or remove one or
+-- more trusted signers, change Enabled to true (if it\'s currently false),
+-- change Quantity as applicable, and specify all of the trusted signers
+-- that you want to include in the updated distribution.
+--
+-- /See:/ 'trustedSigners' smart constructor.
+data TrustedSigners = TrustedSigners'
+    { _tsItems    :: !(Maybe [Text])
+    , _tsEnabled  :: !Bool
+    , _tsQuantity :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TrustedSigners' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tsItems'
+--
+-- * 'tsEnabled'
+--
+-- * 'tsQuantity'
+trustedSigners
+    :: Bool -- ^ 'tsEnabled'
+    -> Int -- ^ 'tsQuantity'
+    -> TrustedSigners
+trustedSigners pEnabled_ pQuantity_ =
+    TrustedSigners'
+    { _tsItems = Nothing
+    , _tsEnabled = pEnabled_
+    , _tsQuantity = pQuantity_
+    }
+
+-- | Optional: A complex type that contains trusted signers for this cache
+-- behavior. If Quantity is 0, you can omit Items.
+tsItems :: Lens' TrustedSigners [Text]
+tsItems = lens _tsItems (\ s a -> s{_tsItems = a}) . _Default . _Coerce;
+
+-- | Specifies whether you want to require end users to use signed URLs to
+-- access the files specified by PathPattern and TargetOriginId.
+tsEnabled :: Lens' TrustedSigners Bool
+tsEnabled = lens _tsEnabled (\ s a -> s{_tsEnabled = a});
+
+-- | The number of trusted signers for this cache behavior.
+tsQuantity :: Lens' TrustedSigners Int
+tsQuantity = lens _tsQuantity (\ s a -> s{_tsQuantity = a});
+
+instance FromXML TrustedSigners where
+        parseXML x
+          = TrustedSigners' <$>
+              (x .@? "Items" .!@ mempty >>=
+                 may (parseXMLList "AwsAccountNumber"))
+                <*> (x .@ "Enabled")
+                <*> (x .@ "Quantity")
+
+instance ToXML TrustedSigners where
+        toXML TrustedSigners'{..}
+          = mconcat
+              ["Items" @=
+                 toXML (toXMLList "AwsAccountNumber" <$> _tsItems),
+               "Enabled" @= _tsEnabled, "Quantity" @= _tsQuantity]
+
+-- | A complex type that contains information about viewer certificates for
+-- this distribution.
+--
+-- /See:/ 'viewerCertificate' smart constructor.
+data ViewerCertificate = ViewerCertificate'
+    { _vcSSLSupportMethod             :: !(Maybe SSLSupportMethod)
+    , _vcMinimumProtocolVersion       :: !(Maybe MinimumProtocolVersion)
+    , _vcIAMCertificateId             :: !(Maybe Text)
+    , _vcCloudFrontDefaultCertificate :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ViewerCertificate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcSSLSupportMethod'
+--
+-- * 'vcMinimumProtocolVersion'
+--
+-- * 'vcIAMCertificateId'
+--
+-- * 'vcCloudFrontDefaultCertificate'
+viewerCertificate
+    :: ViewerCertificate
+viewerCertificate =
+    ViewerCertificate'
+    { _vcSSLSupportMethod = Nothing
+    , _vcMinimumProtocolVersion = Nothing
+    , _vcIAMCertificateId = Nothing
+    , _vcCloudFrontDefaultCertificate = Nothing
+    }
+
+-- | If you specify a value for IAMCertificateId, you must also specify how
+-- you want CloudFront to serve HTTPS requests. Valid values are vip and
+-- sni-only. If you specify vip, CloudFront uses dedicated IP addresses for
+-- your content and can respond to HTTPS requests from any viewer. However,
+-- you must request permission to use this feature, and you incur
+-- additional monthly charges. If you specify sni-only, CloudFront can only
+-- respond to HTTPS requests from viewers that support Server Name
+-- Indication (SNI). All modern browsers support SNI, but some browsers
+-- still in use don\'t support SNI. Do not specify a value for
+-- SSLSupportMethod if you specified true for CloudFrontDefaultCertificate.
+vcSSLSupportMethod :: Lens' ViewerCertificate (Maybe SSLSupportMethod)
+vcSSLSupportMethod = lens _vcSSLSupportMethod (\ s a -> s{_vcSSLSupportMethod = a});
+
+-- | Specify the minimum version of the SSL protocol that you want CloudFront
+-- to use, SSLv3 or TLSv1, for HTTPS connections. CloudFront will serve
+-- your objects only to browsers or devices that support at least the SSL
+-- version that you specify. The TLSv1 protocol is more secure, so we
+-- recommend that you specify SSLv3 only if your users are using browsers
+-- or devices that don\'t support TLSv1. If you\'re using a custom
+-- certificate (if you specify a value for IAMCertificateId) and if you\'re
+-- using dedicated IP (if you specify vip for SSLSupportMethod), you can
+-- choose SSLv3 or TLSv1 as the MinimumProtocolVersion. If you\'re using a
+-- custom certificate (if you specify a value for IAMCertificateId) and if
+-- you\'re using SNI (if you specify sni-only for SSLSupportMethod), you
+-- must specify TLSv1 for MinimumProtocolVersion.
+vcMinimumProtocolVersion :: Lens' ViewerCertificate (Maybe MinimumProtocolVersion)
+vcMinimumProtocolVersion = lens _vcMinimumProtocolVersion (\ s a -> s{_vcMinimumProtocolVersion = a});
+
+-- | If you want viewers to use HTTPS to request your objects and you\'re
+-- using an alternate domain name in your object URLs (for example,
+-- https:\/\/example.com\/logo.jpg), specify the IAM certificate identifier
+-- of the custom viewer certificate for this distribution. Specify either
+-- this value or CloudFrontDefaultCertificate.
+vcIAMCertificateId :: Lens' ViewerCertificate (Maybe Text)
+vcIAMCertificateId = lens _vcIAMCertificateId (\ s a -> s{_vcIAMCertificateId = a});
+
+-- | If you want viewers to use HTTPS to request your objects and you\'re
+-- using the CloudFront domain name of your distribution in your object
+-- URLs (for example, https:\/\/d111111abcdef8.cloudfront.net\/logo.jpg),
+-- set to true. Omit this value if you are setting an IAMCertificateId.
+vcCloudFrontDefaultCertificate :: Lens' ViewerCertificate (Maybe Bool)
+vcCloudFrontDefaultCertificate = lens _vcCloudFrontDefaultCertificate (\ s a -> s{_vcCloudFrontDefaultCertificate = a});
+
+instance FromXML ViewerCertificate where
+        parseXML x
+          = ViewerCertificate' <$>
+              (x .@? "SSLSupportMethod") <*>
+                (x .@? "MinimumProtocolVersion")
+                <*> (x .@? "IAMCertificateId")
+                <*> (x .@? "CloudFrontDefaultCertificate")
+
+instance ToXML ViewerCertificate where
+        toXML ViewerCertificate'{..}
+          = mconcat
+              ["SSLSupportMethod" @= _vcSSLSupportMethod,
+               "MinimumProtocolVersion" @=
+                 _vcMinimumProtocolVersion,
+               "IAMCertificateId" @= _vcIAMCertificateId,
+               "CloudFrontDefaultCertificate" @=
+                 _vcCloudFrontDefaultCertificate]
diff --git a/gen/Network/AWS/CloudFront/Types/Sum.hs b/gen/Network/AWS/CloudFront/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudFront/Types/Sum.hs
@@ -0,0 +1,271 @@
+{-# 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.CloudFront.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.CloudFront.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data GeoRestrictionType
+    = Blacklist
+    | None
+    | Whitelist
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText GeoRestrictionType where
+    parser = takeLowerText >>= \case
+        "blacklist" -> pure Blacklist
+        "none" -> pure None
+        "whitelist" -> pure Whitelist
+        e -> fromTextError $ "Failure parsing GeoRestrictionType from value: '" <> e
+           <> "'. Accepted values: blacklist, none, whitelist"
+
+instance ToText GeoRestrictionType where
+    toText = \case
+        Blacklist -> "blacklist"
+        None -> "none"
+        Whitelist -> "whitelist"
+
+instance Hashable     GeoRestrictionType
+instance ToByteString GeoRestrictionType
+instance ToQuery      GeoRestrictionType
+instance ToHeader     GeoRestrictionType
+
+instance FromXML GeoRestrictionType where
+    parseXML = parseXMLText "GeoRestrictionType"
+
+instance ToXML GeoRestrictionType where
+    toXML = toXMLText
+
+data ItemSelection
+    = ISAll
+    | ISNone
+    | ISWhitelist
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ItemSelection where
+    parser = takeLowerText >>= \case
+        "all" -> pure ISAll
+        "none" -> pure ISNone
+        "whitelist" -> pure ISWhitelist
+        e -> fromTextError $ "Failure parsing ItemSelection from value: '" <> e
+           <> "'. Accepted values: all, none, whitelist"
+
+instance ToText ItemSelection where
+    toText = \case
+        ISAll -> "all"
+        ISNone -> "none"
+        ISWhitelist -> "whitelist"
+
+instance Hashable     ItemSelection
+instance ToByteString ItemSelection
+instance ToQuery      ItemSelection
+instance ToHeader     ItemSelection
+
+instance FromXML ItemSelection where
+    parseXML = parseXMLText "ItemSelection"
+
+instance ToXML ItemSelection where
+    toXML = toXMLText
+
+data Method
+    = Delete
+    | Get
+    | Head
+    | Options
+    | Patch
+    | Post
+    | Put
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText Method where
+    parser = takeLowerText >>= \case
+        "delete" -> pure Delete
+        "get" -> pure Get
+        "head" -> pure Head
+        "options" -> pure Options
+        "patch" -> pure Patch
+        "post" -> pure Post
+        "put" -> pure Put
+        e -> fromTextError $ "Failure parsing Method from value: '" <> e
+           <> "'. Accepted values: delete, get, head, options, patch, post, put"
+
+instance ToText Method where
+    toText = \case
+        Delete -> "delete"
+        Get -> "get"
+        Head -> "head"
+        Options -> "options"
+        Patch -> "patch"
+        Post -> "post"
+        Put -> "put"
+
+instance Hashable     Method
+instance ToByteString Method
+instance ToQuery      Method
+instance ToHeader     Method
+
+instance FromXML Method where
+    parseXML = parseXMLText "Method"
+
+instance ToXML Method where
+    toXML = toXMLText
+
+data MinimumProtocolVersion
+    = SSLV3
+    | TLSV1
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText MinimumProtocolVersion where
+    parser = takeLowerText >>= \case
+        "sslv3" -> pure SSLV3
+        "tlsv1" -> pure TLSV1
+        e -> fromTextError $ "Failure parsing MinimumProtocolVersion from value: '" <> e
+           <> "'. Accepted values: sslv3, tlsv1"
+
+instance ToText MinimumProtocolVersion where
+    toText = \case
+        SSLV3 -> "sslv3"
+        TLSV1 -> "tlsv1"
+
+instance Hashable     MinimumProtocolVersion
+instance ToByteString MinimumProtocolVersion
+instance ToQuery      MinimumProtocolVersion
+instance ToHeader     MinimumProtocolVersion
+
+instance FromXML MinimumProtocolVersion where
+    parseXML = parseXMLText "MinimumProtocolVersion"
+
+instance ToXML MinimumProtocolVersion where
+    toXML = toXMLText
+
+data OriginProtocolPolicy
+    = HTTPOnly
+    | MatchViewer
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText OriginProtocolPolicy where
+    parser = takeLowerText >>= \case
+        "http-only" -> pure HTTPOnly
+        "match-viewer" -> pure MatchViewer
+        e -> fromTextError $ "Failure parsing OriginProtocolPolicy from value: '" <> e
+           <> "'. Accepted values: http-only, match-viewer"
+
+instance ToText OriginProtocolPolicy where
+    toText = \case
+        HTTPOnly -> "http-only"
+        MatchViewer -> "match-viewer"
+
+instance Hashable     OriginProtocolPolicy
+instance ToByteString OriginProtocolPolicy
+instance ToQuery      OriginProtocolPolicy
+instance ToHeader     OriginProtocolPolicy
+
+instance FromXML OriginProtocolPolicy where
+    parseXML = parseXMLText "OriginProtocolPolicy"
+
+instance ToXML OriginProtocolPolicy where
+    toXML = toXMLText
+
+data PriceClass
+    = PriceClass100
+    | PriceClass200
+    | PriceClassAll
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText PriceClass where
+    parser = takeLowerText >>= \case
+        "priceclass_100" -> pure PriceClass100
+        "priceclass_200" -> pure PriceClass200
+        "priceclass_all" -> pure PriceClassAll
+        e -> fromTextError $ "Failure parsing PriceClass from value: '" <> e
+           <> "'. Accepted values: priceclass_100, priceclass_200, priceclass_all"
+
+instance ToText PriceClass where
+    toText = \case
+        PriceClass100 -> "priceclass_100"
+        PriceClass200 -> "priceclass_200"
+        PriceClassAll -> "priceclass_all"
+
+instance Hashable     PriceClass
+instance ToByteString PriceClass
+instance ToQuery      PriceClass
+instance ToHeader     PriceClass
+
+instance FromXML PriceClass where
+    parseXML = parseXMLText "PriceClass"
+
+instance ToXML PriceClass where
+    toXML = toXMLText
+
+data SSLSupportMethod
+    = SNIOnly
+    | VIP
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText SSLSupportMethod where
+    parser = takeLowerText >>= \case
+        "sni-only" -> pure SNIOnly
+        "vip" -> pure VIP
+        e -> fromTextError $ "Failure parsing SSLSupportMethod from value: '" <> e
+           <> "'. Accepted values: sni-only, vip"
+
+instance ToText SSLSupportMethod where
+    toText = \case
+        SNIOnly -> "sni-only"
+        VIP -> "vip"
+
+instance Hashable     SSLSupportMethod
+instance ToByteString SSLSupportMethod
+instance ToQuery      SSLSupportMethod
+instance ToHeader     SSLSupportMethod
+
+instance FromXML SSLSupportMethod where
+    parseXML = parseXMLText "SSLSupportMethod"
+
+instance ToXML SSLSupportMethod where
+    toXML = toXMLText
+
+data ViewerProtocolPolicy
+    = AllowAll
+    | HTTPSOnly
+    | RedirectToHTTPS
+    deriving (Eq,Ord,Read,Show,Enum,Data,Typeable,Generic)
+
+instance FromText ViewerProtocolPolicy where
+    parser = takeLowerText >>= \case
+        "allow-all" -> pure AllowAll
+        "https-only" -> pure HTTPSOnly
+        "redirect-to-https" -> pure RedirectToHTTPS
+        e -> fromTextError $ "Failure parsing ViewerProtocolPolicy from value: '" <> e
+           <> "'. Accepted values: allow-all, https-only, redirect-to-https"
+
+instance ToText ViewerProtocolPolicy where
+    toText = \case
+        AllowAll -> "allow-all"
+        HTTPSOnly -> "https-only"
+        RedirectToHTTPS -> "redirect-to-https"
+
+instance Hashable     ViewerProtocolPolicy
+instance ToByteString ViewerProtocolPolicy
+instance ToQuery      ViewerProtocolPolicy
+instance ToHeader     ViewerProtocolPolicy
+
+instance FromXML ViewerProtocolPolicy where
+    parseXML = parseXMLText "ViewerProtocolPolicy"
+
+instance ToXML ViewerProtocolPolicy where
+    toXML = toXMLText
diff --git a/gen/Network/AWS/CloudFront/UpdateCloudFrontOriginAccessIdentity.hs b/gen/Network/AWS/CloudFront/UpdateCloudFrontOriginAccessIdentity.hs
--- a/gen/Network/AWS/CloudFront/UpdateCloudFrontOriginAccessIdentity.hs
+++ b/gen/Network/AWS/CloudFront/UpdateCloudFrontOriginAccessIdentity.hs
@@ -1,149 +1,167 @@
-{-# 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.CloudFront.UpdateCloudFrontOriginAccessIdentity
--- 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.
-
--- | Update an origin access identity.
+-- Update an origin access identity.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/UpdateCloudFrontOriginAccessIdentity.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/UpdateCloudFrontOriginAccessIdentity.html AWS API Reference> for UpdateCloudFrontOriginAccessIdentity.
 module Network.AWS.CloudFront.UpdateCloudFrontOriginAccessIdentity
     (
-    -- * Request
-      UpdateCloudFrontOriginAccessIdentity
-    -- ** Request constructor
-    , updateCloudFrontOriginAccessIdentity
-    -- ** Request lenses
+    -- * Creating a Request
+      updateCloudFrontOriginAccessIdentity
+    , UpdateCloudFrontOriginAccessIdentity
+    -- * Request Lenses
+    , ucfoaiIfMatch
     , ucfoaiCloudFrontOriginAccessIdentityConfig
     , ucfoaiId
-    , ucfoaiIfMatch
 
-    -- * Response
-    , UpdateCloudFrontOriginAccessIdentityResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateCloudFrontOriginAccessIdentityResponse
-    -- ** Response lenses
-    , ucfoairCloudFrontOriginAccessIdentity
-    , ucfoairETag
+    , UpdateCloudFrontOriginAccessIdentityResponse
+    -- * Response Lenses
+    , ucfoairsETag
+    , ucfoairsCloudFrontOriginAccessIdentity
+    , ucfoairsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data UpdateCloudFrontOriginAccessIdentity = UpdateCloudFrontOriginAccessIdentity
-    { _ucfoaiCloudFrontOriginAccessIdentityConfig :: CloudFrontOriginAccessIdentityConfig
-    , _ucfoaiId                                   :: Text
-    , _ucfoaiIfMatch                              :: Maybe Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'UpdateCloudFrontOriginAccessIdentity' constructor.
+-- | The request to update an origin access identity.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateCloudFrontOriginAccessIdentity' smart constructor.
+data UpdateCloudFrontOriginAccessIdentity = UpdateCloudFrontOriginAccessIdentity'
+    { _ucfoaiIfMatch                              :: !(Maybe Text)
+    , _ucfoaiCloudFrontOriginAccessIdentityConfig :: !CloudFrontOriginAccessIdentityConfig
+    , _ucfoaiId                                   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateCloudFrontOriginAccessIdentity' with the minimum fields required to make a request.
 --
--- * 'ucfoaiCloudFrontOriginAccessIdentityConfig' @::@ 'CloudFrontOriginAccessIdentityConfig'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ucfoaiId' @::@ 'Text'
+-- * 'ucfoaiIfMatch'
 --
--- * 'ucfoaiIfMatch' @::@ 'Maybe' 'Text'
+-- * 'ucfoaiCloudFrontOriginAccessIdentityConfig'
 --
-updateCloudFrontOriginAccessIdentity :: CloudFrontOriginAccessIdentityConfig -- ^ 'ucfoaiCloudFrontOriginAccessIdentityConfig'
-                                     -> Text -- ^ 'ucfoaiId'
-                                     -> UpdateCloudFrontOriginAccessIdentity
-updateCloudFrontOriginAccessIdentity p1 p2 = UpdateCloudFrontOriginAccessIdentity
-    { _ucfoaiCloudFrontOriginAccessIdentityConfig = p1
-    , _ucfoaiId                                   = p2
-    , _ucfoaiIfMatch                              = Nothing
+-- * 'ucfoaiId'
+updateCloudFrontOriginAccessIdentity
+    :: CloudFrontOriginAccessIdentityConfig -- ^ 'ucfoaiCloudFrontOriginAccessIdentityConfig'
+    -> Text -- ^ 'ucfoaiId'
+    -> UpdateCloudFrontOriginAccessIdentity
+updateCloudFrontOriginAccessIdentity pCloudFrontOriginAccessIdentityConfig_ pId_ =
+    UpdateCloudFrontOriginAccessIdentity'
+    { _ucfoaiIfMatch = Nothing
+    , _ucfoaiCloudFrontOriginAccessIdentityConfig = pCloudFrontOriginAccessIdentityConfig_
+    , _ucfoaiId = pId_
     }
 
--- | The identity's configuration information.
+-- | The value of the ETag header you received when retrieving the
+-- identity\'s configuration. For example: E2QWRUHAPOMQZL.
+ucfoaiIfMatch :: Lens' UpdateCloudFrontOriginAccessIdentity (Maybe Text)
+ucfoaiIfMatch = lens _ucfoaiIfMatch (\ s a -> s{_ucfoaiIfMatch = a});
+
+-- | The identity\'s configuration information.
 ucfoaiCloudFrontOriginAccessIdentityConfig :: Lens' UpdateCloudFrontOriginAccessIdentity CloudFrontOriginAccessIdentityConfig
-ucfoaiCloudFrontOriginAccessIdentityConfig =
-    lens _ucfoaiCloudFrontOriginAccessIdentityConfig
-        (\s a -> s { _ucfoaiCloudFrontOriginAccessIdentityConfig = a })
+ucfoaiCloudFrontOriginAccessIdentityConfig = lens _ucfoaiCloudFrontOriginAccessIdentityConfig (\ s a -> s{_ucfoaiCloudFrontOriginAccessIdentityConfig = a});
 
--- | The identity's id.
+-- | The identity\'s id.
 ucfoaiId :: Lens' UpdateCloudFrontOriginAccessIdentity Text
-ucfoaiId = lens _ucfoaiId (\s a -> s { _ucfoaiId = a })
+ucfoaiId = lens _ucfoaiId (\ s a -> s{_ucfoaiId = a});
 
--- | The value of the ETag header you received when retrieving the identity's
--- configuration. For example: E2QWRUHAPOMQZL.
-ucfoaiIfMatch :: Lens' UpdateCloudFrontOriginAccessIdentity (Maybe Text)
-ucfoaiIfMatch = lens _ucfoaiIfMatch (\s a -> s { _ucfoaiIfMatch = a })
+instance AWSRequest
+         UpdateCloudFrontOriginAccessIdentity where
+        type Sv UpdateCloudFrontOriginAccessIdentity =
+             CloudFront
+        type Rs UpdateCloudFrontOriginAccessIdentity =
+             UpdateCloudFrontOriginAccessIdentityResponse
+        request = putXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 UpdateCloudFrontOriginAccessIdentityResponse' <$>
+                   (h .#? "ETag") <*> (parseXML x) <*>
+                     (pure (fromEnum s)))
 
-data UpdateCloudFrontOriginAccessIdentityResponse = UpdateCloudFrontOriginAccessIdentityResponse
-    { _ucfoairCloudFrontOriginAccessIdentity :: Maybe CloudFrontOriginAccessIdentity
-    , _ucfoairETag                           :: Maybe Text
-    } deriving (Eq, Read, Show)
+instance ToElement
+         UpdateCloudFrontOriginAccessIdentity where
+        toElement
+          = mkElement
+              "{http://cloudfront.amazonaws.com/doc/2015-04-17/}CloudFrontOriginAccessIdentityConfig"
+              .
+              _ucfoaiCloudFrontOriginAccessIdentityConfig
 
--- | 'UpdateCloudFrontOriginAccessIdentityResponse' constructor.
+instance ToHeaders
+         UpdateCloudFrontOriginAccessIdentity where
+        toHeaders UpdateCloudFrontOriginAccessIdentity'{..}
+          = mconcat ["If-Match" =# _ucfoaiIfMatch]
+
+instance ToPath UpdateCloudFrontOriginAccessIdentity
+         where
+        toPath UpdateCloudFrontOriginAccessIdentity'{..}
+          = mconcat
+              ["/2015-04-17/origin-access-identity/cloudfront/",
+               toBS _ucfoaiId, "/config"]
+
+instance ToQuery UpdateCloudFrontOriginAccessIdentity
+         where
+        toQuery = const mempty
+
+-- | The returned result of the corresponding request.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateCloudFrontOriginAccessIdentityResponse' smart constructor.
+data UpdateCloudFrontOriginAccessIdentityResponse = UpdateCloudFrontOriginAccessIdentityResponse'
+    { _ucfoairsETag                           :: !(Maybe Text)
+    , _ucfoairsCloudFrontOriginAccessIdentity :: !(Maybe CloudFrontOriginAccessIdentity)
+    , _ucfoairsStatus                         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateCloudFrontOriginAccessIdentityResponse' with the minimum fields required to make a request.
 --
--- * 'ucfoairCloudFrontOriginAccessIdentity' @::@ 'Maybe' 'CloudFrontOriginAccessIdentity'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'ucfoairETag' @::@ 'Maybe' 'Text'
+-- * 'ucfoairsETag'
 --
-updateCloudFrontOriginAccessIdentityResponse :: UpdateCloudFrontOriginAccessIdentityResponse
-updateCloudFrontOriginAccessIdentityResponse = UpdateCloudFrontOriginAccessIdentityResponse
-    { _ucfoairCloudFrontOriginAccessIdentity = Nothing
-    , _ucfoairETag                           = Nothing
+-- * 'ucfoairsCloudFrontOriginAccessIdentity'
+--
+-- * 'ucfoairsStatus'
+updateCloudFrontOriginAccessIdentityResponse
+    :: Int -- ^ 'ucfoairsStatus'
+    -> UpdateCloudFrontOriginAccessIdentityResponse
+updateCloudFrontOriginAccessIdentityResponse pStatus_ =
+    UpdateCloudFrontOriginAccessIdentityResponse'
+    { _ucfoairsETag = Nothing
+    , _ucfoairsCloudFrontOriginAccessIdentity = Nothing
+    , _ucfoairsStatus = pStatus_
     }
 
--- | The origin access identity's information.
-ucfoairCloudFrontOriginAccessIdentity :: Lens' UpdateCloudFrontOriginAccessIdentityResponse (Maybe CloudFrontOriginAccessIdentity)
-ucfoairCloudFrontOriginAccessIdentity =
-    lens _ucfoairCloudFrontOriginAccessIdentity
-        (\s a -> s { _ucfoairCloudFrontOriginAccessIdentity = a })
-
 -- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
-ucfoairETag :: Lens' UpdateCloudFrontOriginAccessIdentityResponse (Maybe Text)
-ucfoairETag = lens _ucfoairETag (\s a -> s { _ucfoairETag = a })
-
-instance ToPath UpdateCloudFrontOriginAccessIdentity where
-    toPath UpdateCloudFrontOriginAccessIdentity{..} = mconcat
-        [ "/2014-11-06/origin-access-identity/cloudfront/"
-        , toText _ucfoaiId
-        , "/config"
-        ]
-
-instance ToQuery UpdateCloudFrontOriginAccessIdentity where
-    toQuery = const mempty
-
-instance ToHeaders UpdateCloudFrontOriginAccessIdentity where
-    toHeaders UpdateCloudFrontOriginAccessIdentity{..} = mconcat
-        [ "If-Match" =: _ucfoaiIfMatch
-        ]
-
-instance ToXMLRoot UpdateCloudFrontOriginAccessIdentity where
-    toXMLRoot = extractRoot ns . toXML . _ucfoaiCloudFrontOriginAccessIdentityConfig
-
-instance ToXML UpdateCloudFrontOriginAccessIdentity
+ucfoairsETag :: Lens' UpdateCloudFrontOriginAccessIdentityResponse (Maybe Text)
+ucfoairsETag = lens _ucfoairsETag (\ s a -> s{_ucfoairsETag = a});
 
-instance AWSRequest UpdateCloudFrontOriginAccessIdentity where
-    type Sv UpdateCloudFrontOriginAccessIdentity = CloudFront
-    type Rs UpdateCloudFrontOriginAccessIdentity = UpdateCloudFrontOriginAccessIdentityResponse
+-- | The origin access identity\'s information.
+ucfoairsCloudFrontOriginAccessIdentity :: Lens' UpdateCloudFrontOriginAccessIdentityResponse (Maybe CloudFrontOriginAccessIdentity)
+ucfoairsCloudFrontOriginAccessIdentity = lens _ucfoairsCloudFrontOriginAccessIdentity (\ s a -> s{_ucfoairsCloudFrontOriginAccessIdentity = a});
 
-    request  = put
-    response = xmlHeaderResponse $ \h x -> UpdateCloudFrontOriginAccessIdentityResponse
-        <$> x .@? "CloudFrontOriginAccessIdentity"
-        <*> h ~:? "ETag"
+-- | The response status code.
+ucfoairsStatus :: Lens' UpdateCloudFrontOriginAccessIdentityResponse Int
+ucfoairsStatus = lens _ucfoairsStatus (\ s a -> s{_ucfoairsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/UpdateDistribution.hs b/gen/Network/AWS/CloudFront/UpdateDistribution.hs
--- a/gen/Network/AWS/CloudFront/UpdateDistribution.hs
+++ b/gen/Network/AWS/CloudFront/UpdateDistribution.hs
@@ -1,146 +1,160 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
 
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
 
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
 -- Module      : Network.AWS.CloudFront.UpdateDistribution
--- 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.
-
--- | Update a distribution.
+-- Update a distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/UpdateDistribution.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/UpdateDistribution.html AWS API Reference> for UpdateDistribution.
 module Network.AWS.CloudFront.UpdateDistribution
     (
-    -- * Request
-      UpdateDistribution
-    -- ** Request constructor
-    , updateDistribution
-    -- ** Request lenses
+    -- * Creating a Request
+      updateDistribution
+    , UpdateDistribution
+    -- * Request Lenses
+    , udIfMatch
     , udDistributionConfig
     , udId
-    , udIfMatch
 
-    -- * Response
-    , UpdateDistributionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateDistributionResponse
-    -- ** Response lenses
-    , udrDistribution
-    , udrETag
+    , UpdateDistributionResponse
+    -- * Response Lenses
+    , udrsETag
+    , udrsDistribution
+    , udrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data UpdateDistribution = UpdateDistribution
-    { _udDistributionConfig :: DistributionConfig
-    , _udId                 :: Text
-    , _udIfMatch            :: Maybe Text
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'UpdateDistribution' constructor.
+-- | The request to update a distribution.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateDistribution' smart constructor.
+data UpdateDistribution = UpdateDistribution'
+    { _udIfMatch            :: !(Maybe Text)
+    , _udDistributionConfig :: !DistributionConfig
+    , _udId                 :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateDistribution' with the minimum fields required to make a request.
 --
--- * 'udDistributionConfig' @::@ 'DistributionConfig'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'udId' @::@ 'Text'
+-- * 'udIfMatch'
 --
--- * 'udIfMatch' @::@ 'Maybe' 'Text'
+-- * 'udDistributionConfig'
 --
-updateDistribution :: DistributionConfig -- ^ 'udDistributionConfig'
-                   -> Text -- ^ 'udId'
-                   -> UpdateDistribution
-updateDistribution p1 p2 = UpdateDistribution
-    { _udDistributionConfig = p1
-    , _udId                 = p2
-    , _udIfMatch            = Nothing
+-- * 'udId'
+updateDistribution
+    :: DistributionConfig -- ^ 'udDistributionConfig'
+    -> Text -- ^ 'udId'
+    -> UpdateDistribution
+updateDistribution pDistributionConfig_ pId_ =
+    UpdateDistribution'
+    { _udIfMatch = Nothing
+    , _udDistributionConfig = pDistributionConfig_
+    , _udId = pId_
     }
 
--- | The distribution's configuration information.
+-- | The value of the ETag header you received when retrieving the
+-- distribution\'s configuration. For example: E2QWRUHAPOMQZL.
+udIfMatch :: Lens' UpdateDistribution (Maybe Text)
+udIfMatch = lens _udIfMatch (\ s a -> s{_udIfMatch = a});
+
+-- | The distribution\'s configuration information.
 udDistributionConfig :: Lens' UpdateDistribution DistributionConfig
-udDistributionConfig =
-    lens _udDistributionConfig (\s a -> s { _udDistributionConfig = a })
+udDistributionConfig = lens _udDistributionConfig (\ s a -> s{_udDistributionConfig = a});
 
--- | The distribution's id.
+-- | The distribution\'s id.
 udId :: Lens' UpdateDistribution Text
-udId = lens _udId (\s a -> s { _udId = a })
-
--- | The value of the ETag header you received when retrieving the distribution's
--- configuration. For example: E2QWRUHAPOMQZL.
-udIfMatch :: Lens' UpdateDistribution (Maybe Text)
-udIfMatch = lens _udIfMatch (\s a -> s { _udIfMatch = a })
-
-data UpdateDistributionResponse = UpdateDistributionResponse
-    { _udrDistribution :: Maybe Distribution
-    , _udrETag         :: Maybe Text
-    } deriving (Eq, Read, Show)
+udId = lens _udId (\ s a -> s{_udId = a});
 
--- | 'UpdateDistributionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'udrDistribution' @::@ 'Maybe' 'Distribution'
---
--- * 'udrETag' @::@ 'Maybe' 'Text'
---
-updateDistributionResponse :: UpdateDistributionResponse
-updateDistributionResponse = UpdateDistributionResponse
-    { _udrDistribution = Nothing
-    , _udrETag         = Nothing
-    }
+instance AWSRequest UpdateDistribution where
+        type Sv UpdateDistribution = CloudFront
+        type Rs UpdateDistribution =
+             UpdateDistributionResponse
+        request = putXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 UpdateDistributionResponse' <$>
+                   (h .#? "ETag") <*> (parseXML x) <*>
+                     (pure (fromEnum s)))
 
--- | The distribution's information.
-udrDistribution :: Lens' UpdateDistributionResponse (Maybe Distribution)
-udrDistribution = lens _udrDistribution (\s a -> s { _udrDistribution = a })
+instance ToElement UpdateDistribution where
+        toElement
+          = mkElement
+              "{http://cloudfront.amazonaws.com/doc/2015-04-17/}DistributionConfig"
+              .
+              _udDistributionConfig
 
--- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
-udrETag :: Lens' UpdateDistributionResponse (Maybe Text)
-udrETag = lens _udrETag (\s a -> s { _udrETag = a })
+instance ToHeaders UpdateDistribution where
+        toHeaders UpdateDistribution'{..}
+          = mconcat ["If-Match" =# _udIfMatch]
 
 instance ToPath UpdateDistribution where
-    toPath UpdateDistribution{..} = mconcat
-        [ "/2014-11-06/distribution/"
-        , toText _udId
-        , "/config"
-        ]
+        toPath UpdateDistribution'{..}
+          = mconcat
+              ["/2015-04-17/distribution/", toBS _udId, "/config"]
 
 instance ToQuery UpdateDistribution where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders UpdateDistribution where
-    toHeaders UpdateDistribution{..} = mconcat
-        [ "If-Match" =: _udIfMatch
-        ]
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'updateDistributionResponse' smart constructor.
+data UpdateDistributionResponse = UpdateDistributionResponse'
+    { _udrsETag         :: !(Maybe Text)
+    , _udrsDistribution :: !(Maybe Distribution)
+    , _udrsStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot UpdateDistribution where
-    toXMLRoot = extractRoot ns . toXML . _udDistributionConfig
+-- | Creates a value of 'UpdateDistributionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udrsETag'
+--
+-- * 'udrsDistribution'
+--
+-- * 'udrsStatus'
+updateDistributionResponse
+    :: Int -- ^ 'udrsStatus'
+    -> UpdateDistributionResponse
+updateDistributionResponse pStatus_ =
+    UpdateDistributionResponse'
+    { _udrsETag = Nothing
+    , _udrsDistribution = Nothing
+    , _udrsStatus = pStatus_
+    }
 
-instance ToXML UpdateDistribution
+-- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
+udrsETag :: Lens' UpdateDistributionResponse (Maybe Text)
+udrsETag = lens _udrsETag (\ s a -> s{_udrsETag = a});
 
-instance AWSRequest UpdateDistribution where
-    type Sv UpdateDistribution = CloudFront
-    type Rs UpdateDistribution = UpdateDistributionResponse
+-- | The distribution\'s information.
+udrsDistribution :: Lens' UpdateDistributionResponse (Maybe Distribution)
+udrsDistribution = lens _udrsDistribution (\ s a -> s{_udrsDistribution = a});
 
-    request  = put
-    response = xmlHeaderResponse $ \h x -> UpdateDistributionResponse
-        <$> x .@? "Distribution"
-        <*> h ~:? "ETag"
+-- | The response status code.
+udrsStatus :: Lens' UpdateDistributionResponse Int
+udrsStatus = lens _udrsStatus (\ s a -> s{_udrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/UpdateStreamingDistribution.hs b/gen/Network/AWS/CloudFront/UpdateStreamingDistribution.hs
--- a/gen/Network/AWS/CloudFront/UpdateStreamingDistribution.hs
+++ b/gen/Network/AWS/CloudFront/UpdateStreamingDistribution.hs
@@ -1,149 +1,161 @@
-{-# 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.CloudFront.UpdateStreamingDistribution
--- 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.
-
--- | Update a streaming distribution.
+-- Update a streaming distribution.
 --
--- <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/UpdateStreamingDistribution.html>
+-- /See:/ <http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/UpdateStreamingDistribution.html AWS API Reference> for UpdateStreamingDistribution.
 module Network.AWS.CloudFront.UpdateStreamingDistribution
     (
-    -- * Request
-      UpdateStreamingDistribution
-    -- ** Request constructor
-    , updateStreamingDistribution
-    -- ** Request lenses
-    , usdId
+    -- * Creating a Request
+      updateStreamingDistribution
+    , UpdateStreamingDistribution
+    -- * Request Lenses
     , usdIfMatch
     , usdStreamingDistributionConfig
+    , usdId
 
-    -- * Response
-    , UpdateStreamingDistributionResponse
-    -- ** Response constructor
+    -- * Destructuring the Response
     , updateStreamingDistributionResponse
-    -- ** Response lenses
-    , usdrETag
-    , usdrStreamingDistribution
+    , UpdateStreamingDistributionResponse
+    -- * Response Lenses
+    , usdrsETag
+    , usdrsStreamingDistribution
+    , usdrsStatus
     ) where
 
-import Network.AWS.Prelude
-import Network.AWS.Request.RestXML
-import Network.AWS.CloudFront.Types
-import qualified GHC.Exts
-
-data UpdateStreamingDistribution = UpdateStreamingDistribution
-    { _usdId                          :: Text
-    , _usdIfMatch                     :: Maybe Text
-    , _usdStreamingDistributionConfig :: StreamingDistributionConfig
-    } deriving (Eq, Read, Show)
+import           Network.AWS.CloudFront.Types
+import           Network.AWS.CloudFront.Types.Product
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
 
--- | 'UpdateStreamingDistribution' constructor.
+-- | The request to update a streaming distribution.
 --
--- The fields accessible through corresponding lenses are:
+-- /See:/ 'updateStreamingDistribution' smart constructor.
+data UpdateStreamingDistribution = UpdateStreamingDistribution'
+    { _usdIfMatch                     :: !(Maybe Text)
+    , _usdStreamingDistributionConfig :: !StreamingDistributionConfig
+    , _usdId                          :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateStreamingDistribution' with the minimum fields required to make a request.
 --
--- * 'usdId' @::@ 'Text'
+-- Use one of the following lenses to modify other fields as desired:
 --
--- * 'usdIfMatch' @::@ 'Maybe' 'Text'
+-- * 'usdIfMatch'
 --
--- * 'usdStreamingDistributionConfig' @::@ 'StreamingDistributionConfig'
+-- * 'usdStreamingDistributionConfig'
 --
-updateStreamingDistribution :: StreamingDistributionConfig -- ^ 'usdStreamingDistributionConfig'
-                            -> Text -- ^ 'usdId'
-                            -> UpdateStreamingDistribution
-updateStreamingDistribution p1 p2 = UpdateStreamingDistribution
-    { _usdStreamingDistributionConfig = p1
-    , _usdId                          = p2
-    , _usdIfMatch                     = Nothing
+-- * 'usdId'
+updateStreamingDistribution
+    :: StreamingDistributionConfig -- ^ 'usdStreamingDistributionConfig'
+    -> Text -- ^ 'usdId'
+    -> UpdateStreamingDistribution
+updateStreamingDistribution pStreamingDistributionConfig_ pId_ =
+    UpdateStreamingDistribution'
+    { _usdIfMatch = Nothing
+    , _usdStreamingDistributionConfig = pStreamingDistributionConfig_
+    , _usdId = pId_
     }
 
--- | The streaming distribution's id.
-usdId :: Lens' UpdateStreamingDistribution Text
-usdId = lens _usdId (\s a -> s { _usdId = a })
-
 -- | The value of the ETag header you received when retrieving the streaming
--- distribution's configuration. For example: E2QWRUHAPOMQZL.
+-- distribution\'s configuration. For example: E2QWRUHAPOMQZL.
 usdIfMatch :: Lens' UpdateStreamingDistribution (Maybe Text)
-usdIfMatch = lens _usdIfMatch (\s a -> s { _usdIfMatch = a })
+usdIfMatch = lens _usdIfMatch (\ s a -> s{_usdIfMatch = a});
 
--- | The streaming distribution's configuration information.
+-- | The streaming distribution\'s configuration information.
 usdStreamingDistributionConfig :: Lens' UpdateStreamingDistribution StreamingDistributionConfig
-usdStreamingDistributionConfig =
-    lens _usdStreamingDistributionConfig
-        (\s a -> s { _usdStreamingDistributionConfig = a })
+usdStreamingDistributionConfig = lens _usdStreamingDistributionConfig (\ s a -> s{_usdStreamingDistributionConfig = a});
 
-data UpdateStreamingDistributionResponse = UpdateStreamingDistributionResponse
-    { _usdrETag                  :: Maybe Text
-    , _usdrStreamingDistribution :: Maybe StreamingDistribution
-    } deriving (Eq, Read, Show)
+-- | The streaming distribution\'s id.
+usdId :: Lens' UpdateStreamingDistribution Text
+usdId = lens _usdId (\ s a -> s{_usdId = a});
 
--- | 'UpdateStreamingDistributionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'usdrETag' @::@ 'Maybe' 'Text'
---
--- * 'usdrStreamingDistribution' @::@ 'Maybe' 'StreamingDistribution'
---
-updateStreamingDistributionResponse :: UpdateStreamingDistributionResponse
-updateStreamingDistributionResponse = UpdateStreamingDistributionResponse
-    { _usdrStreamingDistribution = Nothing
-    , _usdrETag                  = Nothing
-    }
+instance AWSRequest UpdateStreamingDistribution where
+        type Sv UpdateStreamingDistribution = CloudFront
+        type Rs UpdateStreamingDistribution =
+             UpdateStreamingDistributionResponse
+        request = putXML
+        response
+          = receiveXML
+              (\ s h x ->
+                 UpdateStreamingDistributionResponse' <$>
+                   (h .#? "ETag") <*> (parseXML x) <*>
+                     (pure (fromEnum s)))
 
--- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
-usdrETag :: Lens' UpdateStreamingDistributionResponse (Maybe Text)
-usdrETag = lens _usdrETag (\s a -> s { _usdrETag = a })
+instance ToElement UpdateStreamingDistribution where
+        toElement
+          = mkElement
+              "{http://cloudfront.amazonaws.com/doc/2015-04-17/}StreamingDistributionConfig"
+              .
+              _usdStreamingDistributionConfig
 
--- | The streaming distribution's information.
-usdrStreamingDistribution :: Lens' UpdateStreamingDistributionResponse (Maybe StreamingDistribution)
-usdrStreamingDistribution =
-    lens _usdrStreamingDistribution
-        (\s a -> s { _usdrStreamingDistribution = a })
+instance ToHeaders UpdateStreamingDistribution where
+        toHeaders UpdateStreamingDistribution'{..}
+          = mconcat ["If-Match" =# _usdIfMatch]
 
 instance ToPath UpdateStreamingDistribution where
-    toPath UpdateStreamingDistribution{..} = mconcat
-        [ "/2014-11-06/streaming-distribution/"
-        , toText _usdId
-        , "/config"
-        ]
+        toPath UpdateStreamingDistribution'{..}
+          = mconcat
+              ["/2015-04-17/streaming-distribution/", toBS _usdId,
+               "/config"]
 
 instance ToQuery UpdateStreamingDistribution where
-    toQuery = const mempty
+        toQuery = const mempty
 
-instance ToHeaders UpdateStreamingDistribution where
-    toHeaders UpdateStreamingDistribution{..} = mconcat
-        [ "If-Match" =: _usdIfMatch
-        ]
+-- | The returned result of the corresponding request.
+--
+-- /See:/ 'updateStreamingDistributionResponse' smart constructor.
+data UpdateStreamingDistributionResponse = UpdateStreamingDistributionResponse'
+    { _usdrsETag                  :: !(Maybe Text)
+    , _usdrsStreamingDistribution :: !(Maybe StreamingDistribution)
+    , _usdrsStatus                :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
-instance ToXMLRoot UpdateStreamingDistribution where
-    toXMLRoot = extractRoot ns . toXML . _usdStreamingDistributionConfig
+-- | Creates a value of 'UpdateStreamingDistributionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'usdrsETag'
+--
+-- * 'usdrsStreamingDistribution'
+--
+-- * 'usdrsStatus'
+updateStreamingDistributionResponse
+    :: Int -- ^ 'usdrsStatus'
+    -> UpdateStreamingDistributionResponse
+updateStreamingDistributionResponse pStatus_ =
+    UpdateStreamingDistributionResponse'
+    { _usdrsETag = Nothing
+    , _usdrsStreamingDistribution = Nothing
+    , _usdrsStatus = pStatus_
+    }
 
-instance ToXML UpdateStreamingDistribution
+-- | The current version of the configuration. For example: E2QWRUHAPOMQZL.
+usdrsETag :: Lens' UpdateStreamingDistributionResponse (Maybe Text)
+usdrsETag = lens _usdrsETag (\ s a -> s{_usdrsETag = a});
 
-instance AWSRequest UpdateStreamingDistribution where
-    type Sv UpdateStreamingDistribution = CloudFront
-    type Rs UpdateStreamingDistribution = UpdateStreamingDistributionResponse
+-- | The streaming distribution\'s information.
+usdrsStreamingDistribution :: Lens' UpdateStreamingDistributionResponse (Maybe StreamingDistribution)
+usdrsStreamingDistribution = lens _usdrsStreamingDistribution (\ s a -> s{_usdrsStreamingDistribution = a});
 
-    request  = put
-    response = xmlHeaderResponse $ \h x -> UpdateStreamingDistributionResponse
-        <$> h ~:? "ETag"
-        <*> x .@? "StreamingDistribution"
+-- | The response status code.
+usdrsStatus :: Lens' UpdateStreamingDistributionResponse Int
+usdrsStatus = lens _usdrsStatus (\ s a -> s{_usdrsStatus = a});
diff --git a/gen/Network/AWS/CloudFront/Waiters.hs b/gen/Network/AWS/CloudFront/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/CloudFront/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.CloudFront.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.CloudFront.Waiters where
+
+import           Network.AWS.CloudFront.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.CloudFront
+import Test.AWS.CloudFront.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "CloudFront"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/CloudFront.hs b/test/Test/AWS/CloudFront.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudFront.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Module      : Test.AWS.CloudFront
+-- 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.CloudFront
+    ( tests
+    , fixtures
+    ) where
+
+import           Network.AWS.CloudFront
+import           Test.AWS.Gen.CloudFront
+import           Test.Tasty
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/CloudFront/Internal.hs b/test/Test/AWS/CloudFront/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/CloudFront/Internal.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Test.AWS.CloudFront.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.CloudFront.Internal where
+
+import Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/CloudFront.hs b/test/Test/AWS/Gen/CloudFront.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/CloudFront.hs
@@ -0,0 +1,396 @@
+{-# 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.CloudFront
+-- 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.CloudFront where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.CloudFront
+import Test.AWS.CloudFront.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"
+--         [ testDeleteStreamingDistribution $
+--             deleteStreamingDistribution
+--
+--         , testUpdateStreamingDistribution $
+--             updateStreamingDistribution
+--
+--         , testCreateDistribution $
+--             createDistribution
+--
+--         , testGetDistributionConfig $
+--             getDistributionConfig
+--
+--         , testGetDistribution $
+--             getDistribution
+--
+--         , testDeleteCloudFrontOriginAccessIdentity $
+--             deleteCloudFrontOriginAccessIdentity
+--
+--         , testUpdateCloudFrontOriginAccessIdentity $
+--             updateCloudFrontOriginAccessIdentity
+--
+--         , testListStreamingDistributions $
+--             listStreamingDistributions
+--
+--         , testGetStreamingDistributionConfig $
+--             getStreamingDistributionConfig
+--
+--         , testGetCloudFrontOriginAccessIdentityConfig $
+--             getCloudFrontOriginAccessIdentityConfig
+--
+--         , testCreateStreamingDistribution $
+--             createStreamingDistribution
+--
+--         , testCreateCloudFrontOriginAccessIdentity $
+--             createCloudFrontOriginAccessIdentity
+--
+--         , testListCloudFrontOriginAccessIdentities $
+--             listCloudFrontOriginAccessIdentities
+--
+--         , testGetInvalidation $
+--             getInvalidation
+--
+--         , testListInvalidations $
+--             listInvalidations
+--
+--         , testGetStreamingDistribution $
+--             getStreamingDistribution
+--
+--         , testGetCloudFrontOriginAccessIdentity $
+--             getCloudFrontOriginAccessIdentity
+--
+--         , testCreateInvalidation $
+--             createInvalidation
+--
+--         , testUpdateDistribution $
+--             updateDistribution
+--
+--         , testDeleteDistribution $
+--             deleteDistribution
+--
+--         , testListDistributions $
+--             listDistributions
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testDeleteStreamingDistributionResponse $
+--             deleteStreamingDistributionResponse
+--
+--         , testUpdateStreamingDistributionResponse $
+--             updateStreamingDistributionResponse
+--
+--         , testCreateDistributionResponse $
+--             createDistributionResponse
+--
+--         , testGetDistributionConfigResponse $
+--             getDistributionConfigResponse
+--
+--         , testGetDistributionResponse $
+--             getDistributionResponse
+--
+--         , testDeleteCloudFrontOriginAccessIdentityResponse $
+--             deleteCloudFrontOriginAccessIdentityResponse
+--
+--         , testUpdateCloudFrontOriginAccessIdentityResponse $
+--             updateCloudFrontOriginAccessIdentityResponse
+--
+--         , testListStreamingDistributionsResponse $
+--             listStreamingDistributionsResponse
+--
+--         , testGetStreamingDistributionConfigResponse $
+--             getStreamingDistributionConfigResponse
+--
+--         , testGetCloudFrontOriginAccessIdentityConfigResponse $
+--             getCloudFrontOriginAccessIdentityConfigResponse
+--
+--         , testCreateStreamingDistributionResponse $
+--             createStreamingDistributionResponse
+--
+--         , testCreateCloudFrontOriginAccessIdentityResponse $
+--             createCloudFrontOriginAccessIdentityResponse
+--
+--         , testListCloudFrontOriginAccessIdentitiesResponse $
+--             listCloudFrontOriginAccessIdentitiesResponse
+--
+--         , testGetInvalidationResponse $
+--             getInvalidationResponse
+--
+--         , testListInvalidationsResponse $
+--             listInvalidationsResponse
+--
+--         , testGetStreamingDistributionResponse $
+--             getStreamingDistributionResponse
+--
+--         , testGetCloudFrontOriginAccessIdentityResponse $
+--             getCloudFrontOriginAccessIdentityResponse
+--
+--         , testCreateInvalidationResponse $
+--             createInvalidationResponse
+--
+--         , testUpdateDistributionResponse $
+--             updateDistributionResponse
+--
+--         , testDeleteDistributionResponse $
+--             deleteDistributionResponse
+--
+--         , testListDistributionsResponse $
+--             listDistributionsResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testDeleteStreamingDistribution :: DeleteStreamingDistribution -> TestTree
+testDeleteStreamingDistribution = req
+    "DeleteStreamingDistribution"
+    "fixture/DeleteStreamingDistribution"
+
+testUpdateStreamingDistribution :: UpdateStreamingDistribution -> TestTree
+testUpdateStreamingDistribution = req
+    "UpdateStreamingDistribution"
+    "fixture/UpdateStreamingDistribution"
+
+testCreateDistribution :: CreateDistribution -> TestTree
+testCreateDistribution = req
+    "CreateDistribution"
+    "fixture/CreateDistribution"
+
+testGetDistributionConfig :: GetDistributionConfig -> TestTree
+testGetDistributionConfig = req
+    "GetDistributionConfig"
+    "fixture/GetDistributionConfig"
+
+testGetDistribution :: GetDistribution -> TestTree
+testGetDistribution = req
+    "GetDistribution"
+    "fixture/GetDistribution"
+
+testDeleteCloudFrontOriginAccessIdentity :: DeleteCloudFrontOriginAccessIdentity -> TestTree
+testDeleteCloudFrontOriginAccessIdentity = req
+    "DeleteCloudFrontOriginAccessIdentity"
+    "fixture/DeleteCloudFrontOriginAccessIdentity"
+
+testUpdateCloudFrontOriginAccessIdentity :: UpdateCloudFrontOriginAccessIdentity -> TestTree
+testUpdateCloudFrontOriginAccessIdentity = req
+    "UpdateCloudFrontOriginAccessIdentity"
+    "fixture/UpdateCloudFrontOriginAccessIdentity"
+
+testListStreamingDistributions :: ListStreamingDistributions -> TestTree
+testListStreamingDistributions = req
+    "ListStreamingDistributions"
+    "fixture/ListStreamingDistributions"
+
+testGetStreamingDistributionConfig :: GetStreamingDistributionConfig -> TestTree
+testGetStreamingDistributionConfig = req
+    "GetStreamingDistributionConfig"
+    "fixture/GetStreamingDistributionConfig"
+
+testGetCloudFrontOriginAccessIdentityConfig :: GetCloudFrontOriginAccessIdentityConfig -> TestTree
+testGetCloudFrontOriginAccessIdentityConfig = req
+    "GetCloudFrontOriginAccessIdentityConfig"
+    "fixture/GetCloudFrontOriginAccessIdentityConfig"
+
+testCreateStreamingDistribution :: CreateStreamingDistribution -> TestTree
+testCreateStreamingDistribution = req
+    "CreateStreamingDistribution"
+    "fixture/CreateStreamingDistribution"
+
+testCreateCloudFrontOriginAccessIdentity :: CreateCloudFrontOriginAccessIdentity -> TestTree
+testCreateCloudFrontOriginAccessIdentity = req
+    "CreateCloudFrontOriginAccessIdentity"
+    "fixture/CreateCloudFrontOriginAccessIdentity"
+
+testListCloudFrontOriginAccessIdentities :: ListCloudFrontOriginAccessIdentities -> TestTree
+testListCloudFrontOriginAccessIdentities = req
+    "ListCloudFrontOriginAccessIdentities"
+    "fixture/ListCloudFrontOriginAccessIdentities"
+
+testGetInvalidation :: GetInvalidation -> TestTree
+testGetInvalidation = req
+    "GetInvalidation"
+    "fixture/GetInvalidation"
+
+testListInvalidations :: ListInvalidations -> TestTree
+testListInvalidations = req
+    "ListInvalidations"
+    "fixture/ListInvalidations"
+
+testGetStreamingDistribution :: GetStreamingDistribution -> TestTree
+testGetStreamingDistribution = req
+    "GetStreamingDistribution"
+    "fixture/GetStreamingDistribution"
+
+testGetCloudFrontOriginAccessIdentity :: GetCloudFrontOriginAccessIdentity -> TestTree
+testGetCloudFrontOriginAccessIdentity = req
+    "GetCloudFrontOriginAccessIdentity"
+    "fixture/GetCloudFrontOriginAccessIdentity"
+
+testCreateInvalidation :: CreateInvalidation -> TestTree
+testCreateInvalidation = req
+    "CreateInvalidation"
+    "fixture/CreateInvalidation"
+
+testUpdateDistribution :: UpdateDistribution -> TestTree
+testUpdateDistribution = req
+    "UpdateDistribution"
+    "fixture/UpdateDistribution"
+
+testDeleteDistribution :: DeleteDistribution -> TestTree
+testDeleteDistribution = req
+    "DeleteDistribution"
+    "fixture/DeleteDistribution"
+
+testListDistributions :: ListDistributions -> TestTree
+testListDistributions = req
+    "ListDistributions"
+    "fixture/ListDistributions"
+
+-- Responses
+
+testDeleteStreamingDistributionResponse :: DeleteStreamingDistributionResponse -> TestTree
+testDeleteStreamingDistributionResponse = res
+    "DeleteStreamingDistributionResponse"
+    "fixture/DeleteStreamingDistributionResponse"
+    (Proxy :: Proxy DeleteStreamingDistribution)
+
+testUpdateStreamingDistributionResponse :: UpdateStreamingDistributionResponse -> TestTree
+testUpdateStreamingDistributionResponse = res
+    "UpdateStreamingDistributionResponse"
+    "fixture/UpdateStreamingDistributionResponse"
+    (Proxy :: Proxy UpdateStreamingDistribution)
+
+testCreateDistributionResponse :: CreateDistributionResponse -> TestTree
+testCreateDistributionResponse = res
+    "CreateDistributionResponse"
+    "fixture/CreateDistributionResponse"
+    (Proxy :: Proxy CreateDistribution)
+
+testGetDistributionConfigResponse :: GetDistributionConfigResponse -> TestTree
+testGetDistributionConfigResponse = res
+    "GetDistributionConfigResponse"
+    "fixture/GetDistributionConfigResponse"
+    (Proxy :: Proxy GetDistributionConfig)
+
+testGetDistributionResponse :: GetDistributionResponse -> TestTree
+testGetDistributionResponse = res
+    "GetDistributionResponse"
+    "fixture/GetDistributionResponse"
+    (Proxy :: Proxy GetDistribution)
+
+testDeleteCloudFrontOriginAccessIdentityResponse :: DeleteCloudFrontOriginAccessIdentityResponse -> TestTree
+testDeleteCloudFrontOriginAccessIdentityResponse = res
+    "DeleteCloudFrontOriginAccessIdentityResponse"
+    "fixture/DeleteCloudFrontOriginAccessIdentityResponse"
+    (Proxy :: Proxy DeleteCloudFrontOriginAccessIdentity)
+
+testUpdateCloudFrontOriginAccessIdentityResponse :: UpdateCloudFrontOriginAccessIdentityResponse -> TestTree
+testUpdateCloudFrontOriginAccessIdentityResponse = res
+    "UpdateCloudFrontOriginAccessIdentityResponse"
+    "fixture/UpdateCloudFrontOriginAccessIdentityResponse"
+    (Proxy :: Proxy UpdateCloudFrontOriginAccessIdentity)
+
+testListStreamingDistributionsResponse :: ListStreamingDistributionsResponse -> TestTree
+testListStreamingDistributionsResponse = res
+    "ListStreamingDistributionsResponse"
+    "fixture/ListStreamingDistributionsResponse"
+    (Proxy :: Proxy ListStreamingDistributions)
+
+testGetStreamingDistributionConfigResponse :: GetStreamingDistributionConfigResponse -> TestTree
+testGetStreamingDistributionConfigResponse = res
+    "GetStreamingDistributionConfigResponse"
+    "fixture/GetStreamingDistributionConfigResponse"
+    (Proxy :: Proxy GetStreamingDistributionConfig)
+
+testGetCloudFrontOriginAccessIdentityConfigResponse :: GetCloudFrontOriginAccessIdentityConfigResponse -> TestTree
+testGetCloudFrontOriginAccessIdentityConfigResponse = res
+    "GetCloudFrontOriginAccessIdentityConfigResponse"
+    "fixture/GetCloudFrontOriginAccessIdentityConfigResponse"
+    (Proxy :: Proxy GetCloudFrontOriginAccessIdentityConfig)
+
+testCreateStreamingDistributionResponse :: CreateStreamingDistributionResponse -> TestTree
+testCreateStreamingDistributionResponse = res
+    "CreateStreamingDistributionResponse"
+    "fixture/CreateStreamingDistributionResponse"
+    (Proxy :: Proxy CreateStreamingDistribution)
+
+testCreateCloudFrontOriginAccessIdentityResponse :: CreateCloudFrontOriginAccessIdentityResponse -> TestTree
+testCreateCloudFrontOriginAccessIdentityResponse = res
+    "CreateCloudFrontOriginAccessIdentityResponse"
+    "fixture/CreateCloudFrontOriginAccessIdentityResponse"
+    (Proxy :: Proxy CreateCloudFrontOriginAccessIdentity)
+
+testListCloudFrontOriginAccessIdentitiesResponse :: ListCloudFrontOriginAccessIdentitiesResponse -> TestTree
+testListCloudFrontOriginAccessIdentitiesResponse = res
+    "ListCloudFrontOriginAccessIdentitiesResponse"
+    "fixture/ListCloudFrontOriginAccessIdentitiesResponse"
+    (Proxy :: Proxy ListCloudFrontOriginAccessIdentities)
+
+testGetInvalidationResponse :: GetInvalidationResponse -> TestTree
+testGetInvalidationResponse = res
+    "GetInvalidationResponse"
+    "fixture/GetInvalidationResponse"
+    (Proxy :: Proxy GetInvalidation)
+
+testListInvalidationsResponse :: ListInvalidationsResponse -> TestTree
+testListInvalidationsResponse = res
+    "ListInvalidationsResponse"
+    "fixture/ListInvalidationsResponse"
+    (Proxy :: Proxy ListInvalidations)
+
+testGetStreamingDistributionResponse :: GetStreamingDistributionResponse -> TestTree
+testGetStreamingDistributionResponse = res
+    "GetStreamingDistributionResponse"
+    "fixture/GetStreamingDistributionResponse"
+    (Proxy :: Proxy GetStreamingDistribution)
+
+testGetCloudFrontOriginAccessIdentityResponse :: GetCloudFrontOriginAccessIdentityResponse -> TestTree
+testGetCloudFrontOriginAccessIdentityResponse = res
+    "GetCloudFrontOriginAccessIdentityResponse"
+    "fixture/GetCloudFrontOriginAccessIdentityResponse"
+    (Proxy :: Proxy GetCloudFrontOriginAccessIdentity)
+
+testCreateInvalidationResponse :: CreateInvalidationResponse -> TestTree
+testCreateInvalidationResponse = res
+    "CreateInvalidationResponse"
+    "fixture/CreateInvalidationResponse"
+    (Proxy :: Proxy CreateInvalidation)
+
+testUpdateDistributionResponse :: UpdateDistributionResponse -> TestTree
+testUpdateDistributionResponse = res
+    "UpdateDistributionResponse"
+    "fixture/UpdateDistributionResponse"
+    (Proxy :: Proxy UpdateDistribution)
+
+testDeleteDistributionResponse :: DeleteDistributionResponse -> TestTree
+testDeleteDistributionResponse = res
+    "DeleteDistributionResponse"
+    "fixture/DeleteDistributionResponse"
+    (Proxy :: Proxy DeleteDistribution)
+
+testListDistributionsResponse :: ListDistributionsResponse -> TestTree
+testListDistributionsResponse = res
+    "ListDistributionsResponse"
+    "fixture/ListDistributionsResponse"
+    (Proxy :: Proxy ListDistributions)
