diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.5.0`
+`1.6.0`
 
 
 ## Description
diff --git a/amazonka-s3.cabal b/amazonka-s3.cabal
--- a/amazonka-s3.cabal
+++ b/amazonka-s3.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-s3
-version:               1.5.0
+version:               1.6.0
 synopsis:              Amazon Simple Storage Service SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -7,7 +7,7 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-copyright:             Copyright (c) 2013-2017 Brendan Hay
+copyright:             Copyright (c) 2013-2018 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -94,7 +94,7 @@
         , Network.AWS.S3.ListMultipartUploads
         , Network.AWS.S3.ListObjectVersions
         , Network.AWS.S3.ListObjects
-        , Network.AWS.S3.ListObjectsV
+        , Network.AWS.S3.ListObjectsV2
         , Network.AWS.S3.ListParts
         , Network.AWS.S3.PutBucketACL
         , Network.AWS.S3.PutBucketAccelerateConfiguration
@@ -116,6 +116,7 @@
         , Network.AWS.S3.PutObjectACL
         , Network.AWS.S3.PutObjectTagging
         , Network.AWS.S3.RestoreObject
+        , Network.AWS.S3.SelectObjectContent
         , Network.AWS.S3.Types
         , Network.AWS.S3.UploadPart
         , Network.AWS.S3.UploadPartCopy
@@ -127,7 +128,7 @@
         , Network.AWS.S3.Types.Sum
 
     build-depends:
-          amazonka-core == 1.5.0.*
+          amazonka-core == 1.6.0.*
         , base          >= 4.7     && < 5
         , lens >= 4.4
         , text >= 1.1
@@ -149,8 +150,8 @@
         , Test.AWS.S3.Internal
 
     build-depends:
-          amazonka-core == 1.5.0.*
-        , amazonka-test == 1.5.0.*
+          amazonka-core == 1.6.0.*
+        , amazonka-test == 1.6.0.*
         , amazonka-s3
         , base
         , bytestring
diff --git a/fixture/ListObjectsV.yaml b/fixture/ListObjectsV.yaml
deleted file mode 100644
--- a/fixture/ListObjectsV.yaml
+++ /dev/null
diff --git a/fixture/ListObjectsV2.yaml b/fixture/ListObjectsV2.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListObjectsV2.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListObjectsV2Response.proto b/fixture/ListObjectsV2Response.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListObjectsV2Response.proto
diff --git a/fixture/ListObjectsVResponse.proto b/fixture/ListObjectsVResponse.proto
deleted file mode 100644
--- a/fixture/ListObjectsVResponse.proto
+++ /dev/null
diff --git a/fixture/SelectObjectContent.yaml b/fixture/SelectObjectContent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SelectObjectContent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  s3.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SelectObjectContentResponse.proto b/fixture/SelectObjectContentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SelectObjectContentResponse.proto
diff --git a/gen/Network/AWS/S3.hs b/gen/Network/AWS/S3.hs
--- a/gen/Network/AWS/S3.hs
+++ b/gen/Network/AWS/S3.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Network.AWS.S3
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -119,8 +119,8 @@
     -- ** DeleteBucketMetricsConfiguration
     , module Network.AWS.S3.DeleteBucketMetricsConfiguration
 
-    -- ** ListObjectsV
-    , module Network.AWS.S3.ListObjectsV
+    -- ** ListObjectsV2 (Paginated)
+    , module Network.AWS.S3.ListObjectsV2
 
     -- ** GetObject
     , module Network.AWS.S3.GetObject
@@ -164,6 +164,9 @@
     -- ** UploadPart
     , module Network.AWS.S3.UploadPart
 
+    -- ** SelectObjectContent
+    , module Network.AWS.S3.SelectObjectContent
+
     -- ** GetBucketReplication
     , module Network.AWS.S3.GetBucketReplication
 
@@ -298,6 +301,9 @@
     -- ** BucketVersioningStatus
     , BucketVersioningStatus (..)
 
+    -- ** CompressionType
+    , CompressionType (..)
+
     -- ** EncodingType
     , EncodingType (..)
 
@@ -307,6 +313,12 @@
     -- ** ExpirationStatus
     , ExpirationStatus (..)
 
+    -- ** ExpressionType
+    , ExpressionType (..)
+
+    -- ** FileHeaderInfo
+    , FileHeaderInfo (..)
+
     -- ** FilterRuleName
     , FilterRuleName (..)
 
@@ -322,6 +334,9 @@
     -- ** InventoryOptionalField
     , InventoryOptionalField (..)
 
+    -- ** JSONType
+    , JSONType (..)
+
     -- ** MFADelete
     , MFADelete (..)
 
@@ -352,6 +367,9 @@
     -- ** Protocol
     , Protocol (..)
 
+    -- ** QuoteFields
+    , QuoteFields (..)
+
     -- ** ReplicationRuleStatus
     , ReplicationRuleStatus (..)
 
@@ -364,6 +382,9 @@
     -- ** RequestPayer
     , RequestPayer (..)
 
+    -- ** RestoreRequestType
+    , RestoreRequestType (..)
+
     -- ** ServerSideEncryption
     , ServerSideEncryption (..)
 
@@ -472,6 +493,25 @@
     , crAllowedMethods
     , crAllowedOrigins
 
+    -- ** CSVInput
+    , CSVInput
+    , csvInput
+    , ciQuoteCharacter
+    , ciRecordDelimiter
+    , ciFileHeaderInfo
+    , ciQuoteEscapeCharacter
+    , ciComments
+    , ciFieldDelimiter
+
+    -- ** CSVOutput
+    , CSVOutput
+    , csvOutput
+    , coQuoteCharacter
+    , coQuoteFields
+    , coRecordDelimiter
+    , coQuoteEscapeCharacter
+    , coFieldDelimiter
+
     -- ** CommonPrefix
     , CommonPrefix
     , commonPrefix
@@ -494,6 +534,10 @@
     , cKeyPrefixEquals
     , cHTTPErrorCodeReturnedEquals
 
+    -- ** ContinuationEvent
+    , ContinuationEvent
+    , continuationEvent
+
     -- ** CopyObjectResult
     , CopyObjectResult
     , copyObjectResult
@@ -543,11 +587,22 @@
     , dEncryptionConfiguration
     , dBucket
 
+    -- ** Encryption
+    , Encryption
+    , encryption
+    , eKMSKeyId
+    , eKMSContext
+    , eEncryptionType
+
     -- ** EncryptionConfiguration
     , EncryptionConfiguration
     , encryptionConfiguration
     , ecReplicaKMSKeyId
 
+    -- ** EndEvent
+    , EndEvent
+    , endEvent
+
     -- ** ErrorDocument
     , ErrorDocument
     , errorDocument
@@ -590,6 +645,13 @@
     , iDisplayName
     , iId
 
+    -- ** InputSerialization
+    , InputSerialization
+    , inputSerialization
+    , isJSON
+    , isCSV
+    , isCompressionType
+
     -- ** InventoryConfiguration
     , InventoryConfiguration
     , inventoryConfiguration
@@ -631,6 +693,16 @@
     , inventorySchedule
     , isFrequency
 
+    -- ** JSONInput
+    , JSONInput
+    , jsonInput
+    , jiType
+
+    -- ** JSONOutput
+    , JSONOutput
+    , jsonOutput
+    , joRecordDelimiter
+
     -- ** LambdaFunctionConfiguration
     , LambdaFunctionConfiguration
     , lambdaFunctionConfiguration
@@ -675,10 +747,16 @@
     -- ** LoggingEnabled
     , LoggingEnabled
     , loggingEnabled
-    , leTargetBucket
     , leTargetGrants
+    , leTargetBucket
     , leTargetPrefix
 
+    -- ** MetadataEntry
+    , MetadataEntry
+    , metadataEntry
+    , meValue
+    , meName
+
     -- ** MetricsAndOperator
     , MetricsAndOperator
     , metricsAndOperator
@@ -759,6 +837,17 @@
     , ovStorageClass
     , ovLastModified
 
+    -- ** OutputLocation
+    , OutputLocation
+    , outputLocation
+    , olS3
+
+    -- ** OutputSerialization
+    , OutputSerialization
+    , outputSerialization
+    , osJSON
+    , osCSV
+
     -- ** Owner
     , Owner
     , owner
@@ -773,6 +862,18 @@
     , pPartNumber
     , pLastModified
 
+    -- ** Progress
+    , Progress
+    , progress
+    , pBytesReturned
+    , pBytesScanned
+    , pBytesProcessed
+
+    -- ** ProgressEvent
+    , ProgressEvent
+    , progressEvent
+    , peDetails
+
     -- ** QueueConfiguration
     , QueueConfiguration
     , queueConfiguration
@@ -781,6 +882,11 @@
     , qcQueueARN
     , qcEvents
 
+    -- ** RecordsEvent
+    , RecordsEvent
+    , recordsEvent
+    , rePayload
+
     -- ** Redirect
     , Redirect
     , redirect
@@ -816,11 +922,21 @@
     , requestPaymentConfiguration
     , rpcPayer
 
+    -- ** RequestProgress
+    , RequestProgress
+    , requestProgress
+    , rpEnabled
+
     -- ** RestoreRequest
     , RestoreRequest
     , restoreRequest
-    , rrGlacierJobParameters
     , rrDays
+    , rrSelectParameters
+    , rrOutputLocation
+    , rrTier
+    , rrGlacierJobParameters
+    , rrType
+    , rrDescription
 
     -- ** RoutingRule
     , RoutingRule
@@ -833,6 +949,18 @@
     , s3KeyFilter
     , skfFilterRules
 
+    -- ** S3Location
+    , S3Location
+    , s3Location
+    , slCannedACL
+    , slAccessControlList
+    , slUserMetadata
+    , slEncryption
+    , slStorageClass
+    , slTagging
+    , slBucketName
+    , slPrefix
+
     -- ** S3ServiceError
     , S3ServiceError
     , s3ServiceError
@@ -850,6 +978,23 @@
     , SSES3
     , sSES3
 
+    -- ** SelectObjectContentEventStream
+    , SelectObjectContentEventStream
+    , selectObjectContentEventStream
+    , socesProgress
+    , socesRecords
+    , socesCont
+    , socesStats
+    , socesEnd
+
+    -- ** SelectParameters
+    , SelectParameters
+    , selectParameters
+    , spInputSerialization
+    , spExpressionType
+    , spExpression
+    , spOutputSerialization
+
     -- ** ServerSideEncryptionByDefault
     , ServerSideEncryptionByDefault
     , serverSideEncryptionByDefault
@@ -876,6 +1021,18 @@
     , sseKMSEncryptedObjects
     , skeoStatus
 
+    -- ** Stats
+    , Stats
+    , stats
+    , sBytesReturned
+    , sBytesScanned
+    , sBytesProcessed
+
+    -- ** StatsEvent
+    , StatsEvent
+    , statsEvent
+    , seDetails
+
     -- ** StorageClassAnalysis
     , StorageClassAnalysis
     , storageClassAnalysis
@@ -983,7 +1140,7 @@
 import Network.AWS.S3.ListBuckets
 import Network.AWS.S3.ListMultipartUploads
 import Network.AWS.S3.ListObjects
-import Network.AWS.S3.ListObjectsV
+import Network.AWS.S3.ListObjectsV2
 import Network.AWS.S3.ListObjectVersions
 import Network.AWS.S3.ListParts
 import Network.AWS.S3.PutBucketAccelerateConfiguration
@@ -1006,6 +1163,7 @@
 import Network.AWS.S3.PutObjectACL
 import Network.AWS.S3.PutObjectTagging
 import Network.AWS.S3.RestoreObject
+import Network.AWS.S3.SelectObjectContent
 import Network.AWS.S3.Types
 import Network.AWS.S3.UploadPart
 import Network.AWS.S3.UploadPartCopy
diff --git a/gen/Network/AWS/S3/AbortMultipartUpload.hs b/gen/Network/AWS/S3/AbortMultipartUpload.hs
--- a/gen/Network/AWS/S3/AbortMultipartUpload.hs
+++ b/gen/Network/AWS/S3/AbortMultipartUpload.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.AbortMultipartUpload
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -76,28 +76,28 @@
     -> AbortMultipartUpload
 abortMultipartUpload pBucket_ pKey_ pUploadId_ =
   AbortMultipartUpload'
-  { _amuRequestPayer = Nothing
-  , _amuBucket = pBucket_
-  , _amuKey = pKey_
-  , _amuUploadId = pUploadId_
-  }
+    { _amuRequestPayer = Nothing
+    , _amuBucket = pBucket_
+    , _amuKey = pKey_
+    , _amuUploadId = pUploadId_
+    }
 
 
 -- | Undocumented member.
 amuRequestPayer :: Lens' AbortMultipartUpload (Maybe RequestPayer)
-amuRequestPayer = lens _amuRequestPayer (\ s a -> s{_amuRequestPayer = a});
+amuRequestPayer = lens _amuRequestPayer (\ s a -> s{_amuRequestPayer = a})
 
 -- | Undocumented member.
 amuBucket :: Lens' AbortMultipartUpload BucketName
-amuBucket = lens _amuBucket (\ s a -> s{_amuBucket = a});
+amuBucket = lens _amuBucket (\ s a -> s{_amuBucket = a})
 
 -- | Undocumented member.
 amuKey :: Lens' AbortMultipartUpload ObjectKey
-amuKey = lens _amuKey (\ s a -> s{_amuKey = a});
+amuKey = lens _amuKey (\ s a -> s{_amuKey = a})
 
 -- | Undocumented member.
 amuUploadId :: Lens' AbortMultipartUpload Text
-amuUploadId = lens _amuUploadId (\ s a -> s{_amuUploadId = a});
+amuUploadId = lens _amuUploadId (\ s a -> s{_amuUploadId = a})
 
 instance AWSRequest AbortMultipartUpload where
         type Rs AbortMultipartUpload =
@@ -145,15 +145,15 @@
     -> AbortMultipartUploadResponse
 abortMultipartUploadResponse pResponseStatus_ =
   AbortMultipartUploadResponse'
-  {_amursRequestCharged = Nothing, _amursResponseStatus = pResponseStatus_}
+    {_amursRequestCharged = Nothing, _amursResponseStatus = pResponseStatus_}
 
 
 -- | Undocumented member.
 amursRequestCharged :: Lens' AbortMultipartUploadResponse (Maybe RequestCharged)
-amursRequestCharged = lens _amursRequestCharged (\ s a -> s{_amursRequestCharged = a});
+amursRequestCharged = lens _amursRequestCharged (\ s a -> s{_amursRequestCharged = a})
 
 -- | -- | The response status code.
 amursResponseStatus :: Lens' AbortMultipartUploadResponse Int
-amursResponseStatus = lens _amursResponseStatus (\ s a -> s{_amursResponseStatus = a});
+amursResponseStatus = lens _amursResponseStatus (\ s a -> s{_amursResponseStatus = a})
 
 instance NFData AbortMultipartUploadResponse where
diff --git a/gen/Network/AWS/S3/CompleteMultipartUpload.hs b/gen/Network/AWS/S3/CompleteMultipartUpload.hs
--- a/gen/Network/AWS/S3/CompleteMultipartUpload.hs
+++ b/gen/Network/AWS/S3/CompleteMultipartUpload.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.CompleteMultipartUpload
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -84,33 +84,33 @@
     -> CompleteMultipartUpload
 completeMultipartUpload pBucket_ pKey_ pUploadId_ =
   CompleteMultipartUpload'
-  { _cRequestPayer = Nothing
-  , _cMultipartUpload = Nothing
-  , _cBucket = pBucket_
-  , _cKey = pKey_
-  , _cUploadId = pUploadId_
-  }
+    { _cRequestPayer = Nothing
+    , _cMultipartUpload = Nothing
+    , _cBucket = pBucket_
+    , _cKey = pKey_
+    , _cUploadId = pUploadId_
+    }
 
 
 -- | Undocumented member.
 cRequestPayer :: Lens' CompleteMultipartUpload (Maybe RequestPayer)
-cRequestPayer = lens _cRequestPayer (\ s a -> s{_cRequestPayer = a});
+cRequestPayer = lens _cRequestPayer (\ s a -> s{_cRequestPayer = a})
 
 -- | Undocumented member.
 cMultipartUpload :: Lens' CompleteMultipartUpload (Maybe CompletedMultipartUpload)
-cMultipartUpload = lens _cMultipartUpload (\ s a -> s{_cMultipartUpload = a});
+cMultipartUpload = lens _cMultipartUpload (\ s a -> s{_cMultipartUpload = a})
 
 -- | Undocumented member.
 cBucket :: Lens' CompleteMultipartUpload BucketName
-cBucket = lens _cBucket (\ s a -> s{_cBucket = a});
+cBucket = lens _cBucket (\ s a -> s{_cBucket = a})
 
 -- | Undocumented member.
 cKey :: Lens' CompleteMultipartUpload ObjectKey
-cKey = lens _cKey (\ s a -> s{_cKey = a});
+cKey = lens _cKey (\ s a -> s{_cKey = a})
 
 -- | Undocumented member.
 cUploadId :: Lens' CompleteMultipartUpload Text
-cUploadId = lens _cUploadId (\ s a -> s{_cUploadId = a});
+cUploadId = lens _cUploadId (\ s a -> s{_cUploadId = a})
 
 instance AWSRequest CompleteMultipartUpload where
         type Rs CompleteMultipartUpload =
@@ -197,57 +197,57 @@
     -> CompleteMultipartUploadResponse
 completeMultipartUploadResponse pResponseStatus_ =
   CompleteMultipartUploadResponse'
-  { _crsRequestCharged = Nothing
-  , _crsETag = Nothing
-  , _crsVersionId = Nothing
-  , _crsLocation = Nothing
-  , _crsExpiration = Nothing
-  , _crsBucket = Nothing
-  , _crsKey = Nothing
-  , _crsSSEKMSKeyId = Nothing
-  , _crsServerSideEncryption = Nothing
-  , _crsResponseStatus = pResponseStatus_
-  }
+    { _crsRequestCharged = Nothing
+    , _crsETag = Nothing
+    , _crsVersionId = Nothing
+    , _crsLocation = Nothing
+    , _crsExpiration = Nothing
+    , _crsBucket = Nothing
+    , _crsKey = Nothing
+    , _crsSSEKMSKeyId = Nothing
+    , _crsServerSideEncryption = Nothing
+    , _crsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 crsRequestCharged :: Lens' CompleteMultipartUploadResponse (Maybe RequestCharged)
-crsRequestCharged = lens _crsRequestCharged (\ s a -> s{_crsRequestCharged = a});
+crsRequestCharged = lens _crsRequestCharged (\ s a -> s{_crsRequestCharged = a})
 
 -- | Entity tag of the object.
 crsETag :: Lens' CompleteMultipartUploadResponse (Maybe ETag)
-crsETag = lens _crsETag (\ s a -> s{_crsETag = a});
+crsETag = lens _crsETag (\ s a -> s{_crsETag = a})
 
 -- | Version of the object.
 crsVersionId :: Lens' CompleteMultipartUploadResponse (Maybe ObjectVersionId)
-crsVersionId = lens _crsVersionId (\ s a -> s{_crsVersionId = a});
+crsVersionId = lens _crsVersionId (\ s a -> s{_crsVersionId = a})
 
 -- | Undocumented member.
 crsLocation :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-crsLocation = lens _crsLocation (\ s a -> s{_crsLocation = a});
+crsLocation = lens _crsLocation (\ s a -> s{_crsLocation = a})
 
 -- | If the object expiration is configured, this will contain the expiration date (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.
 crsExpiration :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-crsExpiration = lens _crsExpiration (\ s a -> s{_crsExpiration = a});
+crsExpiration = lens _crsExpiration (\ s a -> s{_crsExpiration = a})
 
 -- | Undocumented member.
 crsBucket :: Lens' CompleteMultipartUploadResponse (Maybe BucketName)
-crsBucket = lens _crsBucket (\ s a -> s{_crsBucket = a});
+crsBucket = lens _crsBucket (\ s a -> s{_crsBucket = a})
 
 -- | Undocumented member.
 crsKey :: Lens' CompleteMultipartUploadResponse (Maybe ObjectKey)
-crsKey = lens _crsKey (\ s a -> s{_crsKey = a});
+crsKey = lens _crsKey (\ s a -> s{_crsKey = a})
 
 -- | If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 crsSSEKMSKeyId :: Lens' CompleteMultipartUploadResponse (Maybe Text)
-crsSSEKMSKeyId = lens _crsSSEKMSKeyId (\ s a -> s{_crsSSEKMSKeyId = a}) . mapping _Sensitive;
+crsSSEKMSKeyId = lens _crsSSEKMSKeyId (\ s a -> s{_crsSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 crsServerSideEncryption :: Lens' CompleteMultipartUploadResponse (Maybe ServerSideEncryption)
-crsServerSideEncryption = lens _crsServerSideEncryption (\ s a -> s{_crsServerSideEncryption = a});
+crsServerSideEncryption = lens _crsServerSideEncryption (\ s a -> s{_crsServerSideEncryption = a})
 
 -- | -- | The response status code.
 crsResponseStatus :: Lens' CompleteMultipartUploadResponse Int
-crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a});
+crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a})
 
 instance NFData CompleteMultipartUploadResponse where
diff --git a/gen/Network/AWS/S3/CopyObject.hs b/gen/Network/AWS/S3/CopyObject.hs
--- a/gen/Network/AWS/S3/CopyObject.hs
+++ b/gen/Network/AWS/S3/CopyObject.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.CopyObject
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -196,173 +196,173 @@
     -> CopyObject
 copyObject pBucket_ pCopySource_ pKey_ =
   CopyObject'
-  { _coCopySourceIfModifiedSince = Nothing
-  , _coCopySourceIfUnmodifiedSince = Nothing
-  , _coCopySourceSSECustomerKeyMD5 = Nothing
-  , _coTaggingDirective = Nothing
-  , _coMetadataDirective = Nothing
-  , _coExpires = Nothing
-  , _coGrantReadACP = Nothing
-  , _coCopySourceIfNoneMatch = Nothing
-  , _coSSECustomerAlgorithm = Nothing
-  , _coSSECustomerKey = Nothing
-  , _coRequestPayer = Nothing
-  , _coGrantWriteACP = Nothing
-  , _coCopySourceIfMatch = Nothing
-  , _coWebsiteRedirectLocation = Nothing
-  , _coGrantRead = Nothing
-  , _coStorageClass = Nothing
-  , _coSSECustomerKeyMD5 = Nothing
-  , _coSSEKMSKeyId = Nothing
-  , _coGrantFullControl = Nothing
-  , _coContentEncoding = Nothing
-  , _coTagging = Nothing
-  , _coMetadata = mempty
-  , _coCacheControl = Nothing
-  , _coContentLanguage = Nothing
-  , _coCopySourceSSECustomerKey = Nothing
-  , _coCopySourceSSECustomerAlgorithm = Nothing
-  , _coACL = Nothing
-  , _coContentDisposition = Nothing
-  , _coServerSideEncryption = Nothing
-  , _coContentType = Nothing
-  , _coBucket = pBucket_
-  , _coCopySource = pCopySource_
-  , _coKey = pKey_
-  }
+    { _coCopySourceIfModifiedSince = Nothing
+    , _coCopySourceIfUnmodifiedSince = Nothing
+    , _coCopySourceSSECustomerKeyMD5 = Nothing
+    , _coTaggingDirective = Nothing
+    , _coMetadataDirective = Nothing
+    , _coExpires = Nothing
+    , _coGrantReadACP = Nothing
+    , _coCopySourceIfNoneMatch = Nothing
+    , _coSSECustomerAlgorithm = Nothing
+    , _coSSECustomerKey = Nothing
+    , _coRequestPayer = Nothing
+    , _coGrantWriteACP = Nothing
+    , _coCopySourceIfMatch = Nothing
+    , _coWebsiteRedirectLocation = Nothing
+    , _coGrantRead = Nothing
+    , _coStorageClass = Nothing
+    , _coSSECustomerKeyMD5 = Nothing
+    , _coSSEKMSKeyId = Nothing
+    , _coGrantFullControl = Nothing
+    , _coContentEncoding = Nothing
+    , _coTagging = Nothing
+    , _coMetadata = mempty
+    , _coCacheControl = Nothing
+    , _coContentLanguage = Nothing
+    , _coCopySourceSSECustomerKey = Nothing
+    , _coCopySourceSSECustomerAlgorithm = Nothing
+    , _coACL = Nothing
+    , _coContentDisposition = Nothing
+    , _coServerSideEncryption = Nothing
+    , _coContentType = Nothing
+    , _coBucket = pBucket_
+    , _coCopySource = pCopySource_
+    , _coKey = pKey_
+    }
 
 
 -- | Copies the object if it has been modified since the specified time.
 coCopySourceIfModifiedSince :: Lens' CopyObject (Maybe UTCTime)
-coCopySourceIfModifiedSince = lens _coCopySourceIfModifiedSince (\ s a -> s{_coCopySourceIfModifiedSince = a}) . mapping _Time;
+coCopySourceIfModifiedSince = lens _coCopySourceIfModifiedSince (\ s a -> s{_coCopySourceIfModifiedSince = a}) . mapping _Time
 
 -- | Copies the object if it hasn't been modified since the specified time.
 coCopySourceIfUnmodifiedSince :: Lens' CopyObject (Maybe UTCTime)
-coCopySourceIfUnmodifiedSince = lens _coCopySourceIfUnmodifiedSince (\ s a -> s{_coCopySourceIfUnmodifiedSince = a}) . mapping _Time;
+coCopySourceIfUnmodifiedSince = lens _coCopySourceIfUnmodifiedSince (\ s a -> s{_coCopySourceIfUnmodifiedSince = a}) . mapping _Time
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 coCopySourceSSECustomerKeyMD5 :: Lens' CopyObject (Maybe Text)
-coCopySourceSSECustomerKeyMD5 = lens _coCopySourceSSECustomerKeyMD5 (\ s a -> s{_coCopySourceSSECustomerKeyMD5 = a});
+coCopySourceSSECustomerKeyMD5 = lens _coCopySourceSSECustomerKeyMD5 (\ s a -> s{_coCopySourceSSECustomerKeyMD5 = a})
 
 -- | Specifies whether the object tag-set are copied from the source object or replaced with tag-set provided in the request.
 coTaggingDirective :: Lens' CopyObject (Maybe TaggingDirective)
-coTaggingDirective = lens _coTaggingDirective (\ s a -> s{_coTaggingDirective = a});
+coTaggingDirective = lens _coTaggingDirective (\ s a -> s{_coTaggingDirective = a})
 
 -- | Specifies whether the metadata is copied from the source object or replaced with metadata provided in the request.
 coMetadataDirective :: Lens' CopyObject (Maybe MetadataDirective)
-coMetadataDirective = lens _coMetadataDirective (\ s a -> s{_coMetadataDirective = a});
+coMetadataDirective = lens _coMetadataDirective (\ s a -> s{_coMetadataDirective = a})
 
 -- | The date and time at which the object is no longer cacheable.
 coExpires :: Lens' CopyObject (Maybe UTCTime)
-coExpires = lens _coExpires (\ s a -> s{_coExpires = a}) . mapping _Time;
+coExpires = lens _coExpires (\ s a -> s{_coExpires = a}) . mapping _Time
 
 -- | Allows grantee to read the object ACL.
 coGrantReadACP :: Lens' CopyObject (Maybe Text)
-coGrantReadACP = lens _coGrantReadACP (\ s a -> s{_coGrantReadACP = a});
+coGrantReadACP = lens _coGrantReadACP (\ s a -> s{_coGrantReadACP = a})
 
 -- | Copies the object if its entity tag (ETag) is different than the specified ETag.
 coCopySourceIfNoneMatch :: Lens' CopyObject (Maybe Text)
-coCopySourceIfNoneMatch = lens _coCopySourceIfNoneMatch (\ s a -> s{_coCopySourceIfNoneMatch = a});
+coCopySourceIfNoneMatch = lens _coCopySourceIfNoneMatch (\ s a -> s{_coCopySourceIfNoneMatch = a})
 
 -- | Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 coSSECustomerAlgorithm :: Lens' CopyObject (Maybe Text)
-coSSECustomerAlgorithm = lens _coSSECustomerAlgorithm (\ s a -> s{_coSSECustomerAlgorithm = a});
+coSSECustomerAlgorithm = lens _coSSECustomerAlgorithm (\ s a -> s{_coSSECustomerAlgorithm = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm header.
 coSSECustomerKey :: Lens' CopyObject (Maybe Text)
-coSSECustomerKey = lens _coSSECustomerKey (\ s a -> s{_coSSECustomerKey = a}) . mapping _Sensitive;
+coSSECustomerKey = lens _coSSECustomerKey (\ s a -> s{_coSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Undocumented member.
 coRequestPayer :: Lens' CopyObject (Maybe RequestPayer)
-coRequestPayer = lens _coRequestPayer (\ s a -> s{_coRequestPayer = a});
+coRequestPayer = lens _coRequestPayer (\ s a -> s{_coRequestPayer = a})
 
 -- | Allows grantee to write the ACL for the applicable object.
 coGrantWriteACP :: Lens' CopyObject (Maybe Text)
-coGrantWriteACP = lens _coGrantWriteACP (\ s a -> s{_coGrantWriteACP = a});
+coGrantWriteACP = lens _coGrantWriteACP (\ s a -> s{_coGrantWriteACP = a})
 
 -- | Copies the object if its entity tag (ETag) matches the specified tag.
 coCopySourceIfMatch :: Lens' CopyObject (Maybe Text)
-coCopySourceIfMatch = lens _coCopySourceIfMatch (\ s a -> s{_coCopySourceIfMatch = a});
+coCopySourceIfMatch = lens _coCopySourceIfMatch (\ s a -> s{_coCopySourceIfMatch = a})
 
 -- | If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.
 coWebsiteRedirectLocation :: Lens' CopyObject (Maybe Text)
-coWebsiteRedirectLocation = lens _coWebsiteRedirectLocation (\ s a -> s{_coWebsiteRedirectLocation = a});
+coWebsiteRedirectLocation = lens _coWebsiteRedirectLocation (\ s a -> s{_coWebsiteRedirectLocation = a})
 
 -- | Allows grantee to read the object data and its metadata.
 coGrantRead :: Lens' CopyObject (Maybe Text)
-coGrantRead = lens _coGrantRead (\ s a -> s{_coGrantRead = a});
+coGrantRead = lens _coGrantRead (\ s a -> s{_coGrantRead = a})
 
 -- | The type of storage to use for the object. Defaults to 'STANDARD'.
 coStorageClass :: Lens' CopyObject (Maybe StorageClass)
-coStorageClass = lens _coStorageClass (\ s a -> s{_coStorageClass = a});
+coStorageClass = lens _coStorageClass (\ s a -> s{_coStorageClass = a})
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 coSSECustomerKeyMD5 :: Lens' CopyObject (Maybe Text)
-coSSECustomerKeyMD5 = lens _coSSECustomerKeyMD5 (\ s a -> s{_coSSECustomerKeyMD5 = a});
+coSSECustomerKeyMD5 = lens _coSSECustomerKeyMD5 (\ s a -> s{_coSSECustomerKeyMD5 = a})
 
 -- | Specifies the AWS KMS key ID to use for object encryption. All GET and PUT requests for an object protected by AWS KMS will fail if not made via SSL or using SigV4. Documentation on configuring any of the officially supported AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
 coSSEKMSKeyId :: Lens' CopyObject (Maybe Text)
-coSSEKMSKeyId = lens _coSSEKMSKeyId (\ s a -> s{_coSSEKMSKeyId = a}) . mapping _Sensitive;
+coSSEKMSKeyId = lens _coSSEKMSKeyId (\ s a -> s{_coSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
 coGrantFullControl :: Lens' CopyObject (Maybe Text)
-coGrantFullControl = lens _coGrantFullControl (\ s a -> s{_coGrantFullControl = a});
+coGrantFullControl = lens _coGrantFullControl (\ s a -> s{_coGrantFullControl = a})
 
 -- | Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field.
 coContentEncoding :: Lens' CopyObject (Maybe Text)
-coContentEncoding = lens _coContentEncoding (\ s a -> s{_coContentEncoding = a});
+coContentEncoding = lens _coContentEncoding (\ s a -> s{_coContentEncoding = a})
 
 -- | The tag-set for the object destination object this value must be used in conjunction with the TaggingDirective. The tag-set must be encoded as URL Query parameters
 coTagging :: Lens' CopyObject (Maybe Text)
-coTagging = lens _coTagging (\ s a -> s{_coTagging = a});
+coTagging = lens _coTagging (\ s a -> s{_coTagging = a})
 
 -- | A map of metadata to store with the object in S3.
 coMetadata :: Lens' CopyObject (HashMap Text Text)
-coMetadata = lens _coMetadata (\ s a -> s{_coMetadata = a}) . _Map;
+coMetadata = lens _coMetadata (\ s a -> s{_coMetadata = a}) . _Map
 
 -- | Specifies caching behavior along the request/reply chain.
 coCacheControl :: Lens' CopyObject (Maybe Text)
-coCacheControl = lens _coCacheControl (\ s a -> s{_coCacheControl = a});
+coCacheControl = lens _coCacheControl (\ s a -> s{_coCacheControl = a})
 
 -- | The language the content is in.
 coContentLanguage :: Lens' CopyObject (Maybe Text)
-coContentLanguage = lens _coContentLanguage (\ s a -> s{_coContentLanguage = a});
+coContentLanguage = lens _coContentLanguage (\ s a -> s{_coContentLanguage = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use to decrypt the source object. The encryption key provided in this header must be one that was used when the source object was created.
 coCopySourceSSECustomerKey :: Lens' CopyObject (Maybe Text)
-coCopySourceSSECustomerKey = lens _coCopySourceSSECustomerKey (\ s a -> s{_coCopySourceSSECustomerKey = a}) . mapping _Sensitive;
+coCopySourceSSECustomerKey = lens _coCopySourceSSECustomerKey (\ s a -> s{_coCopySourceSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Specifies the algorithm to use when decrypting the source object (e.g., AES256).
 coCopySourceSSECustomerAlgorithm :: Lens' CopyObject (Maybe Text)
-coCopySourceSSECustomerAlgorithm = lens _coCopySourceSSECustomerAlgorithm (\ s a -> s{_coCopySourceSSECustomerAlgorithm = a});
+coCopySourceSSECustomerAlgorithm = lens _coCopySourceSSECustomerAlgorithm (\ s a -> s{_coCopySourceSSECustomerAlgorithm = a})
 
 -- | The canned ACL to apply to the object.
 coACL :: Lens' CopyObject (Maybe ObjectCannedACL)
-coACL = lens _coACL (\ s a -> s{_coACL = a});
+coACL = lens _coACL (\ s a -> s{_coACL = a})
 
 -- | Specifies presentational information for the object.
 coContentDisposition :: Lens' CopyObject (Maybe Text)
-coContentDisposition = lens _coContentDisposition (\ s a -> s{_coContentDisposition = a});
+coContentDisposition = lens _coContentDisposition (\ s a -> s{_coContentDisposition = a})
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 coServerSideEncryption :: Lens' CopyObject (Maybe ServerSideEncryption)
-coServerSideEncryption = lens _coServerSideEncryption (\ s a -> s{_coServerSideEncryption = a});
+coServerSideEncryption = lens _coServerSideEncryption (\ s a -> s{_coServerSideEncryption = a})
 
 -- | A standard MIME type describing the format of the object data.
 coContentType :: Lens' CopyObject (Maybe Text)
-coContentType = lens _coContentType (\ s a -> s{_coContentType = a});
+coContentType = lens _coContentType (\ s a -> s{_coContentType = a})
 
 -- | Undocumented member.
 coBucket :: Lens' CopyObject BucketName
-coBucket = lens _coBucket (\ s a -> s{_coBucket = a});
+coBucket = lens _coBucket (\ s a -> s{_coBucket = a})
 
 -- | The name of the source bucket and key name of the source object, separated by a slash (/). Must be URL-encoded.
 coCopySource :: Lens' CopyObject Text
-coCopySource = lens _coCopySource (\ s a -> s{_coCopySource = a});
+coCopySource = lens _coCopySource (\ s a -> s{_coCopySource = a})
 
 -- | Undocumented member.
 coKey :: Lens' CopyObject ObjectKey
-coKey = lens _coKey (\ s a -> s{_coKey = a});
+coKey = lens _coKey (\ s a -> s{_coKey = a})
 
 instance AWSRequest CopyObject where
         type Rs CopyObject = CopyObjectResponse
@@ -488,57 +488,57 @@
     -> CopyObjectResponse
 copyObjectResponse pResponseStatus_ =
   CopyObjectResponse'
-  { _corsRequestCharged = Nothing
-  , _corsVersionId = Nothing
-  , _corsExpiration = Nothing
-  , _corsSSECustomerAlgorithm = Nothing
-  , _corsCopySourceVersionId = Nothing
-  , _corsSSECustomerKeyMD5 = Nothing
-  , _corsSSEKMSKeyId = Nothing
-  , _corsServerSideEncryption = Nothing
-  , _corsCopyObjectResult = Nothing
-  , _corsResponseStatus = pResponseStatus_
-  }
+    { _corsRequestCharged = Nothing
+    , _corsVersionId = Nothing
+    , _corsExpiration = Nothing
+    , _corsSSECustomerAlgorithm = Nothing
+    , _corsCopySourceVersionId = Nothing
+    , _corsSSECustomerKeyMD5 = Nothing
+    , _corsSSEKMSKeyId = Nothing
+    , _corsServerSideEncryption = Nothing
+    , _corsCopyObjectResult = Nothing
+    , _corsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 corsRequestCharged :: Lens' CopyObjectResponse (Maybe RequestCharged)
-corsRequestCharged = lens _corsRequestCharged (\ s a -> s{_corsRequestCharged = a});
+corsRequestCharged = lens _corsRequestCharged (\ s a -> s{_corsRequestCharged = a})
 
 -- | Version ID of the newly created copy.
 corsVersionId :: Lens' CopyObjectResponse (Maybe ObjectVersionId)
-corsVersionId = lens _corsVersionId (\ s a -> s{_corsVersionId = a});
+corsVersionId = lens _corsVersionId (\ s a -> s{_corsVersionId = a})
 
 -- | If the object expiration is configured, the response includes this header.
 corsExpiration :: Lens' CopyObjectResponse (Maybe Text)
-corsExpiration = lens _corsExpiration (\ s a -> s{_corsExpiration = a});
+corsExpiration = lens _corsExpiration (\ s a -> s{_corsExpiration = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 corsSSECustomerAlgorithm :: Lens' CopyObjectResponse (Maybe Text)
-corsSSECustomerAlgorithm = lens _corsSSECustomerAlgorithm (\ s a -> s{_corsSSECustomerAlgorithm = a});
+corsSSECustomerAlgorithm = lens _corsSSECustomerAlgorithm (\ s a -> s{_corsSSECustomerAlgorithm = a})
 
 -- | Undocumented member.
 corsCopySourceVersionId :: Lens' CopyObjectResponse (Maybe Text)
-corsCopySourceVersionId = lens _corsCopySourceVersionId (\ s a -> s{_corsCopySourceVersionId = a});
+corsCopySourceVersionId = lens _corsCopySourceVersionId (\ s a -> s{_corsCopySourceVersionId = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header to provide round trip message integrity verification of the customer-provided encryption key.
 corsSSECustomerKeyMD5 :: Lens' CopyObjectResponse (Maybe Text)
-corsSSECustomerKeyMD5 = lens _corsSSECustomerKeyMD5 (\ s a -> s{_corsSSECustomerKeyMD5 = a});
+corsSSECustomerKeyMD5 = lens _corsSSECustomerKeyMD5 (\ s a -> s{_corsSSECustomerKeyMD5 = a})
 
 -- | If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 corsSSEKMSKeyId :: Lens' CopyObjectResponse (Maybe Text)
-corsSSEKMSKeyId = lens _corsSSEKMSKeyId (\ s a -> s{_corsSSEKMSKeyId = a}) . mapping _Sensitive;
+corsSSEKMSKeyId = lens _corsSSEKMSKeyId (\ s a -> s{_corsSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 corsServerSideEncryption :: Lens' CopyObjectResponse (Maybe ServerSideEncryption)
-corsServerSideEncryption = lens _corsServerSideEncryption (\ s a -> s{_corsServerSideEncryption = a});
+corsServerSideEncryption = lens _corsServerSideEncryption (\ s a -> s{_corsServerSideEncryption = a})
 
 -- | Undocumented member.
 corsCopyObjectResult :: Lens' CopyObjectResponse (Maybe CopyObjectResult)
-corsCopyObjectResult = lens _corsCopyObjectResult (\ s a -> s{_corsCopyObjectResult = a});
+corsCopyObjectResult = lens _corsCopyObjectResult (\ s a -> s{_corsCopyObjectResult = a})
 
 -- | -- | The response status code.
 corsResponseStatus :: Lens' CopyObjectResponse Int
-corsResponseStatus = lens _corsResponseStatus (\ s a -> s{_corsResponseStatus = a});
+corsResponseStatus = lens _corsResponseStatus (\ s a -> s{_corsResponseStatus = a})
 
 instance NFData CopyObjectResponse where
diff --git a/gen/Network/AWS/S3/CreateBucket.hs b/gen/Network/AWS/S3/CreateBucket.hs
--- a/gen/Network/AWS/S3/CreateBucket.hs
+++ b/gen/Network/AWS/S3/CreateBucket.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.CreateBucket
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -86,48 +86,48 @@
     -> CreateBucket
 createBucket pBucket_ =
   CreateBucket'
-  { _cbGrantReadACP = Nothing
-  , _cbGrantWriteACP = Nothing
-  , _cbGrantRead = Nothing
-  , _cbGrantFullControl = Nothing
-  , _cbCreateBucketConfiguration = Nothing
-  , _cbGrantWrite = Nothing
-  , _cbACL = Nothing
-  , _cbBucket = pBucket_
-  }
+    { _cbGrantReadACP = Nothing
+    , _cbGrantWriteACP = Nothing
+    , _cbGrantRead = Nothing
+    , _cbGrantFullControl = Nothing
+    , _cbCreateBucketConfiguration = Nothing
+    , _cbGrantWrite = Nothing
+    , _cbACL = Nothing
+    , _cbBucket = pBucket_
+    }
 
 
 -- | Allows grantee to read the bucket ACL.
 cbGrantReadACP :: Lens' CreateBucket (Maybe Text)
-cbGrantReadACP = lens _cbGrantReadACP (\ s a -> s{_cbGrantReadACP = a});
+cbGrantReadACP = lens _cbGrantReadACP (\ s a -> s{_cbGrantReadACP = a})
 
 -- | Allows grantee to write the ACL for the applicable bucket.
 cbGrantWriteACP :: Lens' CreateBucket (Maybe Text)
-cbGrantWriteACP = lens _cbGrantWriteACP (\ s a -> s{_cbGrantWriteACP = a});
+cbGrantWriteACP = lens _cbGrantWriteACP (\ s a -> s{_cbGrantWriteACP = a})
 
 -- | Allows grantee to list the objects in the bucket.
 cbGrantRead :: Lens' CreateBucket (Maybe Text)
-cbGrantRead = lens _cbGrantRead (\ s a -> s{_cbGrantRead = a});
+cbGrantRead = lens _cbGrantRead (\ s a -> s{_cbGrantRead = a})
 
 -- | Allows grantee the read, write, read ACP, and write ACP permissions on the bucket.
 cbGrantFullControl :: Lens' CreateBucket (Maybe Text)
-cbGrantFullControl = lens _cbGrantFullControl (\ s a -> s{_cbGrantFullControl = a});
+cbGrantFullControl = lens _cbGrantFullControl (\ s a -> s{_cbGrantFullControl = a})
 
 -- | Undocumented member.
 cbCreateBucketConfiguration :: Lens' CreateBucket (Maybe CreateBucketConfiguration)
-cbCreateBucketConfiguration = lens _cbCreateBucketConfiguration (\ s a -> s{_cbCreateBucketConfiguration = a});
+cbCreateBucketConfiguration = lens _cbCreateBucketConfiguration (\ s a -> s{_cbCreateBucketConfiguration = a})
 
 -- | Allows grantee to create, overwrite, and delete any object in the bucket.
 cbGrantWrite :: Lens' CreateBucket (Maybe Text)
-cbGrantWrite = lens _cbGrantWrite (\ s a -> s{_cbGrantWrite = a});
+cbGrantWrite = lens _cbGrantWrite (\ s a -> s{_cbGrantWrite = a})
 
 -- | The canned ACL to apply to the bucket.
 cbACL :: Lens' CreateBucket (Maybe BucketCannedACL)
-cbACL = lens _cbACL (\ s a -> s{_cbACL = a});
+cbACL = lens _cbACL (\ s a -> s{_cbACL = a})
 
 -- | Undocumented member.
 cbBucket :: Lens' CreateBucket BucketName
-cbBucket = lens _cbBucket (\ s a -> s{_cbBucket = a});
+cbBucket = lens _cbBucket (\ s a -> s{_cbBucket = a})
 
 instance AWSRequest CreateBucket where
         type Rs CreateBucket = CreateBucketResponse
@@ -185,15 +185,15 @@
     -> CreateBucketResponse
 createBucketResponse pResponseStatus_ =
   CreateBucketResponse'
-  {_cbrsLocation = Nothing, _cbrsResponseStatus = pResponseStatus_}
+    {_cbrsLocation = Nothing, _cbrsResponseStatus = pResponseStatus_}
 
 
 -- | Undocumented member.
 cbrsLocation :: Lens' CreateBucketResponse (Maybe Text)
-cbrsLocation = lens _cbrsLocation (\ s a -> s{_cbrsLocation = a});
+cbrsLocation = lens _cbrsLocation (\ s a -> s{_cbrsLocation = a})
 
 -- | -- | The response status code.
 cbrsResponseStatus :: Lens' CreateBucketResponse Int
-cbrsResponseStatus = lens _cbrsResponseStatus (\ s a -> s{_cbrsResponseStatus = a});
+cbrsResponseStatus = lens _cbrsResponseStatus (\ s a -> s{_cbrsResponseStatus = a})
 
 instance NFData CreateBucketResponse where
diff --git a/gen/Network/AWS/S3/CreateMultipartUpload.hs b/gen/Network/AWS/S3/CreateMultipartUpload.hs
--- a/gen/Network/AWS/S3/CreateMultipartUpload.hs
+++ b/gen/Network/AWS/S3/CreateMultipartUpload.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.CreateMultipartUpload
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -160,123 +160,123 @@
     -> CreateMultipartUpload
 createMultipartUpload pBucket_ pKey_ =
   CreateMultipartUpload'
-  { _cmuExpires = Nothing
-  , _cmuGrantReadACP = Nothing
-  , _cmuSSECustomerAlgorithm = Nothing
-  , _cmuSSECustomerKey = Nothing
-  , _cmuRequestPayer = Nothing
-  , _cmuGrantWriteACP = Nothing
-  , _cmuWebsiteRedirectLocation = Nothing
-  , _cmuGrantRead = Nothing
-  , _cmuStorageClass = Nothing
-  , _cmuSSECustomerKeyMD5 = Nothing
-  , _cmuSSEKMSKeyId = Nothing
-  , _cmuGrantFullControl = Nothing
-  , _cmuContentEncoding = Nothing
-  , _cmuTagging = Nothing
-  , _cmuMetadata = mempty
-  , _cmuCacheControl = Nothing
-  , _cmuContentLanguage = Nothing
-  , _cmuACL = Nothing
-  , _cmuContentDisposition = Nothing
-  , _cmuServerSideEncryption = Nothing
-  , _cmuContentType = Nothing
-  , _cmuBucket = pBucket_
-  , _cmuKey = pKey_
-  }
+    { _cmuExpires = Nothing
+    , _cmuGrantReadACP = Nothing
+    , _cmuSSECustomerAlgorithm = Nothing
+    , _cmuSSECustomerKey = Nothing
+    , _cmuRequestPayer = Nothing
+    , _cmuGrantWriteACP = Nothing
+    , _cmuWebsiteRedirectLocation = Nothing
+    , _cmuGrantRead = Nothing
+    , _cmuStorageClass = Nothing
+    , _cmuSSECustomerKeyMD5 = Nothing
+    , _cmuSSEKMSKeyId = Nothing
+    , _cmuGrantFullControl = Nothing
+    , _cmuContentEncoding = Nothing
+    , _cmuTagging = Nothing
+    , _cmuMetadata = mempty
+    , _cmuCacheControl = Nothing
+    , _cmuContentLanguage = Nothing
+    , _cmuACL = Nothing
+    , _cmuContentDisposition = Nothing
+    , _cmuServerSideEncryption = Nothing
+    , _cmuContentType = Nothing
+    , _cmuBucket = pBucket_
+    , _cmuKey = pKey_
+    }
 
 
 -- | The date and time at which the object is no longer cacheable.
 cmuExpires :: Lens' CreateMultipartUpload (Maybe UTCTime)
-cmuExpires = lens _cmuExpires (\ s a -> s{_cmuExpires = a}) . mapping _Time;
+cmuExpires = lens _cmuExpires (\ s a -> s{_cmuExpires = a}) . mapping _Time
 
 -- | Allows grantee to read the object ACL.
 cmuGrantReadACP :: Lens' CreateMultipartUpload (Maybe Text)
-cmuGrantReadACP = lens _cmuGrantReadACP (\ s a -> s{_cmuGrantReadACP = a});
+cmuGrantReadACP = lens _cmuGrantReadACP (\ s a -> s{_cmuGrantReadACP = a})
 
 -- | Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 cmuSSECustomerAlgorithm :: Lens' CreateMultipartUpload (Maybe Text)
-cmuSSECustomerAlgorithm = lens _cmuSSECustomerAlgorithm (\ s a -> s{_cmuSSECustomerAlgorithm = a});
+cmuSSECustomerAlgorithm = lens _cmuSSECustomerAlgorithm (\ s a -> s{_cmuSSECustomerAlgorithm = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm header.
 cmuSSECustomerKey :: Lens' CreateMultipartUpload (Maybe Text)
-cmuSSECustomerKey = lens _cmuSSECustomerKey (\ s a -> s{_cmuSSECustomerKey = a}) . mapping _Sensitive;
+cmuSSECustomerKey = lens _cmuSSECustomerKey (\ s a -> s{_cmuSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Undocumented member.
 cmuRequestPayer :: Lens' CreateMultipartUpload (Maybe RequestPayer)
-cmuRequestPayer = lens _cmuRequestPayer (\ s a -> s{_cmuRequestPayer = a});
+cmuRequestPayer = lens _cmuRequestPayer (\ s a -> s{_cmuRequestPayer = a})
 
 -- | Allows grantee to write the ACL for the applicable object.
 cmuGrantWriteACP :: Lens' CreateMultipartUpload (Maybe Text)
-cmuGrantWriteACP = lens _cmuGrantWriteACP (\ s a -> s{_cmuGrantWriteACP = a});
+cmuGrantWriteACP = lens _cmuGrantWriteACP (\ s a -> s{_cmuGrantWriteACP = a})
 
 -- | If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.
 cmuWebsiteRedirectLocation :: Lens' CreateMultipartUpload (Maybe Text)
-cmuWebsiteRedirectLocation = lens _cmuWebsiteRedirectLocation (\ s a -> s{_cmuWebsiteRedirectLocation = a});
+cmuWebsiteRedirectLocation = lens _cmuWebsiteRedirectLocation (\ s a -> s{_cmuWebsiteRedirectLocation = a})
 
 -- | Allows grantee to read the object data and its metadata.
 cmuGrantRead :: Lens' CreateMultipartUpload (Maybe Text)
-cmuGrantRead = lens _cmuGrantRead (\ s a -> s{_cmuGrantRead = a});
+cmuGrantRead = lens _cmuGrantRead (\ s a -> s{_cmuGrantRead = a})
 
 -- | The type of storage to use for the object. Defaults to 'STANDARD'.
 cmuStorageClass :: Lens' CreateMultipartUpload (Maybe StorageClass)
-cmuStorageClass = lens _cmuStorageClass (\ s a -> s{_cmuStorageClass = a});
+cmuStorageClass = lens _cmuStorageClass (\ s a -> s{_cmuStorageClass = a})
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 cmuSSECustomerKeyMD5 :: Lens' CreateMultipartUpload (Maybe Text)
-cmuSSECustomerKeyMD5 = lens _cmuSSECustomerKeyMD5 (\ s a -> s{_cmuSSECustomerKeyMD5 = a});
+cmuSSECustomerKeyMD5 = lens _cmuSSECustomerKeyMD5 (\ s a -> s{_cmuSSECustomerKeyMD5 = a})
 
 -- | Specifies the AWS KMS key ID to use for object encryption. All GET and PUT requests for an object protected by AWS KMS will fail if not made via SSL or using SigV4. Documentation on configuring any of the officially supported AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
 cmuSSEKMSKeyId :: Lens' CreateMultipartUpload (Maybe Text)
-cmuSSEKMSKeyId = lens _cmuSSEKMSKeyId (\ s a -> s{_cmuSSEKMSKeyId = a}) . mapping _Sensitive;
+cmuSSEKMSKeyId = lens _cmuSSEKMSKeyId (\ s a -> s{_cmuSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
 cmuGrantFullControl :: Lens' CreateMultipartUpload (Maybe Text)
-cmuGrantFullControl = lens _cmuGrantFullControl (\ s a -> s{_cmuGrantFullControl = a});
+cmuGrantFullControl = lens _cmuGrantFullControl (\ s a -> s{_cmuGrantFullControl = a})
 
 -- | Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field.
 cmuContentEncoding :: Lens' CreateMultipartUpload (Maybe Text)
-cmuContentEncoding = lens _cmuContentEncoding (\ s a -> s{_cmuContentEncoding = a});
+cmuContentEncoding = lens _cmuContentEncoding (\ s a -> s{_cmuContentEncoding = a})
 
 -- | The tag-set for the object. The tag-set must be encoded as URL Query parameters
 cmuTagging :: Lens' CreateMultipartUpload (Maybe Text)
-cmuTagging = lens _cmuTagging (\ s a -> s{_cmuTagging = a});
+cmuTagging = lens _cmuTagging (\ s a -> s{_cmuTagging = a})
 
 -- | A map of metadata to store with the object in S3.
 cmuMetadata :: Lens' CreateMultipartUpload (HashMap Text Text)
-cmuMetadata = lens _cmuMetadata (\ s a -> s{_cmuMetadata = a}) . _Map;
+cmuMetadata = lens _cmuMetadata (\ s a -> s{_cmuMetadata = a}) . _Map
 
 -- | Specifies caching behavior along the request/reply chain.
 cmuCacheControl :: Lens' CreateMultipartUpload (Maybe Text)
-cmuCacheControl = lens _cmuCacheControl (\ s a -> s{_cmuCacheControl = a});
+cmuCacheControl = lens _cmuCacheControl (\ s a -> s{_cmuCacheControl = a})
 
 -- | The language the content is in.
 cmuContentLanguage :: Lens' CreateMultipartUpload (Maybe Text)
-cmuContentLanguage = lens _cmuContentLanguage (\ s a -> s{_cmuContentLanguage = a});
+cmuContentLanguage = lens _cmuContentLanguage (\ s a -> s{_cmuContentLanguage = a})
 
 -- | The canned ACL to apply to the object.
 cmuACL :: Lens' CreateMultipartUpload (Maybe ObjectCannedACL)
-cmuACL = lens _cmuACL (\ s a -> s{_cmuACL = a});
+cmuACL = lens _cmuACL (\ s a -> s{_cmuACL = a})
 
 -- | Specifies presentational information for the object.
 cmuContentDisposition :: Lens' CreateMultipartUpload (Maybe Text)
-cmuContentDisposition = lens _cmuContentDisposition (\ s a -> s{_cmuContentDisposition = a});
+cmuContentDisposition = lens _cmuContentDisposition (\ s a -> s{_cmuContentDisposition = a})
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 cmuServerSideEncryption :: Lens' CreateMultipartUpload (Maybe ServerSideEncryption)
-cmuServerSideEncryption = lens _cmuServerSideEncryption (\ s a -> s{_cmuServerSideEncryption = a});
+cmuServerSideEncryption = lens _cmuServerSideEncryption (\ s a -> s{_cmuServerSideEncryption = a})
 
 -- | A standard MIME type describing the format of the object data.
 cmuContentType :: Lens' CreateMultipartUpload (Maybe Text)
-cmuContentType = lens _cmuContentType (\ s a -> s{_cmuContentType = a});
+cmuContentType = lens _cmuContentType (\ s a -> s{_cmuContentType = a})
 
 -- | Undocumented member.
 cmuBucket :: Lens' CreateMultipartUpload BucketName
-cmuBucket = lens _cmuBucket (\ s a -> s{_cmuBucket = a});
+cmuBucket = lens _cmuBucket (\ s a -> s{_cmuBucket = a})
 
 -- | Undocumented member.
 cmuKey :: Lens' CreateMultipartUpload ObjectKey
-cmuKey = lens _cmuKey (\ s a -> s{_cmuKey = a});
+cmuKey = lens _cmuKey (\ s a -> s{_cmuKey = a})
 
 instance AWSRequest CreateMultipartUpload where
         type Rs CreateMultipartUpload =
@@ -390,62 +390,62 @@
     -> CreateMultipartUploadResponse
 createMultipartUploadResponse pResponseStatus_ =
   CreateMultipartUploadResponse'
-  { _cmursRequestCharged = Nothing
-  , _cmursBucket = Nothing
-  , _cmursSSECustomerAlgorithm = Nothing
-  , _cmursAbortDate = Nothing
-  , _cmursAbortRuleId = Nothing
-  , _cmursKey = Nothing
-  , _cmursSSECustomerKeyMD5 = Nothing
-  , _cmursSSEKMSKeyId = Nothing
-  , _cmursUploadId = Nothing
-  , _cmursServerSideEncryption = Nothing
-  , _cmursResponseStatus = pResponseStatus_
-  }
+    { _cmursRequestCharged = Nothing
+    , _cmursBucket = Nothing
+    , _cmursSSECustomerAlgorithm = Nothing
+    , _cmursAbortDate = Nothing
+    , _cmursAbortRuleId = Nothing
+    , _cmursKey = Nothing
+    , _cmursSSECustomerKeyMD5 = Nothing
+    , _cmursSSEKMSKeyId = Nothing
+    , _cmursUploadId = Nothing
+    , _cmursServerSideEncryption = Nothing
+    , _cmursResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 cmursRequestCharged :: Lens' CreateMultipartUploadResponse (Maybe RequestCharged)
-cmursRequestCharged = lens _cmursRequestCharged (\ s a -> s{_cmursRequestCharged = a});
+cmursRequestCharged = lens _cmursRequestCharged (\ s a -> s{_cmursRequestCharged = a})
 
 -- | Name of the bucket to which the multipart upload was initiated.
 cmursBucket :: Lens' CreateMultipartUploadResponse (Maybe BucketName)
-cmursBucket = lens _cmursBucket (\ s a -> s{_cmursBucket = a});
+cmursBucket = lens _cmursBucket (\ s a -> s{_cmursBucket = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 cmursSSECustomerAlgorithm :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmursSSECustomerAlgorithm = lens _cmursSSECustomerAlgorithm (\ s a -> s{_cmursSSECustomerAlgorithm = a});
+cmursSSECustomerAlgorithm = lens _cmursSSECustomerAlgorithm (\ s a -> s{_cmursSSECustomerAlgorithm = a})
 
 -- | Date when multipart upload will become eligible for abort operation by lifecycle.
 cmursAbortDate :: Lens' CreateMultipartUploadResponse (Maybe UTCTime)
-cmursAbortDate = lens _cmursAbortDate (\ s a -> s{_cmursAbortDate = a}) . mapping _Time;
+cmursAbortDate = lens _cmursAbortDate (\ s a -> s{_cmursAbortDate = a}) . mapping _Time
 
 -- | Id of the lifecycle rule that makes a multipart upload eligible for abort operation.
 cmursAbortRuleId :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmursAbortRuleId = lens _cmursAbortRuleId (\ s a -> s{_cmursAbortRuleId = a});
+cmursAbortRuleId = lens _cmursAbortRuleId (\ s a -> s{_cmursAbortRuleId = a})
 
 -- | Object key for which the multipart upload was initiated.
 cmursKey :: Lens' CreateMultipartUploadResponse (Maybe ObjectKey)
-cmursKey = lens _cmursKey (\ s a -> s{_cmursKey = a});
+cmursKey = lens _cmursKey (\ s a -> s{_cmursKey = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header to provide round trip message integrity verification of the customer-provided encryption key.
 cmursSSECustomerKeyMD5 :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmursSSECustomerKeyMD5 = lens _cmursSSECustomerKeyMD5 (\ s a -> s{_cmursSSECustomerKeyMD5 = a});
+cmursSSECustomerKeyMD5 = lens _cmursSSECustomerKeyMD5 (\ s a -> s{_cmursSSECustomerKeyMD5 = a})
 
 -- | If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 cmursSSEKMSKeyId :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmursSSEKMSKeyId = lens _cmursSSEKMSKeyId (\ s a -> s{_cmursSSEKMSKeyId = a}) . mapping _Sensitive;
+cmursSSEKMSKeyId = lens _cmursSSEKMSKeyId (\ s a -> s{_cmursSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | ID for the initiated multipart upload.
 cmursUploadId :: Lens' CreateMultipartUploadResponse (Maybe Text)
-cmursUploadId = lens _cmursUploadId (\ s a -> s{_cmursUploadId = a});
+cmursUploadId = lens _cmursUploadId (\ s a -> s{_cmursUploadId = a})
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 cmursServerSideEncryption :: Lens' CreateMultipartUploadResponse (Maybe ServerSideEncryption)
-cmursServerSideEncryption = lens _cmursServerSideEncryption (\ s a -> s{_cmursServerSideEncryption = a});
+cmursServerSideEncryption = lens _cmursServerSideEncryption (\ s a -> s{_cmursServerSideEncryption = a})
 
 -- | -- | The response status code.
 cmursResponseStatus :: Lens' CreateMultipartUploadResponse Int
-cmursResponseStatus = lens _cmursResponseStatus (\ s a -> s{_cmursResponseStatus = a});
+cmursResponseStatus = lens _cmursResponseStatus (\ s a -> s{_cmursResponseStatus = a})
 
 instance NFData CreateMultipartUploadResponse where
diff --git a/gen/Network/AWS/S3/DeleteBucket.hs b/gen/Network/AWS/S3/DeleteBucket.hs
--- a/gen/Network/AWS/S3/DeleteBucket.hs
+++ b/gen/Network/AWS/S3/DeleteBucket.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucket
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 
 -- | Undocumented member.
 dbBucket :: Lens' DeleteBucket BucketName
-dbBucket = lens _dbBucket (\ s a -> s{_dbBucket = a});
+dbBucket = lens _dbBucket (\ s a -> s{_dbBucket = a})
 
 instance AWSRequest DeleteBucket where
         type Rs DeleteBucket = DeleteBucketResponse
diff --git a/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs
--- a/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs
+++ b/gen/Network/AWS/S3/DeleteBucketAnalyticsConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketAnalyticsConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,11 +64,11 @@
 
 -- | The name of the bucket from which an analytics configuration is deleted.
 dbacBucket :: Lens' DeleteBucketAnalyticsConfiguration BucketName
-dbacBucket = lens _dbacBucket (\ s a -> s{_dbacBucket = a});
+dbacBucket = lens _dbacBucket (\ s a -> s{_dbacBucket = a})
 
 -- | The identifier used to represent an analytics configuration.
 dbacId :: Lens' DeleteBucketAnalyticsConfiguration Text
-dbacId = lens _dbacId (\ s a -> s{_dbacId = a});
+dbacId = lens _dbacId (\ s a -> s{_dbacId = a})
 
 instance AWSRequest
            DeleteBucketAnalyticsConfiguration
diff --git a/gen/Network/AWS/S3/DeleteBucketCORS.hs b/gen/Network/AWS/S3/DeleteBucketCORS.hs
--- a/gen/Network/AWS/S3/DeleteBucketCORS.hs
+++ b/gen/Network/AWS/S3/DeleteBucketCORS.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketCORS
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 
 -- | Undocumented member.
 dbcBucket :: Lens' DeleteBucketCORS BucketName
-dbcBucket = lens _dbcBucket (\ s a -> s{_dbcBucket = a});
+dbcBucket = lens _dbcBucket (\ s a -> s{_dbcBucket = a})
 
 instance AWSRequest DeleteBucketCORS where
         type Rs DeleteBucketCORS = DeleteBucketCORSResponse
diff --git a/gen/Network/AWS/S3/DeleteBucketEncryption.hs b/gen/Network/AWS/S3/DeleteBucketEncryption.hs
--- a/gen/Network/AWS/S3/DeleteBucketEncryption.hs
+++ b/gen/Network/AWS/S3/DeleteBucketEncryption.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketEncryption
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 
 -- | The name of the bucket containing the server-side encryption configuration to delete.
 dbeBucket :: Lens' DeleteBucketEncryption BucketName
-dbeBucket = lens _dbeBucket (\ s a -> s{_dbeBucket = a});
+dbeBucket = lens _dbeBucket (\ s a -> s{_dbeBucket = a})
 
 instance AWSRequest DeleteBucketEncryption where
         type Rs DeleteBucketEncryption =
diff --git a/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs
--- a/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs
+++ b/gen/Network/AWS/S3/DeleteBucketInventoryConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketInventoryConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,11 +64,11 @@
 
 -- | The name of the bucket containing the inventory configuration to delete.
 dbicBucket :: Lens' DeleteBucketInventoryConfiguration BucketName
-dbicBucket = lens _dbicBucket (\ s a -> s{_dbicBucket = a});
+dbicBucket = lens _dbicBucket (\ s a -> s{_dbicBucket = a})
 
 -- | The ID used to identify the inventory configuration.
 dbicId :: Lens' DeleteBucketInventoryConfiguration Text
-dbicId = lens _dbicId (\ s a -> s{_dbicId = a});
+dbicId = lens _dbicId (\ s a -> s{_dbicId = a})
 
 instance AWSRequest
            DeleteBucketInventoryConfiguration
diff --git a/gen/Network/AWS/S3/DeleteBucketLifecycle.hs b/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
--- a/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
+++ b/gen/Network/AWS/S3/DeleteBucketLifecycle.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketLifecycle
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 
 -- | Undocumented member.
 dblBucket :: Lens' DeleteBucketLifecycle BucketName
-dblBucket = lens _dblBucket (\ s a -> s{_dblBucket = a});
+dblBucket = lens _dblBucket (\ s a -> s{_dblBucket = a})
 
 instance AWSRequest DeleteBucketLifecycle where
         type Rs DeleteBucketLifecycle =
diff --git a/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs
--- a/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs
+++ b/gen/Network/AWS/S3/DeleteBucketMetricsConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketMetricsConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,11 +64,11 @@
 
 -- | The name of the bucket containing the metrics configuration to delete.
 dbmcBucket :: Lens' DeleteBucketMetricsConfiguration BucketName
-dbmcBucket = lens _dbmcBucket (\ s a -> s{_dbmcBucket = a});
+dbmcBucket = lens _dbmcBucket (\ s a -> s{_dbmcBucket = a})
 
 -- | The ID used to identify the metrics configuration.
 dbmcId :: Lens' DeleteBucketMetricsConfiguration Text
-dbmcId = lens _dbmcId (\ s a -> s{_dbmcId = a});
+dbmcId = lens _dbmcId (\ s a -> s{_dbmcId = a})
 
 instance AWSRequest DeleteBucketMetricsConfiguration
          where
diff --git a/gen/Network/AWS/S3/DeleteBucketPolicy.hs b/gen/Network/AWS/S3/DeleteBucketPolicy.hs
--- a/gen/Network/AWS/S3/DeleteBucketPolicy.hs
+++ b/gen/Network/AWS/S3/DeleteBucketPolicy.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketPolicy
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 
 -- | Undocumented member.
 dbpBucket :: Lens' DeleteBucketPolicy BucketName
-dbpBucket = lens _dbpBucket (\ s a -> s{_dbpBucket = a});
+dbpBucket = lens _dbpBucket (\ s a -> s{_dbpBucket = a})
 
 instance AWSRequest DeleteBucketPolicy where
         type Rs DeleteBucketPolicy =
diff --git a/gen/Network/AWS/S3/DeleteBucketReplication.hs b/gen/Network/AWS/S3/DeleteBucketReplication.hs
--- a/gen/Network/AWS/S3/DeleteBucketReplication.hs
+++ b/gen/Network/AWS/S3/DeleteBucketReplication.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketReplication
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -59,7 +59,7 @@
 
 -- | Undocumented member.
 dbrBucket :: Lens' DeleteBucketReplication BucketName
-dbrBucket = lens _dbrBucket (\ s a -> s{_dbrBucket = a});
+dbrBucket = lens _dbrBucket (\ s a -> s{_dbrBucket = a})
 
 instance AWSRequest DeleteBucketReplication where
         type Rs DeleteBucketReplication =
diff --git a/gen/Network/AWS/S3/DeleteBucketTagging.hs b/gen/Network/AWS/S3/DeleteBucketTagging.hs
--- a/gen/Network/AWS/S3/DeleteBucketTagging.hs
+++ b/gen/Network/AWS/S3/DeleteBucketTagging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketTagging
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 
 -- | Undocumented member.
 dbtBucket :: Lens' DeleteBucketTagging BucketName
-dbtBucket = lens _dbtBucket (\ s a -> s{_dbtBucket = a});
+dbtBucket = lens _dbtBucket (\ s a -> s{_dbtBucket = a})
 
 instance AWSRequest DeleteBucketTagging where
         type Rs DeleteBucketTagging =
diff --git a/gen/Network/AWS/S3/DeleteBucketWebsite.hs b/gen/Network/AWS/S3/DeleteBucketWebsite.hs
--- a/gen/Network/AWS/S3/DeleteBucketWebsite.hs
+++ b/gen/Network/AWS/S3/DeleteBucketWebsite.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteBucketWebsite
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 
 -- | Undocumented member.
 dbwBucket :: Lens' DeleteBucketWebsite BucketName
-dbwBucket = lens _dbwBucket (\ s a -> s{_dbwBucket = a});
+dbwBucket = lens _dbwBucket (\ s a -> s{_dbwBucket = a})
 
 instance AWSRequest DeleteBucketWebsite where
         type Rs DeleteBucketWebsite =
diff --git a/gen/Network/AWS/S3/DeleteObject.hs b/gen/Network/AWS/S3/DeleteObject.hs
--- a/gen/Network/AWS/S3/DeleteObject.hs
+++ b/gen/Network/AWS/S3/DeleteObject.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteObject
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -77,33 +77,33 @@
     -> DeleteObject
 deleteObject pBucket_ pKey_ =
   DeleteObject'
-  { _doVersionId = Nothing
-  , _doMFA = Nothing
-  , _doRequestPayer = Nothing
-  , _doBucket = pBucket_
-  , _doKey = pKey_
-  }
+    { _doVersionId = Nothing
+    , _doMFA = Nothing
+    , _doRequestPayer = Nothing
+    , _doBucket = pBucket_
+    , _doKey = pKey_
+    }
 
 
 -- | VersionId used to reference a specific version of the object.
 doVersionId :: Lens' DeleteObject (Maybe ObjectVersionId)
-doVersionId = lens _doVersionId (\ s a -> s{_doVersionId = a});
+doVersionId = lens _doVersionId (\ s a -> s{_doVersionId = a})
 
 -- | The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
 doMFA :: Lens' DeleteObject (Maybe Text)
-doMFA = lens _doMFA (\ s a -> s{_doMFA = a});
+doMFA = lens _doMFA (\ s a -> s{_doMFA = a})
 
 -- | Undocumented member.
 doRequestPayer :: Lens' DeleteObject (Maybe RequestPayer)
-doRequestPayer = lens _doRequestPayer (\ s a -> s{_doRequestPayer = a});
+doRequestPayer = lens _doRequestPayer (\ s a -> s{_doRequestPayer = a})
 
 -- | Undocumented member.
 doBucket :: Lens' DeleteObject BucketName
-doBucket = lens _doBucket (\ s a -> s{_doBucket = a});
+doBucket = lens _doBucket (\ s a -> s{_doBucket = a})
 
 -- | Undocumented member.
 doKey :: Lens' DeleteObject ObjectKey
-doKey = lens _doKey (\ s a -> s{_doKey = a});
+doKey = lens _doKey (\ s a -> s{_doKey = a})
 
 instance AWSRequest DeleteObject where
         type Rs DeleteObject = DeleteObjectResponse
@@ -160,27 +160,27 @@
     -> DeleteObjectResponse
 deleteObjectResponse pResponseStatus_ =
   DeleteObjectResponse'
-  { _dorsRequestCharged = Nothing
-  , _dorsVersionId = Nothing
-  , _dorsDeleteMarker = Nothing
-  , _dorsResponseStatus = pResponseStatus_
-  }
+    { _dorsRequestCharged = Nothing
+    , _dorsVersionId = Nothing
+    , _dorsDeleteMarker = Nothing
+    , _dorsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 dorsRequestCharged :: Lens' DeleteObjectResponse (Maybe RequestCharged)
-dorsRequestCharged = lens _dorsRequestCharged (\ s a -> s{_dorsRequestCharged = a});
+dorsRequestCharged = lens _dorsRequestCharged (\ s a -> s{_dorsRequestCharged = a})
 
 -- | Returns the version ID of the delete marker created as a result of the DELETE operation.
 dorsVersionId :: Lens' DeleteObjectResponse (Maybe ObjectVersionId)
-dorsVersionId = lens _dorsVersionId (\ s a -> s{_dorsVersionId = a});
+dorsVersionId = lens _dorsVersionId (\ s a -> s{_dorsVersionId = a})
 
 -- | Specifies whether the versioned object that was permanently deleted was (true) or was not (false) a delete marker.
 dorsDeleteMarker :: Lens' DeleteObjectResponse (Maybe Bool)
-dorsDeleteMarker = lens _dorsDeleteMarker (\ s a -> s{_dorsDeleteMarker = a});
+dorsDeleteMarker = lens _dorsDeleteMarker (\ s a -> s{_dorsDeleteMarker = a})
 
 -- | -- | The response status code.
 dorsResponseStatus :: Lens' DeleteObjectResponse Int
-dorsResponseStatus = lens _dorsResponseStatus (\ s a -> s{_dorsResponseStatus = a});
+dorsResponseStatus = lens _dorsResponseStatus (\ s a -> s{_dorsResponseStatus = a})
 
 instance NFData DeleteObjectResponse where
diff --git a/gen/Network/AWS/S3/DeleteObjectTagging.hs b/gen/Network/AWS/S3/DeleteObjectTagging.hs
--- a/gen/Network/AWS/S3/DeleteObjectTagging.hs
+++ b/gen/Network/AWS/S3/DeleteObjectTagging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteObjectTagging
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -67,20 +67,20 @@
     -> DeleteObjectTagging
 deleteObjectTagging pBucket_ pKey_ =
   DeleteObjectTagging'
-  {_dotVersionId = Nothing, _dotBucket = pBucket_, _dotKey = pKey_}
+    {_dotVersionId = Nothing, _dotBucket = pBucket_, _dotKey = pKey_}
 
 
 -- | The versionId of the object that the tag-set will be removed from.
 dotVersionId :: Lens' DeleteObjectTagging (Maybe ObjectVersionId)
-dotVersionId = lens _dotVersionId (\ s a -> s{_dotVersionId = a});
+dotVersionId = lens _dotVersionId (\ s a -> s{_dotVersionId = a})
 
 -- | Undocumented member.
 dotBucket :: Lens' DeleteObjectTagging BucketName
-dotBucket = lens _dotBucket (\ s a -> s{_dotBucket = a});
+dotBucket = lens _dotBucket (\ s a -> s{_dotBucket = a})
 
 -- | Undocumented member.
 dotKey :: Lens' DeleteObjectTagging ObjectKey
-dotKey = lens _dotKey (\ s a -> s{_dotKey = a});
+dotKey = lens _dotKey (\ s a -> s{_dotKey = a})
 
 instance AWSRequest DeleteObjectTagging where
         type Rs DeleteObjectTagging =
@@ -126,15 +126,15 @@
     -> DeleteObjectTaggingResponse
 deleteObjectTaggingResponse pResponseStatus_ =
   DeleteObjectTaggingResponse'
-  {_dotrsVersionId = Nothing, _dotrsResponseStatus = pResponseStatus_}
+    {_dotrsVersionId = Nothing, _dotrsResponseStatus = pResponseStatus_}
 
 
 -- | The versionId of the object the tag-set was removed from.
 dotrsVersionId :: Lens' DeleteObjectTaggingResponse (Maybe ObjectVersionId)
-dotrsVersionId = lens _dotrsVersionId (\ s a -> s{_dotrsVersionId = a});
+dotrsVersionId = lens _dotrsVersionId (\ s a -> s{_dotrsVersionId = a})
 
 -- | -- | The response status code.
 dotrsResponseStatus :: Lens' DeleteObjectTaggingResponse Int
-dotrsResponseStatus = lens _dotrsResponseStatus (\ s a -> s{_dotrsResponseStatus = a});
+dotrsResponseStatus = lens _dotrsResponseStatus (\ s a -> s{_dotrsResponseStatus = a})
 
 instance NFData DeleteObjectTaggingResponse where
diff --git a/gen/Network/AWS/S3/DeleteObjects.hs b/gen/Network/AWS/S3/DeleteObjects.hs
--- a/gen/Network/AWS/S3/DeleteObjects.hs
+++ b/gen/Network/AWS/S3/DeleteObjects.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.DeleteObjects
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -73,28 +73,28 @@
     -> DeleteObjects
 deleteObjects pBucket_ pDelete_ =
   DeleteObjects'
-  { _dosMFA = Nothing
-  , _dosRequestPayer = Nothing
-  , _dosBucket = pBucket_
-  , _dosDelete = pDelete_
-  }
+    { _dosMFA = Nothing
+    , _dosRequestPayer = Nothing
+    , _dosBucket = pBucket_
+    , _dosDelete = pDelete_
+    }
 
 
 -- | The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
 dosMFA :: Lens' DeleteObjects (Maybe Text)
-dosMFA = lens _dosMFA (\ s a -> s{_dosMFA = a});
+dosMFA = lens _dosMFA (\ s a -> s{_dosMFA = a})
 
 -- | Undocumented member.
 dosRequestPayer :: Lens' DeleteObjects (Maybe RequestPayer)
-dosRequestPayer = lens _dosRequestPayer (\ s a -> s{_dosRequestPayer = a});
+dosRequestPayer = lens _dosRequestPayer (\ s a -> s{_dosRequestPayer = a})
 
 -- | Undocumented member.
 dosBucket :: Lens' DeleteObjects BucketName
-dosBucket = lens _dosBucket (\ s a -> s{_dosBucket = a});
+dosBucket = lens _dosBucket (\ s a -> s{_dosBucket = a})
 
 -- | Undocumented member.
 dosDelete :: Lens' DeleteObjects Delete
-dosDelete = lens _dosDelete (\ s a -> s{_dosDelete = a});
+dosDelete = lens _dosDelete (\ s a -> s{_dosDelete = a})
 
 instance AWSRequest DeleteObjects where
         type Rs DeleteObjects = DeleteObjectsResponse
@@ -157,27 +157,27 @@
     -> DeleteObjectsResponse
 deleteObjectsResponse pResponseStatus_ =
   DeleteObjectsResponse'
-  { _drsRequestCharged = Nothing
-  , _drsDeleted = Nothing
-  , _drsErrors = Nothing
-  , _drsResponseStatus = pResponseStatus_
-  }
+    { _drsRequestCharged = Nothing
+    , _drsDeleted = Nothing
+    , _drsErrors = Nothing
+    , _drsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 drsRequestCharged :: Lens' DeleteObjectsResponse (Maybe RequestCharged)
-drsRequestCharged = lens _drsRequestCharged (\ s a -> s{_drsRequestCharged = a});
+drsRequestCharged = lens _drsRequestCharged (\ s a -> s{_drsRequestCharged = a})
 
 -- | Undocumented member.
 drsDeleted :: Lens' DeleteObjectsResponse [DeletedObject]
-drsDeleted = lens _drsDeleted (\ s a -> s{_drsDeleted = a}) . _Default . _Coerce;
+drsDeleted = lens _drsDeleted (\ s a -> s{_drsDeleted = a}) . _Default . _Coerce
 
 -- | Undocumented member.
 drsErrors :: Lens' DeleteObjectsResponse [S3ServiceError]
-drsErrors = lens _drsErrors (\ s a -> s{_drsErrors = a}) . _Default . _Coerce;
+drsErrors = lens _drsErrors (\ s a -> s{_drsErrors = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 drsResponseStatus :: Lens' DeleteObjectsResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a})
 
 instance NFData DeleteObjectsResponse where
diff --git a/gen/Network/AWS/S3/GetBucketACL.hs b/gen/Network/AWS/S3/GetBucketACL.hs
--- a/gen/Network/AWS/S3/GetBucketACL.hs
+++ b/gen/Network/AWS/S3/GetBucketACL.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketACL
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 
 -- | Undocumented member.
 gbaBucket :: Lens' GetBucketACL BucketName
-gbaBucket = lens _gbaBucket (\ s a -> s{_gbaBucket = a});
+gbaBucket = lens _gbaBucket (\ s a -> s{_gbaBucket = a})
 
 instance AWSRequest GetBucketACL where
         type Rs GetBucketACL = GetBucketACLResponse
@@ -112,22 +112,22 @@
     -> GetBucketACLResponse
 getBucketACLResponse pResponseStatus_ =
   GetBucketACLResponse'
-  { _gbarsGrants = Nothing
-  , _gbarsOwner = Nothing
-  , _gbarsResponseStatus = pResponseStatus_
-  }
+    { _gbarsGrants = Nothing
+    , _gbarsOwner = Nothing
+    , _gbarsResponseStatus = pResponseStatus_
+    }
 
 
 -- | A list of grants.
 gbarsGrants :: Lens' GetBucketACLResponse [Grant]
-gbarsGrants = lens _gbarsGrants (\ s a -> s{_gbarsGrants = a}) . _Default . _Coerce;
+gbarsGrants = lens _gbarsGrants (\ s a -> s{_gbarsGrants = a}) . _Default . _Coerce
 
 -- | Undocumented member.
 gbarsOwner :: Lens' GetBucketACLResponse (Maybe Owner)
-gbarsOwner = lens _gbarsOwner (\ s a -> s{_gbarsOwner = a});
+gbarsOwner = lens _gbarsOwner (\ s a -> s{_gbarsOwner = a})
 
 -- | -- | The response status code.
 gbarsResponseStatus :: Lens' GetBucketACLResponse Int
-gbarsResponseStatus = lens _gbarsResponseStatus (\ s a -> s{_gbarsResponseStatus = a});
+gbarsResponseStatus = lens _gbarsResponseStatus (\ s a -> s{_gbarsResponseStatus = a})
 
 instance NFData GetBucketACLResponse where
diff --git a/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs b/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketAccelerateConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketAccelerateConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 
 -- | Name of the bucket for which the accelerate configuration is retrieved.
 gbacBucket :: Lens' GetBucketAccelerateConfiguration BucketName
-gbacBucket = lens _gbacBucket (\ s a -> s{_gbacBucket = a});
+gbacBucket = lens _gbacBucket (\ s a -> s{_gbacBucket = a})
 
 instance AWSRequest GetBucketAccelerateConfiguration
          where
@@ -113,16 +113,16 @@
     -> GetBucketAccelerateConfigurationResponse
 getBucketAccelerateConfigurationResponse pResponseStatus_ =
   GetBucketAccelerateConfigurationResponse'
-  {_grsStatus = Nothing, _grsResponseStatus = pResponseStatus_}
+    {_grsStatus = Nothing, _grsResponseStatus = pResponseStatus_}
 
 
 -- | The accelerate configuration of the bucket.
 grsStatus :: Lens' GetBucketAccelerateConfigurationResponse (Maybe BucketAccelerateStatus)
-grsStatus = lens _grsStatus (\ s a -> s{_grsStatus = a});
+grsStatus = lens _grsStatus (\ s a -> s{_grsStatus = a})
 
 -- | -- | The response status code.
 grsResponseStatus :: Lens' GetBucketAccelerateConfigurationResponse Int
-grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
+grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a})
 
 instance NFData
            GetBucketAccelerateConfigurationResponse
diff --git a/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketAnalyticsConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketAnalyticsConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -67,11 +67,11 @@
 
 -- | The name of the bucket from which an analytics configuration is retrieved.
 getBucket :: Lens' GetBucketAnalyticsConfiguration BucketName
-getBucket = lens _getBucket (\ s a -> s{_getBucket = a});
+getBucket = lens _getBucket (\ s a -> s{_getBucket = a})
 
 -- | The identifier used to represent an analytics configuration.
 getId :: Lens' GetBucketAnalyticsConfiguration Text
-getId = lens _getId (\ s a -> s{_getId = a});
+getId = lens _getId (\ s a -> s{_getId = a})
 
 instance AWSRequest GetBucketAnalyticsConfiguration
          where
@@ -121,18 +121,18 @@
     -> GetBucketAnalyticsConfigurationResponse
 getBucketAnalyticsConfigurationResponse pResponseStatus_ =
   GetBucketAnalyticsConfigurationResponse'
-  { _gbacrsAnalyticsConfiguration = Nothing
-  , _gbacrsResponseStatus = pResponseStatus_
-  }
+    { _gbacrsAnalyticsConfiguration = Nothing
+    , _gbacrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | The configuration and any analyses for the analytics filter.
 gbacrsAnalyticsConfiguration :: Lens' GetBucketAnalyticsConfigurationResponse (Maybe AnalyticsConfiguration)
-gbacrsAnalyticsConfiguration = lens _gbacrsAnalyticsConfiguration (\ s a -> s{_gbacrsAnalyticsConfiguration = a});
+gbacrsAnalyticsConfiguration = lens _gbacrsAnalyticsConfiguration (\ s a -> s{_gbacrsAnalyticsConfiguration = a})
 
 -- | -- | The response status code.
 gbacrsResponseStatus :: Lens' GetBucketAnalyticsConfigurationResponse Int
-gbacrsResponseStatus = lens _gbacrsResponseStatus (\ s a -> s{_gbacrsResponseStatus = a});
+gbacrsResponseStatus = lens _gbacrsResponseStatus (\ s a -> s{_gbacrsResponseStatus = a})
 
 instance NFData
            GetBucketAnalyticsConfigurationResponse
diff --git a/gen/Network/AWS/S3/GetBucketCORS.hs b/gen/Network/AWS/S3/GetBucketCORS.hs
--- a/gen/Network/AWS/S3/GetBucketCORS.hs
+++ b/gen/Network/AWS/S3/GetBucketCORS.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketCORS
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 
 -- | Undocumented member.
 gbcBucket :: Lens' GetBucketCORS BucketName
-gbcBucket = lens _gbcBucket (\ s a -> s{_gbcBucket = a});
+gbcBucket = lens _gbcBucket (\ s a -> s{_gbcBucket = a})
 
 instance AWSRequest GetBucketCORS where
         type Rs GetBucketCORS = GetBucketCORSResponse
@@ -106,15 +106,15 @@
     -> GetBucketCORSResponse
 getBucketCORSResponse pResponseStatus_ =
   GetBucketCORSResponse'
-  {_gbcrsCORSRules = Nothing, _gbcrsResponseStatus = pResponseStatus_}
+    {_gbcrsCORSRules = Nothing, _gbcrsResponseStatus = pResponseStatus_}
 
 
 -- | Undocumented member.
 gbcrsCORSRules :: Lens' GetBucketCORSResponse [CORSRule]
-gbcrsCORSRules = lens _gbcrsCORSRules (\ s a -> s{_gbcrsCORSRules = a}) . _Default . _Coerce;
+gbcrsCORSRules = lens _gbcrsCORSRules (\ s a -> s{_gbcrsCORSRules = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 gbcrsResponseStatus :: Lens' GetBucketCORSResponse Int
-gbcrsResponseStatus = lens _gbcrsResponseStatus (\ s a -> s{_gbcrsResponseStatus = a});
+gbcrsResponseStatus = lens _gbcrsResponseStatus (\ s a -> s{_gbcrsResponseStatus = a})
 
 instance NFData GetBucketCORSResponse where
diff --git a/gen/Network/AWS/S3/GetBucketEncryption.hs b/gen/Network/AWS/S3/GetBucketEncryption.hs
--- a/gen/Network/AWS/S3/GetBucketEncryption.hs
+++ b/gen/Network/AWS/S3/GetBucketEncryption.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketEncryption
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 
 -- | The name of the bucket from which the server-side encryption configuration is retrieved.
 gbeBucket :: Lens' GetBucketEncryption BucketName
-gbeBucket = lens _gbeBucket (\ s a -> s{_gbeBucket = a});
+gbeBucket = lens _gbeBucket (\ s a -> s{_gbeBucket = a})
 
 instance AWSRequest GetBucketEncryption where
         type Rs GetBucketEncryption =
@@ -106,17 +106,17 @@
     -> GetBucketEncryptionResponse
 getBucketEncryptionResponse pResponseStatus_ =
   GetBucketEncryptionResponse'
-  { _gbersServerSideEncryptionConfiguration = Nothing
-  , _gbersResponseStatus = pResponseStatus_
-  }
+    { _gbersServerSideEncryptionConfiguration = Nothing
+    , _gbersResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 gbersServerSideEncryptionConfiguration :: Lens' GetBucketEncryptionResponse (Maybe ServerSideEncryptionConfiguration)
-gbersServerSideEncryptionConfiguration = lens _gbersServerSideEncryptionConfiguration (\ s a -> s{_gbersServerSideEncryptionConfiguration = a});
+gbersServerSideEncryptionConfiguration = lens _gbersServerSideEncryptionConfiguration (\ s a -> s{_gbersServerSideEncryptionConfiguration = a})
 
 -- | -- | The response status code.
 gbersResponseStatus :: Lens' GetBucketEncryptionResponse Int
-gbersResponseStatus = lens _gbersResponseStatus (\ s a -> s{_gbersResponseStatus = a});
+gbersResponseStatus = lens _gbersResponseStatus (\ s a -> s{_gbersResponseStatus = a})
 
 instance NFData GetBucketEncryptionResponse where
diff --git a/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketInventoryConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketInventoryConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -67,11 +67,11 @@
 
 -- | The name of the bucket containing the inventory configuration to retrieve.
 gbicBucket :: Lens' GetBucketInventoryConfiguration BucketName
-gbicBucket = lens _gbicBucket (\ s a -> s{_gbicBucket = a});
+gbicBucket = lens _gbicBucket (\ s a -> s{_gbicBucket = a})
 
 -- | The ID used to identify the inventory configuration.
 gbicId :: Lens' GetBucketInventoryConfiguration Text
-gbicId = lens _gbicId (\ s a -> s{_gbicId = a});
+gbicId = lens _gbicId (\ s a -> s{_gbicId = a})
 
 instance AWSRequest GetBucketInventoryConfiguration
          where
@@ -121,18 +121,18 @@
     -> GetBucketInventoryConfigurationResponse
 getBucketInventoryConfigurationResponse pResponseStatus_ =
   GetBucketInventoryConfigurationResponse'
-  { _gbicrsInventoryConfiguration = Nothing
-  , _gbicrsResponseStatus = pResponseStatus_
-  }
+    { _gbicrsInventoryConfiguration = Nothing
+    , _gbicrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Specifies the inventory configuration.
 gbicrsInventoryConfiguration :: Lens' GetBucketInventoryConfigurationResponse (Maybe InventoryConfiguration)
-gbicrsInventoryConfiguration = lens _gbicrsInventoryConfiguration (\ s a -> s{_gbicrsInventoryConfiguration = a});
+gbicrsInventoryConfiguration = lens _gbicrsInventoryConfiguration (\ s a -> s{_gbicrsInventoryConfiguration = a})
 
 -- | -- | The response status code.
 gbicrsResponseStatus :: Lens' GetBucketInventoryConfigurationResponse Int
-gbicrsResponseStatus = lens _gbicrsResponseStatus (\ s a -> s{_gbicrsResponseStatus = a});
+gbicrsResponseStatus = lens _gbicrsResponseStatus (\ s a -> s{_gbicrsResponseStatus = a})
 
 instance NFData
            GetBucketInventoryConfigurationResponse
diff --git a/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs b/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketLifecycleConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketLifecycleConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 
 -- | Undocumented member.
 gblcBucket :: Lens' GetBucketLifecycleConfiguration BucketName
-gblcBucket = lens _gblcBucket (\ s a -> s{_gblcBucket = a});
+gblcBucket = lens _gblcBucket (\ s a -> s{_gblcBucket = a})
 
 instance AWSRequest GetBucketLifecycleConfiguration
          where
@@ -112,16 +112,16 @@
     -> GetBucketLifecycleConfigurationResponse
 getBucketLifecycleConfigurationResponse pResponseStatus_ =
   GetBucketLifecycleConfigurationResponse'
-  {_gblcrsRules = Nothing, _gblcrsResponseStatus = pResponseStatus_}
+    {_gblcrsRules = Nothing, _gblcrsResponseStatus = pResponseStatus_}
 
 
 -- | Undocumented member.
 gblcrsRules :: Lens' GetBucketLifecycleConfigurationResponse [LifecycleRule]
-gblcrsRules = lens _gblcrsRules (\ s a -> s{_gblcrsRules = a}) . _Default . _Coerce;
+gblcrsRules = lens _gblcrsRules (\ s a -> s{_gblcrsRules = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 gblcrsResponseStatus :: Lens' GetBucketLifecycleConfigurationResponse Int
-gblcrsResponseStatus = lens _gblcrsResponseStatus (\ s a -> s{_gblcrsResponseStatus = a});
+gblcrsResponseStatus = lens _gblcrsResponseStatus (\ s a -> s{_gblcrsResponseStatus = a})
 
 instance NFData
            GetBucketLifecycleConfigurationResponse
diff --git a/gen/Network/AWS/S3/GetBucketLocation.hs b/gen/Network/AWS/S3/GetBucketLocation.hs
--- a/gen/Network/AWS/S3/GetBucketLocation.hs
+++ b/gen/Network/AWS/S3/GetBucketLocation.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketLocation
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 
 -- | Undocumented member.
 gblBucket :: Lens' GetBucketLocation BucketName
-gblBucket = lens _gblBucket (\ s a -> s{_gblBucket = a});
+gblBucket = lens _gblBucket (\ s a -> s{_gblBucket = a})
 
 instance AWSRequest GetBucketLocation where
         type Rs GetBucketLocation = GetBucketLocationResponse
@@ -106,17 +106,17 @@
     -> GetBucketLocationResponse
 getBucketLocationResponse pResponseStatus_ pLocationConstraint_ =
   GetBucketLocationResponse'
-  { _gblbrsResponseStatus = pResponseStatus_
-  , _gblbrsLocationConstraint = pLocationConstraint_
-  }
+    { _gblbrsResponseStatus = pResponseStatus_
+    , _gblbrsLocationConstraint = pLocationConstraint_
+    }
 
 
 -- | -- | The response status code.
 gblbrsResponseStatus :: Lens' GetBucketLocationResponse Int
-gblbrsResponseStatus = lens _gblbrsResponseStatus (\ s a -> s{_gblbrsResponseStatus = a});
+gblbrsResponseStatus = lens _gblbrsResponseStatus (\ s a -> s{_gblbrsResponseStatus = a})
 
 -- | Undocumented member.
 gblbrsLocationConstraint :: Lens' GetBucketLocationResponse LocationConstraint
-gblbrsLocationConstraint = lens _gblbrsLocationConstraint (\ s a -> s{_gblbrsLocationConstraint = a});
+gblbrsLocationConstraint = lens _gblbrsLocationConstraint (\ s a -> s{_gblbrsLocationConstraint = a})
 
 instance NFData GetBucketLocationResponse where
diff --git a/gen/Network/AWS/S3/GetBucketLogging.hs b/gen/Network/AWS/S3/GetBucketLogging.hs
--- a/gen/Network/AWS/S3/GetBucketLogging.hs
+++ b/gen/Network/AWS/S3/GetBucketLogging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketLogging
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 
 -- | Undocumented member.
 gBucket :: Lens' GetBucketLogging BucketName
-gBucket = lens _gBucket (\ s a -> s{_gBucket = a});
+gBucket = lens _gBucket (\ s a -> s{_gBucket = a})
 
 instance AWSRequest GetBucketLogging where
         type Rs GetBucketLogging = GetBucketLoggingResponse
@@ -105,15 +105,15 @@
     -> GetBucketLoggingResponse
 getBucketLoggingResponse pResponseStatus_ =
   GetBucketLoggingResponse'
-  {_gblrsLoggingEnabled = Nothing, _gblrsResponseStatus = pResponseStatus_}
+    {_gblrsLoggingEnabled = Nothing, _gblrsResponseStatus = pResponseStatus_}
 
 
 -- | Undocumented member.
 gblrsLoggingEnabled :: Lens' GetBucketLoggingResponse (Maybe LoggingEnabled)
-gblrsLoggingEnabled = lens _gblrsLoggingEnabled (\ s a -> s{_gblrsLoggingEnabled = a});
+gblrsLoggingEnabled = lens _gblrsLoggingEnabled (\ s a -> s{_gblrsLoggingEnabled = a})
 
 -- | -- | The response status code.
 gblrsResponseStatus :: Lens' GetBucketLoggingResponse Int
-gblrsResponseStatus = lens _gblrsResponseStatus (\ s a -> s{_gblrsResponseStatus = a});
+gblrsResponseStatus = lens _gblrsResponseStatus (\ s a -> s{_gblrsResponseStatus = a})
 
 instance NFData GetBucketLoggingResponse where
diff --git a/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketMetricsConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketMetricsConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -67,11 +67,11 @@
 
 -- | The name of the bucket containing the metrics configuration to retrieve.
 gbmcBucket :: Lens' GetBucketMetricsConfiguration BucketName
-gbmcBucket = lens _gbmcBucket (\ s a -> s{_gbmcBucket = a});
+gbmcBucket = lens _gbmcBucket (\ s a -> s{_gbmcBucket = a})
 
 -- | The ID used to identify the metrics configuration.
 gbmcId :: Lens' GetBucketMetricsConfiguration Text
-gbmcId = lens _gbmcId (\ s a -> s{_gbmcId = a});
+gbmcId = lens _gbmcId (\ s a -> s{_gbmcId = a})
 
 instance AWSRequest GetBucketMetricsConfiguration
          where
@@ -119,18 +119,18 @@
     -> GetBucketMetricsConfigurationResponse
 getBucketMetricsConfigurationResponse pResponseStatus_ =
   GetBucketMetricsConfigurationResponse'
-  { _gbmcrsMetricsConfiguration = Nothing
-  , _gbmcrsResponseStatus = pResponseStatus_
-  }
+    { _gbmcrsMetricsConfiguration = Nothing
+    , _gbmcrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Specifies the metrics configuration.
 gbmcrsMetricsConfiguration :: Lens' GetBucketMetricsConfigurationResponse (Maybe MetricsConfiguration)
-gbmcrsMetricsConfiguration = lens _gbmcrsMetricsConfiguration (\ s a -> s{_gbmcrsMetricsConfiguration = a});
+gbmcrsMetricsConfiguration = lens _gbmcrsMetricsConfiguration (\ s a -> s{_gbmcrsMetricsConfiguration = a})
 
 -- | -- | The response status code.
 gbmcrsResponseStatus :: Lens' GetBucketMetricsConfigurationResponse Int
-gbmcrsResponseStatus = lens _gbmcrsResponseStatus (\ s a -> s{_gbmcrsResponseStatus = a});
+gbmcrsResponseStatus = lens _gbmcrsResponseStatus (\ s a -> s{_gbmcrsResponseStatus = a})
 
 instance NFData GetBucketMetricsConfigurationResponse
          where
diff --git a/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs b/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
--- a/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
+++ b/gen/Network/AWS/S3/GetBucketNotificationConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketNotificationConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -63,7 +63,7 @@
 
 -- | Name of the bucket to get the notification configuration for.
 gbncBucket :: Lens' GetBucketNotificationConfiguration BucketName
-gbncBucket = lens _gbncBucket (\ s a -> s{_gbncBucket = a});
+gbncBucket = lens _gbncBucket (\ s a -> s{_gbncBucket = a})
 
 instance AWSRequest
            GetBucketNotificationConfiguration
diff --git a/gen/Network/AWS/S3/GetBucketPolicy.hs b/gen/Network/AWS/S3/GetBucketPolicy.hs
--- a/gen/Network/AWS/S3/GetBucketPolicy.hs
+++ b/gen/Network/AWS/S3/GetBucketPolicy.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketPolicy
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -61,13 +61,13 @@
 
 -- | Undocumented member.
 gbpBucket :: Lens' GetBucketPolicy BucketName
-gbpBucket = lens _gbpBucket (\ s a -> s{_gbpBucket = a});
+gbpBucket = lens _gbpBucket (\ s a -> s{_gbpBucket = a})
 
 instance AWSRequest GetBucketPolicy where
         type Rs GetBucketPolicy = GetBucketPolicyResponse
         request = get s3
         response
-          = receiveJSON
+          = receiveBytes
               (\ s h x ->
                  GetBucketPolicyResponse' <$>
                    (pure (fromEnum s)) <*> (pure x))
@@ -89,7 +89,7 @@
 -- | /See:/ 'getBucketPolicyResponse' smart constructor.
 data GetBucketPolicyResponse = GetBucketPolicyResponse'
   { _gbprsResponseStatus :: !Int
-  , _gbprsPolicy         :: !(HashMap Text Value)
+  , _gbprsPolicy         :: !ByteString
   } deriving (Eq, Show, Data, Typeable, Generic)
 
 
@@ -102,19 +102,19 @@
 -- * 'gbprsPolicy' - The bucket policy as a JSON document.
 getBucketPolicyResponse
     :: Int -- ^ 'gbprsResponseStatus'
-    -> HashMap Text Value -- ^ 'gbprsPolicy'
+    -> ByteString -- ^ 'gbprsPolicy'
     -> GetBucketPolicyResponse
 getBucketPolicyResponse pResponseStatus_ pPolicy_ =
   GetBucketPolicyResponse'
-  {_gbprsResponseStatus = pResponseStatus_, _gbprsPolicy = pPolicy_}
+    {_gbprsResponseStatus = pResponseStatus_, _gbprsPolicy = pPolicy_}
 
 
 -- | -- | The response status code.
 gbprsResponseStatus :: Lens' GetBucketPolicyResponse Int
-gbprsResponseStatus = lens _gbprsResponseStatus (\ s a -> s{_gbprsResponseStatus = a});
+gbprsResponseStatus = lens _gbprsResponseStatus (\ s a -> s{_gbprsResponseStatus = a})
 
 -- | The bucket policy as a JSON document.
-gbprsPolicy :: Lens' GetBucketPolicyResponse (HashMap Text Value)
-gbprsPolicy = lens _gbprsPolicy (\ s a -> s{_gbprsPolicy = a});
+gbprsPolicy :: Lens' GetBucketPolicyResponse ByteString
+gbprsPolicy = lens _gbprsPolicy (\ s a -> s{_gbprsPolicy = a})
 
 instance NFData GetBucketPolicyResponse where
diff --git a/gen/Network/AWS/S3/GetBucketReplication.hs b/gen/Network/AWS/S3/GetBucketReplication.hs
--- a/gen/Network/AWS/S3/GetBucketReplication.hs
+++ b/gen/Network/AWS/S3/GetBucketReplication.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketReplication
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 
 -- | Undocumented member.
 gbrBucket :: Lens' GetBucketReplication BucketName
-gbrBucket = lens _gbrBucket (\ s a -> s{_gbrBucket = a});
+gbrBucket = lens _gbrBucket (\ s a -> s{_gbrBucket = a})
 
 instance AWSRequest GetBucketReplication where
         type Rs GetBucketReplication =
@@ -106,17 +106,17 @@
     -> GetBucketReplicationResponse
 getBucketReplicationResponse pResponseStatus_ =
   GetBucketReplicationResponse'
-  { _gbrrsReplicationConfiguration = Nothing
-  , _gbrrsResponseStatus = pResponseStatus_
-  }
+    { _gbrrsReplicationConfiguration = Nothing
+    , _gbrrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 gbrrsReplicationConfiguration :: Lens' GetBucketReplicationResponse (Maybe ReplicationConfiguration)
-gbrrsReplicationConfiguration = lens _gbrrsReplicationConfiguration (\ s a -> s{_gbrrsReplicationConfiguration = a});
+gbrrsReplicationConfiguration = lens _gbrrsReplicationConfiguration (\ s a -> s{_gbrrsReplicationConfiguration = a})
 
 -- | -- | The response status code.
 gbrrsResponseStatus :: Lens' GetBucketReplicationResponse Int
-gbrrsResponseStatus = lens _gbrrsResponseStatus (\ s a -> s{_gbrrsResponseStatus = a});
+gbrrsResponseStatus = lens _gbrrsResponseStatus (\ s a -> s{_gbrrsResponseStatus = a})
 
 instance NFData GetBucketReplicationResponse where
diff --git a/gen/Network/AWS/S3/GetBucketRequestPayment.hs b/gen/Network/AWS/S3/GetBucketRequestPayment.hs
--- a/gen/Network/AWS/S3/GetBucketRequestPayment.hs
+++ b/gen/Network/AWS/S3/GetBucketRequestPayment.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketRequestPayment
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 
 -- | Undocumented member.
 gbrpBucket :: Lens' GetBucketRequestPayment BucketName
-gbrpBucket = lens _gbrpBucket (\ s a -> s{_gbrpBucket = a});
+gbrpBucket = lens _gbrpBucket (\ s a -> s{_gbrpBucket = a})
 
 instance AWSRequest GetBucketRequestPayment where
         type Rs GetBucketRequestPayment =
@@ -107,15 +107,15 @@
     -> GetBucketRequestPaymentResponse
 getBucketRequestPaymentResponse pResponseStatus_ =
   GetBucketRequestPaymentResponse'
-  {_gbrprsPayer = Nothing, _gbrprsResponseStatus = pResponseStatus_}
+    {_gbrprsPayer = Nothing, _gbrprsResponseStatus = pResponseStatus_}
 
 
 -- | Specifies who pays for the download and request fees.
 gbrprsPayer :: Lens' GetBucketRequestPaymentResponse (Maybe Payer)
-gbrprsPayer = lens _gbrprsPayer (\ s a -> s{_gbrprsPayer = a});
+gbrprsPayer = lens _gbrprsPayer (\ s a -> s{_gbrprsPayer = a})
 
 -- | -- | The response status code.
 gbrprsResponseStatus :: Lens' GetBucketRequestPaymentResponse Int
-gbrprsResponseStatus = lens _gbrprsResponseStatus (\ s a -> s{_gbrprsResponseStatus = a});
+gbrprsResponseStatus = lens _gbrprsResponseStatus (\ s a -> s{_gbrprsResponseStatus = a})
 
 instance NFData GetBucketRequestPaymentResponse where
diff --git a/gen/Network/AWS/S3/GetBucketTagging.hs b/gen/Network/AWS/S3/GetBucketTagging.hs
--- a/gen/Network/AWS/S3/GetBucketTagging.hs
+++ b/gen/Network/AWS/S3/GetBucketTagging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketTagging
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -61,7 +61,7 @@
 
 -- | Undocumented member.
 gbtBucket :: Lens' GetBucketTagging BucketName
-gbtBucket = lens _gbtBucket (\ s a -> s{_gbtBucket = a});
+gbtBucket = lens _gbtBucket (\ s a -> s{_gbtBucket = a})
 
 instance AWSRequest GetBucketTagging where
         type Rs GetBucketTagging = GetBucketTaggingResponse
@@ -106,15 +106,15 @@
     -> GetBucketTaggingResponse
 getBucketTaggingResponse pResponseStatus_ =
   GetBucketTaggingResponse'
-  {_gbtrsResponseStatus = pResponseStatus_, _gbtrsTagSet = mempty}
+    {_gbtrsResponseStatus = pResponseStatus_, _gbtrsTagSet = mempty}
 
 
 -- | -- | The response status code.
 gbtrsResponseStatus :: Lens' GetBucketTaggingResponse Int
-gbtrsResponseStatus = lens _gbtrsResponseStatus (\ s a -> s{_gbtrsResponseStatus = a});
+gbtrsResponseStatus = lens _gbtrsResponseStatus (\ s a -> s{_gbtrsResponseStatus = a})
 
 -- | Undocumented member.
 gbtrsTagSet :: Lens' GetBucketTaggingResponse [Tag]
-gbtrsTagSet = lens _gbtrsTagSet (\ s a -> s{_gbtrsTagSet = a}) . _Coerce;
+gbtrsTagSet = lens _gbtrsTagSet (\ s a -> s{_gbtrsTagSet = a}) . _Coerce
 
 instance NFData GetBucketTaggingResponse where
diff --git a/gen/Network/AWS/S3/GetBucketVersioning.hs b/gen/Network/AWS/S3/GetBucketVersioning.hs
--- a/gen/Network/AWS/S3/GetBucketVersioning.hs
+++ b/gen/Network/AWS/S3/GetBucketVersioning.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketVersioning
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -62,7 +62,7 @@
 
 -- | Undocumented member.
 gbvBucket :: Lens' GetBucketVersioning BucketName
-gbvBucket = lens _gbvBucket (\ s a -> s{_gbvBucket = a});
+gbvBucket = lens _gbvBucket (\ s a -> s{_gbvBucket = a})
 
 instance AWSRequest GetBucketVersioning where
         type Rs GetBucketVersioning =
@@ -111,22 +111,22 @@
     -> GetBucketVersioningResponse
 getBucketVersioningResponse pResponseStatus_ =
   GetBucketVersioningResponse'
-  { _gbvrsStatus = Nothing
-  , _gbvrsMFADelete = Nothing
-  , _gbvrsResponseStatus = pResponseStatus_
-  }
+    { _gbvrsStatus = Nothing
+    , _gbvrsMFADelete = Nothing
+    , _gbvrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | The versioning state of the bucket.
 gbvrsStatus :: Lens' GetBucketVersioningResponse (Maybe BucketVersioningStatus)
-gbvrsStatus = lens _gbvrsStatus (\ s a -> s{_gbvrsStatus = a});
+gbvrsStatus = lens _gbvrsStatus (\ s a -> s{_gbvrsStatus = a})
 
 -- | Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
 gbvrsMFADelete :: Lens' GetBucketVersioningResponse (Maybe MFADeleteStatus)
-gbvrsMFADelete = lens _gbvrsMFADelete (\ s a -> s{_gbvrsMFADelete = a});
+gbvrsMFADelete = lens _gbvrsMFADelete (\ s a -> s{_gbvrsMFADelete = a})
 
 -- | -- | The response status code.
 gbvrsResponseStatus :: Lens' GetBucketVersioningResponse Int
-gbvrsResponseStatus = lens _gbvrsResponseStatus (\ s a -> s{_gbvrsResponseStatus = a});
+gbvrsResponseStatus = lens _gbvrsResponseStatus (\ s a -> s{_gbvrsResponseStatus = a})
 
 instance NFData GetBucketVersioningResponse where
diff --git a/gen/Network/AWS/S3/GetBucketWebsite.hs b/gen/Network/AWS/S3/GetBucketWebsite.hs
--- a/gen/Network/AWS/S3/GetBucketWebsite.hs
+++ b/gen/Network/AWS/S3/GetBucketWebsite.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetBucketWebsite
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,7 +64,7 @@
 
 -- | Undocumented member.
 gbwBucket :: Lens' GetBucketWebsite BucketName
-gbwBucket = lens _gbwBucket (\ s a -> s{_gbwBucket = a});
+gbwBucket = lens _gbwBucket (\ s a -> s{_gbwBucket = a})
 
 instance AWSRequest GetBucketWebsite where
         type Rs GetBucketWebsite = GetBucketWebsiteResponse
@@ -123,32 +123,32 @@
     -> GetBucketWebsiteResponse
 getBucketWebsiteResponse pResponseStatus_ =
   GetBucketWebsiteResponse'
-  { _gbwrsRedirectAllRequestsTo = Nothing
-  , _gbwrsErrorDocument = Nothing
-  , _gbwrsIndexDocument = Nothing
-  , _gbwrsRoutingRules = Nothing
-  , _gbwrsResponseStatus = pResponseStatus_
-  }
+    { _gbwrsRedirectAllRequestsTo = Nothing
+    , _gbwrsErrorDocument = Nothing
+    , _gbwrsIndexDocument = Nothing
+    , _gbwrsRoutingRules = Nothing
+    , _gbwrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 gbwrsRedirectAllRequestsTo :: Lens' GetBucketWebsiteResponse (Maybe RedirectAllRequestsTo)
-gbwrsRedirectAllRequestsTo = lens _gbwrsRedirectAllRequestsTo (\ s a -> s{_gbwrsRedirectAllRequestsTo = a});
+gbwrsRedirectAllRequestsTo = lens _gbwrsRedirectAllRequestsTo (\ s a -> s{_gbwrsRedirectAllRequestsTo = a})
 
 -- | Undocumented member.
 gbwrsErrorDocument :: Lens' GetBucketWebsiteResponse (Maybe ErrorDocument)
-gbwrsErrorDocument = lens _gbwrsErrorDocument (\ s a -> s{_gbwrsErrorDocument = a});
+gbwrsErrorDocument = lens _gbwrsErrorDocument (\ s a -> s{_gbwrsErrorDocument = a})
 
 -- | Undocumented member.
 gbwrsIndexDocument :: Lens' GetBucketWebsiteResponse (Maybe IndexDocument)
-gbwrsIndexDocument = lens _gbwrsIndexDocument (\ s a -> s{_gbwrsIndexDocument = a});
+gbwrsIndexDocument = lens _gbwrsIndexDocument (\ s a -> s{_gbwrsIndexDocument = a})
 
 -- | Undocumented member.
 gbwrsRoutingRules :: Lens' GetBucketWebsiteResponse [RoutingRule]
-gbwrsRoutingRules = lens _gbwrsRoutingRules (\ s a -> s{_gbwrsRoutingRules = a}) . _Default . _Coerce;
+gbwrsRoutingRules = lens _gbwrsRoutingRules (\ s a -> s{_gbwrsRoutingRules = a}) . _Default . _Coerce
 
 -- | -- | The response status code.
 gbwrsResponseStatus :: Lens' GetBucketWebsiteResponse Int
-gbwrsResponseStatus = lens _gbwrsResponseStatus (\ s a -> s{_gbwrsResponseStatus = a});
+gbwrsResponseStatus = lens _gbwrsResponseStatus (\ s a -> s{_gbwrsResponseStatus = a})
 
 instance NFData GetBucketWebsiteResponse where
diff --git a/gen/Network/AWS/S3/GetObject.hs b/gen/Network/AWS/S3/GetObject.hs
--- a/gen/Network/AWS/S3/GetObject.hs
+++ b/gen/Network/AWS/S3/GetObject.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetObject
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -158,103 +158,103 @@
     -> GetObject
 getObject pBucket_ pKey_ =
   GetObject'
-  { _goIfMatch = Nothing
-  , _goVersionId = Nothing
-  , _goResponseContentType = Nothing
-  , _goResponseContentDisposition = Nothing
-  , _goResponseContentLanguage = Nothing
-  , _goSSECustomerAlgorithm = Nothing
-  , _goSSECustomerKey = Nothing
-  , _goRequestPayer = Nothing
-  , _goResponseContentEncoding = Nothing
-  , _goIfModifiedSince = Nothing
-  , _goPartNumber = Nothing
-  , _goRange = Nothing
-  , _goIfUnmodifiedSince = Nothing
-  , _goSSECustomerKeyMD5 = Nothing
-  , _goResponseCacheControl = Nothing
-  , _goResponseExpires = Nothing
-  , _goIfNoneMatch = Nothing
-  , _goBucket = pBucket_
-  , _goKey = pKey_
-  }
+    { _goIfMatch = Nothing
+    , _goVersionId = Nothing
+    , _goResponseContentType = Nothing
+    , _goResponseContentDisposition = Nothing
+    , _goResponseContentLanguage = Nothing
+    , _goSSECustomerAlgorithm = Nothing
+    , _goSSECustomerKey = Nothing
+    , _goRequestPayer = Nothing
+    , _goResponseContentEncoding = Nothing
+    , _goIfModifiedSince = Nothing
+    , _goPartNumber = Nothing
+    , _goRange = Nothing
+    , _goIfUnmodifiedSince = Nothing
+    , _goSSECustomerKeyMD5 = Nothing
+    , _goResponseCacheControl = Nothing
+    , _goResponseExpires = Nothing
+    , _goIfNoneMatch = Nothing
+    , _goBucket = pBucket_
+    , _goKey = pKey_
+    }
 
 
 -- | Return the object only if its entity tag (ETag) is the same as the one specified, otherwise return a 412 (precondition failed).
 goIfMatch :: Lens' GetObject (Maybe Text)
-goIfMatch = lens _goIfMatch (\ s a -> s{_goIfMatch = a});
+goIfMatch = lens _goIfMatch (\ s a -> s{_goIfMatch = a})
 
 -- | VersionId used to reference a specific version of the object.
 goVersionId :: Lens' GetObject (Maybe ObjectVersionId)
-goVersionId = lens _goVersionId (\ s a -> s{_goVersionId = a});
+goVersionId = lens _goVersionId (\ s a -> s{_goVersionId = a})
 
 -- | Sets the Content-Type header of the response.
 goResponseContentType :: Lens' GetObject (Maybe Text)
-goResponseContentType = lens _goResponseContentType (\ s a -> s{_goResponseContentType = a});
+goResponseContentType = lens _goResponseContentType (\ s a -> s{_goResponseContentType = a})
 
 -- | Sets the Content-Disposition header of the response
 goResponseContentDisposition :: Lens' GetObject (Maybe Text)
-goResponseContentDisposition = lens _goResponseContentDisposition (\ s a -> s{_goResponseContentDisposition = a});
+goResponseContentDisposition = lens _goResponseContentDisposition (\ s a -> s{_goResponseContentDisposition = a})
 
 -- | Sets the Content-Language header of the response.
 goResponseContentLanguage :: Lens' GetObject (Maybe Text)
-goResponseContentLanguage = lens _goResponseContentLanguage (\ s a -> s{_goResponseContentLanguage = a});
+goResponseContentLanguage = lens _goResponseContentLanguage (\ s a -> s{_goResponseContentLanguage = a})
 
 -- | Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 goSSECustomerAlgorithm :: Lens' GetObject (Maybe Text)
-goSSECustomerAlgorithm = lens _goSSECustomerAlgorithm (\ s a -> s{_goSSECustomerAlgorithm = a});
+goSSECustomerAlgorithm = lens _goSSECustomerAlgorithm (\ s a -> s{_goSSECustomerAlgorithm = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm header.
 goSSECustomerKey :: Lens' GetObject (Maybe Text)
-goSSECustomerKey = lens _goSSECustomerKey (\ s a -> s{_goSSECustomerKey = a}) . mapping _Sensitive;
+goSSECustomerKey = lens _goSSECustomerKey (\ s a -> s{_goSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Undocumented member.
 goRequestPayer :: Lens' GetObject (Maybe RequestPayer)
-goRequestPayer = lens _goRequestPayer (\ s a -> s{_goRequestPayer = a});
+goRequestPayer = lens _goRequestPayer (\ s a -> s{_goRequestPayer = a})
 
 -- | Sets the Content-Encoding header of the response.
 goResponseContentEncoding :: Lens' GetObject (Maybe Text)
-goResponseContentEncoding = lens _goResponseContentEncoding (\ s a -> s{_goResponseContentEncoding = a});
+goResponseContentEncoding = lens _goResponseContentEncoding (\ s a -> s{_goResponseContentEncoding = a})
 
 -- | Return the object only if it has been modified since the specified time, otherwise return a 304 (not modified).
 goIfModifiedSince :: Lens' GetObject (Maybe UTCTime)
-goIfModifiedSince = lens _goIfModifiedSince (\ s a -> s{_goIfModifiedSince = a}) . mapping _Time;
+goIfModifiedSince = lens _goIfModifiedSince (\ s a -> s{_goIfModifiedSince = a}) . mapping _Time
 
 -- | Part number of the object being read. This is a positive integer between 1 and 10,000. Effectively performs a 'ranged' GET request for the part specified. Useful for downloading just a part of an object.
 goPartNumber :: Lens' GetObject (Maybe Int)
-goPartNumber = lens _goPartNumber (\ s a -> s{_goPartNumber = a});
+goPartNumber = lens _goPartNumber (\ s a -> s{_goPartNumber = a})
 
 -- | Downloads the specified range bytes of an object. For more information about the HTTP Range header, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.
 goRange :: Lens' GetObject (Maybe Text)
-goRange = lens _goRange (\ s a -> s{_goRange = a});
+goRange = lens _goRange (\ s a -> s{_goRange = a})
 
 -- | Return the object only if it has not been modified since the specified time, otherwise return a 412 (precondition failed).
 goIfUnmodifiedSince :: Lens' GetObject (Maybe UTCTime)
-goIfUnmodifiedSince = lens _goIfUnmodifiedSince (\ s a -> s{_goIfUnmodifiedSince = a}) . mapping _Time;
+goIfUnmodifiedSince = lens _goIfUnmodifiedSince (\ s a -> s{_goIfUnmodifiedSince = a}) . mapping _Time
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 goSSECustomerKeyMD5 :: Lens' GetObject (Maybe Text)
-goSSECustomerKeyMD5 = lens _goSSECustomerKeyMD5 (\ s a -> s{_goSSECustomerKeyMD5 = a});
+goSSECustomerKeyMD5 = lens _goSSECustomerKeyMD5 (\ s a -> s{_goSSECustomerKeyMD5 = a})
 
 -- | Sets the Cache-Control header of the response.
 goResponseCacheControl :: Lens' GetObject (Maybe Text)
-goResponseCacheControl = lens _goResponseCacheControl (\ s a -> s{_goResponseCacheControl = a});
+goResponseCacheControl = lens _goResponseCacheControl (\ s a -> s{_goResponseCacheControl = a})
 
 -- | Sets the Expires header of the response.
 goResponseExpires :: Lens' GetObject (Maybe UTCTime)
-goResponseExpires = lens _goResponseExpires (\ s a -> s{_goResponseExpires = a}) . mapping _Time;
+goResponseExpires = lens _goResponseExpires (\ s a -> s{_goResponseExpires = a}) . mapping _Time
 
 -- | Return the object only if its entity tag (ETag) is different from the one specified, otherwise return a 304 (not modified).
 goIfNoneMatch :: Lens' GetObject (Maybe Text)
-goIfNoneMatch = lens _goIfNoneMatch (\ s a -> s{_goIfNoneMatch = a});
+goIfNoneMatch = lens _goIfNoneMatch (\ s a -> s{_goIfNoneMatch = a})
 
 -- | Undocumented member.
 goBucket :: Lens' GetObject BucketName
-goBucket = lens _goBucket (\ s a -> s{_goBucket = a});
+goBucket = lens _goBucket (\ s a -> s{_goBucket = a})
 
 -- | Undocumented member.
 goKey :: Lens' GetObject ObjectKey
-goKey = lens _goKey (\ s a -> s{_goKey = a});
+goKey = lens _goKey (\ s a -> s{_goKey = a})
 
 instance AWSRequest GetObject where
         type Rs GetObject = GetObjectResponse
@@ -438,150 +438,150 @@
     -> GetObjectResponse
 getObjectResponse pResponseStatus_ pBody_ =
   GetObjectResponse'
-  { _gorsRequestCharged = Nothing
-  , _gorsPartsCount = Nothing
-  , _gorsETag = Nothing
-  , _gorsVersionId = Nothing
-  , _gorsContentLength = Nothing
-  , _gorsExpires = Nothing
-  , _gorsRestore = Nothing
-  , _gorsExpiration = Nothing
-  , _gorsDeleteMarker = Nothing
-  , _gorsSSECustomerAlgorithm = Nothing
-  , _gorsTagCount = Nothing
-  , _gorsMissingMeta = Nothing
-  , _gorsWebsiteRedirectLocation = Nothing
-  , _gorsAcceptRanges = Nothing
-  , _gorsStorageClass = Nothing
-  , _gorsSSECustomerKeyMD5 = Nothing
-  , _gorsSSEKMSKeyId = Nothing
-  , _gorsContentEncoding = Nothing
-  , _gorsMetadata = mempty
-  , _gorsReplicationStatus = Nothing
-  , _gorsCacheControl = Nothing
-  , _gorsContentLanguage = Nothing
-  , _gorsLastModified = Nothing
-  , _gorsContentDisposition = Nothing
-  , _gorsContentRange = Nothing
-  , _gorsServerSideEncryption = Nothing
-  , _gorsContentType = Nothing
-  , _gorsResponseStatus = pResponseStatus_
-  , _gorsBody = pBody_
-  }
+    { _gorsRequestCharged = Nothing
+    , _gorsPartsCount = Nothing
+    , _gorsETag = Nothing
+    , _gorsVersionId = Nothing
+    , _gorsContentLength = Nothing
+    , _gorsExpires = Nothing
+    , _gorsRestore = Nothing
+    , _gorsExpiration = Nothing
+    , _gorsDeleteMarker = Nothing
+    , _gorsSSECustomerAlgorithm = Nothing
+    , _gorsTagCount = Nothing
+    , _gorsMissingMeta = Nothing
+    , _gorsWebsiteRedirectLocation = Nothing
+    , _gorsAcceptRanges = Nothing
+    , _gorsStorageClass = Nothing
+    , _gorsSSECustomerKeyMD5 = Nothing
+    , _gorsSSEKMSKeyId = Nothing
+    , _gorsContentEncoding = Nothing
+    , _gorsMetadata = mempty
+    , _gorsReplicationStatus = Nothing
+    , _gorsCacheControl = Nothing
+    , _gorsContentLanguage = Nothing
+    , _gorsLastModified = Nothing
+    , _gorsContentDisposition = Nothing
+    , _gorsContentRange = Nothing
+    , _gorsServerSideEncryption = Nothing
+    , _gorsContentType = Nothing
+    , _gorsResponseStatus = pResponseStatus_
+    , _gorsBody = pBody_
+    }
 
 
 -- | Undocumented member.
 gorsRequestCharged :: Lens' GetObjectResponse (Maybe RequestCharged)
-gorsRequestCharged = lens _gorsRequestCharged (\ s a -> s{_gorsRequestCharged = a});
+gorsRequestCharged = lens _gorsRequestCharged (\ s a -> s{_gorsRequestCharged = a})
 
 -- | The count of parts this object has.
 gorsPartsCount :: Lens' GetObjectResponse (Maybe Int)
-gorsPartsCount = lens _gorsPartsCount (\ s a -> s{_gorsPartsCount = a});
+gorsPartsCount = lens _gorsPartsCount (\ s a -> s{_gorsPartsCount = a})
 
 -- | An ETag is an opaque identifier assigned by a web server to a specific version of a resource found at a URL
 gorsETag :: Lens' GetObjectResponse (Maybe ETag)
-gorsETag = lens _gorsETag (\ s a -> s{_gorsETag = a});
+gorsETag = lens _gorsETag (\ s a -> s{_gorsETag = a})
 
 -- | Version of the object.
 gorsVersionId :: Lens' GetObjectResponse (Maybe ObjectVersionId)
-gorsVersionId = lens _gorsVersionId (\ s a -> s{_gorsVersionId = a});
+gorsVersionId = lens _gorsVersionId (\ s a -> s{_gorsVersionId = a})
 
 -- | Size of the body in bytes.
 gorsContentLength :: Lens' GetObjectResponse (Maybe Integer)
-gorsContentLength = lens _gorsContentLength (\ s a -> s{_gorsContentLength = a});
+gorsContentLength = lens _gorsContentLength (\ s a -> s{_gorsContentLength = a})
 
 -- | The date and time at which the object is no longer cacheable.
 gorsExpires :: Lens' GetObjectResponse (Maybe UTCTime)
-gorsExpires = lens _gorsExpires (\ s a -> s{_gorsExpires = a}) . mapping _Time;
+gorsExpires = lens _gorsExpires (\ s a -> s{_gorsExpires = a}) . mapping _Time
 
 -- | Provides information about object restoration operation and expiration time of the restored object copy.
 gorsRestore :: Lens' GetObjectResponse (Maybe Text)
-gorsRestore = lens _gorsRestore (\ s a -> s{_gorsRestore = a});
+gorsRestore = lens _gorsRestore (\ s a -> s{_gorsRestore = a})
 
 -- | If the object expiration is configured (see PUT Bucket lifecycle), the response includes this header. It includes the expiry-date and rule-id key value pairs providing object expiration information. The value of the rule-id is URL encoded.
 gorsExpiration :: Lens' GetObjectResponse (Maybe Text)
-gorsExpiration = lens _gorsExpiration (\ s a -> s{_gorsExpiration = a});
+gorsExpiration = lens _gorsExpiration (\ s a -> s{_gorsExpiration = a})
 
 -- | Specifies whether the object retrieved was (true) or was not (false) a Delete Marker. If false, this response header does not appear in the response.
 gorsDeleteMarker :: Lens' GetObjectResponse (Maybe Bool)
-gorsDeleteMarker = lens _gorsDeleteMarker (\ s a -> s{_gorsDeleteMarker = a});
+gorsDeleteMarker = lens _gorsDeleteMarker (\ s a -> s{_gorsDeleteMarker = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 gorsSSECustomerAlgorithm :: Lens' GetObjectResponse (Maybe Text)
-gorsSSECustomerAlgorithm = lens _gorsSSECustomerAlgorithm (\ s a -> s{_gorsSSECustomerAlgorithm = a});
+gorsSSECustomerAlgorithm = lens _gorsSSECustomerAlgorithm (\ s a -> s{_gorsSSECustomerAlgorithm = a})
 
 -- | The number of tags, if any, on the object.
 gorsTagCount :: Lens' GetObjectResponse (Maybe Int)
-gorsTagCount = lens _gorsTagCount (\ s a -> s{_gorsTagCount = a});
+gorsTagCount = lens _gorsTagCount (\ s a -> s{_gorsTagCount = a})
 
 -- | This is set to the number of metadata entries not returned in x-amz-meta headers. This can happen if you create metadata using an API like SOAP that supports more flexible metadata than the REST API. For example, using SOAP, you can create metadata whose values are not legal HTTP headers.
 gorsMissingMeta :: Lens' GetObjectResponse (Maybe Int)
-gorsMissingMeta = lens _gorsMissingMeta (\ s a -> s{_gorsMissingMeta = a});
+gorsMissingMeta = lens _gorsMissingMeta (\ s a -> s{_gorsMissingMeta = a})
 
 -- | If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.
 gorsWebsiteRedirectLocation :: Lens' GetObjectResponse (Maybe Text)
-gorsWebsiteRedirectLocation = lens _gorsWebsiteRedirectLocation (\ s a -> s{_gorsWebsiteRedirectLocation = a});
+gorsWebsiteRedirectLocation = lens _gorsWebsiteRedirectLocation (\ s a -> s{_gorsWebsiteRedirectLocation = a})
 
 -- | Undocumented member.
 gorsAcceptRanges :: Lens' GetObjectResponse (Maybe Text)
-gorsAcceptRanges = lens _gorsAcceptRanges (\ s a -> s{_gorsAcceptRanges = a});
+gorsAcceptRanges = lens _gorsAcceptRanges (\ s a -> s{_gorsAcceptRanges = a})
 
 -- | Undocumented member.
 gorsStorageClass :: Lens' GetObjectResponse (Maybe StorageClass)
-gorsStorageClass = lens _gorsStorageClass (\ s a -> s{_gorsStorageClass = a});
+gorsStorageClass = lens _gorsStorageClass (\ s a -> s{_gorsStorageClass = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header to provide round trip message integrity verification of the customer-provided encryption key.
 gorsSSECustomerKeyMD5 :: Lens' GetObjectResponse (Maybe Text)
-gorsSSECustomerKeyMD5 = lens _gorsSSECustomerKeyMD5 (\ s a -> s{_gorsSSECustomerKeyMD5 = a});
+gorsSSECustomerKeyMD5 = lens _gorsSSECustomerKeyMD5 (\ s a -> s{_gorsSSECustomerKeyMD5 = a})
 
 -- | If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 gorsSSEKMSKeyId :: Lens' GetObjectResponse (Maybe Text)
-gorsSSEKMSKeyId = lens _gorsSSEKMSKeyId (\ s a -> s{_gorsSSEKMSKeyId = a}) . mapping _Sensitive;
+gorsSSEKMSKeyId = lens _gorsSSEKMSKeyId (\ s a -> s{_gorsSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field.
 gorsContentEncoding :: Lens' GetObjectResponse (Maybe Text)
-gorsContentEncoding = lens _gorsContentEncoding (\ s a -> s{_gorsContentEncoding = a});
+gorsContentEncoding = lens _gorsContentEncoding (\ s a -> s{_gorsContentEncoding = a})
 
 -- | A map of metadata to store with the object in S3.
 gorsMetadata :: Lens' GetObjectResponse (HashMap Text Text)
-gorsMetadata = lens _gorsMetadata (\ s a -> s{_gorsMetadata = a}) . _Map;
+gorsMetadata = lens _gorsMetadata (\ s a -> s{_gorsMetadata = a}) . _Map
 
 -- | Undocumented member.
 gorsReplicationStatus :: Lens' GetObjectResponse (Maybe ReplicationStatus)
-gorsReplicationStatus = lens _gorsReplicationStatus (\ s a -> s{_gorsReplicationStatus = a});
+gorsReplicationStatus = lens _gorsReplicationStatus (\ s a -> s{_gorsReplicationStatus = a})
 
 -- | Specifies caching behavior along the request/reply chain.
 gorsCacheControl :: Lens' GetObjectResponse (Maybe Text)
-gorsCacheControl = lens _gorsCacheControl (\ s a -> s{_gorsCacheControl = a});
+gorsCacheControl = lens _gorsCacheControl (\ s a -> s{_gorsCacheControl = a})
 
 -- | The language the content is in.
 gorsContentLanguage :: Lens' GetObjectResponse (Maybe Text)
-gorsContentLanguage = lens _gorsContentLanguage (\ s a -> s{_gorsContentLanguage = a});
+gorsContentLanguage = lens _gorsContentLanguage (\ s a -> s{_gorsContentLanguage = a})
 
 -- | Last modified date of the object
 gorsLastModified :: Lens' GetObjectResponse (Maybe UTCTime)
-gorsLastModified = lens _gorsLastModified (\ s a -> s{_gorsLastModified = a}) . mapping _Time;
+gorsLastModified = lens _gorsLastModified (\ s a -> s{_gorsLastModified = a}) . mapping _Time
 
 -- | Specifies presentational information for the object.
 gorsContentDisposition :: Lens' GetObjectResponse (Maybe Text)
-gorsContentDisposition = lens _gorsContentDisposition (\ s a -> s{_gorsContentDisposition = a});
+gorsContentDisposition = lens _gorsContentDisposition (\ s a -> s{_gorsContentDisposition = a})
 
 -- | The portion of the object returned in the response.
 gorsContentRange :: Lens' GetObjectResponse (Maybe Text)
-gorsContentRange = lens _gorsContentRange (\ s a -> s{_gorsContentRange = a});
+gorsContentRange = lens _gorsContentRange (\ s a -> s{_gorsContentRange = a})
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 gorsServerSideEncryption :: Lens' GetObjectResponse (Maybe ServerSideEncryption)
-gorsServerSideEncryption = lens _gorsServerSideEncryption (\ s a -> s{_gorsServerSideEncryption = a});
+gorsServerSideEncryption = lens _gorsServerSideEncryption (\ s a -> s{_gorsServerSideEncryption = a})
 
 -- | A standard MIME type describing the format of the object data.
 gorsContentType :: Lens' GetObjectResponse (Maybe Text)
-gorsContentType = lens _gorsContentType (\ s a -> s{_gorsContentType = a});
+gorsContentType = lens _gorsContentType (\ s a -> s{_gorsContentType = a})
 
 -- | -- | The response status code.
 gorsResponseStatus :: Lens' GetObjectResponse Int
-gorsResponseStatus = lens _gorsResponseStatus (\ s a -> s{_gorsResponseStatus = a});
+gorsResponseStatus = lens _gorsResponseStatus (\ s a -> s{_gorsResponseStatus = a})
 
 -- | Object data.
 gorsBody :: Lens' GetObjectResponse RsBody
-gorsBody = lens _gorsBody (\ s a -> s{_gorsBody = a});
+gorsBody = lens _gorsBody (\ s a -> s{_gorsBody = a})
diff --git a/gen/Network/AWS/S3/GetObjectACL.hs b/gen/Network/AWS/S3/GetObjectACL.hs
--- a/gen/Network/AWS/S3/GetObjectACL.hs
+++ b/gen/Network/AWS/S3/GetObjectACL.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetObjectACL
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -73,28 +73,28 @@
     -> GetObjectACL
 getObjectACL pBucket_ pKey_ =
   GetObjectACL'
-  { _goaVersionId = Nothing
-  , _goaRequestPayer = Nothing
-  , _goaBucket = pBucket_
-  , _goaKey = pKey_
-  }
+    { _goaVersionId = Nothing
+    , _goaRequestPayer = Nothing
+    , _goaBucket = pBucket_
+    , _goaKey = pKey_
+    }
 
 
 -- | VersionId used to reference a specific version of the object.
 goaVersionId :: Lens' GetObjectACL (Maybe ObjectVersionId)
-goaVersionId = lens _goaVersionId (\ s a -> s{_goaVersionId = a});
+goaVersionId = lens _goaVersionId (\ s a -> s{_goaVersionId = a})
 
 -- | Undocumented member.
 goaRequestPayer :: Lens' GetObjectACL (Maybe RequestPayer)
-goaRequestPayer = lens _goaRequestPayer (\ s a -> s{_goaRequestPayer = a});
+goaRequestPayer = lens _goaRequestPayer (\ s a -> s{_goaRequestPayer = a})
 
 -- | Undocumented member.
 goaBucket :: Lens' GetObjectACL BucketName
-goaBucket = lens _goaBucket (\ s a -> s{_goaBucket = a});
+goaBucket = lens _goaBucket (\ s a -> s{_goaBucket = a})
 
 -- | Undocumented member.
 goaKey :: Lens' GetObjectACL ObjectKey
-goaKey = lens _goaKey (\ s a -> s{_goaKey = a});
+goaKey = lens _goaKey (\ s a -> s{_goaKey = a})
 
 instance AWSRequest GetObjectACL where
         type Rs GetObjectACL = GetObjectACLResponse
@@ -150,27 +150,27 @@
     -> GetObjectACLResponse
 getObjectACLResponse pResponseStatus_ =
   GetObjectACLResponse'
-  { _goarsRequestCharged = Nothing
-  , _goarsGrants = Nothing
-  , _goarsOwner = Nothing
-  , _goarsResponseStatus = pResponseStatus_
-  }
+    { _goarsRequestCharged = Nothing
+    , _goarsGrants = Nothing
+    , _goarsOwner = Nothing
+    , _goarsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 goarsRequestCharged :: Lens' GetObjectACLResponse (Maybe RequestCharged)
-goarsRequestCharged = lens _goarsRequestCharged (\ s a -> s{_goarsRequestCharged = a});
+goarsRequestCharged = lens _goarsRequestCharged (\ s a -> s{_goarsRequestCharged = a})
 
 -- | A list of grants.
 goarsGrants :: Lens' GetObjectACLResponse [Grant]
-goarsGrants = lens _goarsGrants (\ s a -> s{_goarsGrants = a}) . _Default . _Coerce;
+goarsGrants = lens _goarsGrants (\ s a -> s{_goarsGrants = a}) . _Default . _Coerce
 
 -- | Undocumented member.
 goarsOwner :: Lens' GetObjectACLResponse (Maybe Owner)
-goarsOwner = lens _goarsOwner (\ s a -> s{_goarsOwner = a});
+goarsOwner = lens _goarsOwner (\ s a -> s{_goarsOwner = a})
 
 -- | -- | The response status code.
 goarsResponseStatus :: Lens' GetObjectACLResponse Int
-goarsResponseStatus = lens _goarsResponseStatus (\ s a -> s{_goarsResponseStatus = a});
+goarsResponseStatus = lens _goarsResponseStatus (\ s a -> s{_goarsResponseStatus = a})
 
 instance NFData GetObjectACLResponse where
diff --git a/gen/Network/AWS/S3/GetObjectTagging.hs b/gen/Network/AWS/S3/GetObjectTagging.hs
--- a/gen/Network/AWS/S3/GetObjectTagging.hs
+++ b/gen/Network/AWS/S3/GetObjectTagging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetObjectTagging
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -68,20 +68,20 @@
     -> GetObjectTagging
 getObjectTagging pBucket_ pKey_ =
   GetObjectTagging'
-  {_gotoVersionId = Nothing, _gotoBucket = pBucket_, _gotoKey = pKey_}
+    {_gotoVersionId = Nothing, _gotoBucket = pBucket_, _gotoKey = pKey_}
 
 
 -- | Undocumented member.
 gotoVersionId :: Lens' GetObjectTagging (Maybe ObjectVersionId)
-gotoVersionId = lens _gotoVersionId (\ s a -> s{_gotoVersionId = a});
+gotoVersionId = lens _gotoVersionId (\ s a -> s{_gotoVersionId = a})
 
 -- | Undocumented member.
 gotoBucket :: Lens' GetObjectTagging BucketName
-gotoBucket = lens _gotoBucket (\ s a -> s{_gotoBucket = a});
+gotoBucket = lens _gotoBucket (\ s a -> s{_gotoBucket = a})
 
 -- | Undocumented member.
 gotoKey :: Lens' GetObjectTagging ObjectKey
-gotoKey = lens _gotoKey (\ s a -> s{_gotoKey = a});
+gotoKey = lens _gotoKey (\ s a -> s{_gotoKey = a})
 
 instance AWSRequest GetObjectTagging where
         type Rs GetObjectTagging = GetObjectTaggingResponse
@@ -131,22 +131,22 @@
     -> GetObjectTaggingResponse
 getObjectTaggingResponse pResponseStatus_ =
   GetObjectTaggingResponse'
-  { _gotrsVersionId = Nothing
-  , _gotrsResponseStatus = pResponseStatus_
-  , _gotrsTagSet = mempty
-  }
+    { _gotrsVersionId = Nothing
+    , _gotrsResponseStatus = pResponseStatus_
+    , _gotrsTagSet = mempty
+    }
 
 
 -- | Undocumented member.
 gotrsVersionId :: Lens' GetObjectTaggingResponse (Maybe ObjectVersionId)
-gotrsVersionId = lens _gotrsVersionId (\ s a -> s{_gotrsVersionId = a});
+gotrsVersionId = lens _gotrsVersionId (\ s a -> s{_gotrsVersionId = a})
 
 -- | -- | The response status code.
 gotrsResponseStatus :: Lens' GetObjectTaggingResponse Int
-gotrsResponseStatus = lens _gotrsResponseStatus (\ s a -> s{_gotrsResponseStatus = a});
+gotrsResponseStatus = lens _gotrsResponseStatus (\ s a -> s{_gotrsResponseStatus = a})
 
 -- | Undocumented member.
 gotrsTagSet :: Lens' GetObjectTaggingResponse [Tag]
-gotrsTagSet = lens _gotrsTagSet (\ s a -> s{_gotrsTagSet = a}) . _Coerce;
+gotrsTagSet = lens _gotrsTagSet (\ s a -> s{_gotrsTagSet = a}) . _Coerce
 
 instance NFData GetObjectTaggingResponse where
diff --git a/gen/Network/AWS/S3/GetObjectTorrent.hs b/gen/Network/AWS/S3/GetObjectTorrent.hs
--- a/gen/Network/AWS/S3/GetObjectTorrent.hs
+++ b/gen/Network/AWS/S3/GetObjectTorrent.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.GetObjectTorrent
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -68,20 +68,20 @@
     -> GetObjectTorrent
 getObjectTorrent pBucket_ pKey_ =
   GetObjectTorrent'
-  {_gotRequestPayer = Nothing, _gotBucket = pBucket_, _gotKey = pKey_}
+    {_gotRequestPayer = Nothing, _gotBucket = pBucket_, _gotKey = pKey_}
 
 
 -- | Undocumented member.
 gotRequestPayer :: Lens' GetObjectTorrent (Maybe RequestPayer)
-gotRequestPayer = lens _gotRequestPayer (\ s a -> s{_gotRequestPayer = a});
+gotRequestPayer = lens _gotRequestPayer (\ s a -> s{_gotRequestPayer = a})
 
 -- | Undocumented member.
 gotBucket :: Lens' GetObjectTorrent BucketName
-gotBucket = lens _gotBucket (\ s a -> s{_gotBucket = a});
+gotBucket = lens _gotBucket (\ s a -> s{_gotBucket = a})
 
 -- | Undocumented member.
 gotKey :: Lens' GetObjectTorrent ObjectKey
-gotKey = lens _gotKey (\ s a -> s{_gotKey = a});
+gotKey = lens _gotKey (\ s a -> s{_gotKey = a})
 
 instance AWSRequest GetObjectTorrent where
         type Rs GetObjectTorrent = GetObjectTorrentResponse
@@ -132,20 +132,20 @@
     -> GetObjectTorrentResponse
 getObjectTorrentResponse pResponseStatus_ pBody_ =
   GetObjectTorrentResponse'
-  { _getrsRequestCharged = Nothing
-  , _getrsResponseStatus = pResponseStatus_
-  , _getrsBody = pBody_
-  }
+    { _getrsRequestCharged = Nothing
+    , _getrsResponseStatus = pResponseStatus_
+    , _getrsBody = pBody_
+    }
 
 
 -- | Undocumented member.
 getrsRequestCharged :: Lens' GetObjectTorrentResponse (Maybe RequestCharged)
-getrsRequestCharged = lens _getrsRequestCharged (\ s a -> s{_getrsRequestCharged = a});
+getrsRequestCharged = lens _getrsRequestCharged (\ s a -> s{_getrsRequestCharged = a})
 
 -- | -- | The response status code.
 getrsResponseStatus :: Lens' GetObjectTorrentResponse Int
-getrsResponseStatus = lens _getrsResponseStatus (\ s a -> s{_getrsResponseStatus = a});
+getrsResponseStatus = lens _getrsResponseStatus (\ s a -> s{_getrsResponseStatus = a})
 
 -- | Undocumented member.
 getrsBody :: Lens' GetObjectTorrentResponse RsBody
-getrsBody = lens _getrsBody (\ s a -> s{_getrsBody = a});
+getrsBody = lens _getrsBody (\ s a -> s{_getrsBody = a})
diff --git a/gen/Network/AWS/S3/HeadBucket.hs b/gen/Network/AWS/S3/HeadBucket.hs
--- a/gen/Network/AWS/S3/HeadBucket.hs
+++ b/gen/Network/AWS/S3/HeadBucket.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.HeadBucket
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -58,7 +58,7 @@
 
 -- | Undocumented member.
 hbBucket :: Lens' HeadBucket BucketName
-hbBucket = lens _hbBucket (\ s a -> s{_hbBucket = a});
+hbBucket = lens _hbBucket (\ s a -> s{_hbBucket = a})
 
 instance AWSRequest HeadBucket where
         type Rs HeadBucket = HeadBucketResponse
diff --git a/gen/Network/AWS/S3/HeadObject.hs b/gen/Network/AWS/S3/HeadObject.hs
--- a/gen/Network/AWS/S3/HeadObject.hs
+++ b/gen/Network/AWS/S3/HeadObject.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.HeadObject
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -131,73 +131,73 @@
     -> HeadObject
 headObject pBucket_ pKey_ =
   HeadObject'
-  { _hoIfMatch = Nothing
-  , _hoVersionId = Nothing
-  , _hoSSECustomerAlgorithm = Nothing
-  , _hoSSECustomerKey = Nothing
-  , _hoRequestPayer = Nothing
-  , _hoIfModifiedSince = Nothing
-  , _hoPartNumber = Nothing
-  , _hoRange = Nothing
-  , _hoIfUnmodifiedSince = Nothing
-  , _hoSSECustomerKeyMD5 = Nothing
-  , _hoIfNoneMatch = Nothing
-  , _hoBucket = pBucket_
-  , _hoKey = pKey_
-  }
+    { _hoIfMatch = Nothing
+    , _hoVersionId = Nothing
+    , _hoSSECustomerAlgorithm = Nothing
+    , _hoSSECustomerKey = Nothing
+    , _hoRequestPayer = Nothing
+    , _hoIfModifiedSince = Nothing
+    , _hoPartNumber = Nothing
+    , _hoRange = Nothing
+    , _hoIfUnmodifiedSince = Nothing
+    , _hoSSECustomerKeyMD5 = Nothing
+    , _hoIfNoneMatch = Nothing
+    , _hoBucket = pBucket_
+    , _hoKey = pKey_
+    }
 
 
 -- | Return the object only if its entity tag (ETag) is the same as the one specified, otherwise return a 412 (precondition failed).
 hoIfMatch :: Lens' HeadObject (Maybe Text)
-hoIfMatch = lens _hoIfMatch (\ s a -> s{_hoIfMatch = a});
+hoIfMatch = lens _hoIfMatch (\ s a -> s{_hoIfMatch = a})
 
 -- | VersionId used to reference a specific version of the object.
 hoVersionId :: Lens' HeadObject (Maybe ObjectVersionId)
-hoVersionId = lens _hoVersionId (\ s a -> s{_hoVersionId = a});
+hoVersionId = lens _hoVersionId (\ s a -> s{_hoVersionId = a})
 
 -- | Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 hoSSECustomerAlgorithm :: Lens' HeadObject (Maybe Text)
-hoSSECustomerAlgorithm = lens _hoSSECustomerAlgorithm (\ s a -> s{_hoSSECustomerAlgorithm = a});
+hoSSECustomerAlgorithm = lens _hoSSECustomerAlgorithm (\ s a -> s{_hoSSECustomerAlgorithm = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm header.
 hoSSECustomerKey :: Lens' HeadObject (Maybe Text)
-hoSSECustomerKey = lens _hoSSECustomerKey (\ s a -> s{_hoSSECustomerKey = a}) . mapping _Sensitive;
+hoSSECustomerKey = lens _hoSSECustomerKey (\ s a -> s{_hoSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Undocumented member.
 hoRequestPayer :: Lens' HeadObject (Maybe RequestPayer)
-hoRequestPayer = lens _hoRequestPayer (\ s a -> s{_hoRequestPayer = a});
+hoRequestPayer = lens _hoRequestPayer (\ s a -> s{_hoRequestPayer = a})
 
 -- | Return the object only if it has been modified since the specified time, otherwise return a 304 (not modified).
 hoIfModifiedSince :: Lens' HeadObject (Maybe UTCTime)
-hoIfModifiedSince = lens _hoIfModifiedSince (\ s a -> s{_hoIfModifiedSince = a}) . mapping _Time;
+hoIfModifiedSince = lens _hoIfModifiedSince (\ s a -> s{_hoIfModifiedSince = a}) . mapping _Time
 
 -- | Part number of the object being read. This is a positive integer between 1 and 10,000. Effectively performs a 'ranged' HEAD request for the part specified. Useful querying about the size of the part and the number of parts in this object.
 hoPartNumber :: Lens' HeadObject (Maybe Int)
-hoPartNumber = lens _hoPartNumber (\ s a -> s{_hoPartNumber = a});
+hoPartNumber = lens _hoPartNumber (\ s a -> s{_hoPartNumber = a})
 
 -- | Downloads the specified range bytes of an object. For more information about the HTTP Range header, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.
 hoRange :: Lens' HeadObject (Maybe Text)
-hoRange = lens _hoRange (\ s a -> s{_hoRange = a});
+hoRange = lens _hoRange (\ s a -> s{_hoRange = a})
 
 -- | Return the object only if it has not been modified since the specified time, otherwise return a 412 (precondition failed).
 hoIfUnmodifiedSince :: Lens' HeadObject (Maybe UTCTime)
-hoIfUnmodifiedSince = lens _hoIfUnmodifiedSince (\ s a -> s{_hoIfUnmodifiedSince = a}) . mapping _Time;
+hoIfUnmodifiedSince = lens _hoIfUnmodifiedSince (\ s a -> s{_hoIfUnmodifiedSince = a}) . mapping _Time
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 hoSSECustomerKeyMD5 :: Lens' HeadObject (Maybe Text)
-hoSSECustomerKeyMD5 = lens _hoSSECustomerKeyMD5 (\ s a -> s{_hoSSECustomerKeyMD5 = a});
+hoSSECustomerKeyMD5 = lens _hoSSECustomerKeyMD5 (\ s a -> s{_hoSSECustomerKeyMD5 = a})
 
 -- | Return the object only if its entity tag (ETag) is different from the one specified, otherwise return a 304 (not modified).
 hoIfNoneMatch :: Lens' HeadObject (Maybe Text)
-hoIfNoneMatch = lens _hoIfNoneMatch (\ s a -> s{_hoIfNoneMatch = a});
+hoIfNoneMatch = lens _hoIfNoneMatch (\ s a -> s{_hoIfNoneMatch = a})
 
 -- | Undocumented member.
 hoBucket :: Lens' HeadObject BucketName
-hoBucket = lens _hoBucket (\ s a -> s{_hoBucket = a});
+hoBucket = lens _hoBucket (\ s a -> s{_hoBucket = a})
 
 -- | Undocumented member.
 hoKey :: Lens' HeadObject ObjectKey
-hoKey = lens _hoKey (\ s a -> s{_hoKey = a});
+hoKey = lens _hoKey (\ s a -> s{_hoKey = a})
 
 instance AWSRequest HeadObject where
         type Rs HeadObject = HeadObjectResponse
@@ -359,137 +359,137 @@
     -> HeadObjectResponse
 headObjectResponse pResponseStatus_ =
   HeadObjectResponse'
-  { _horsRequestCharged = Nothing
-  , _horsPartsCount = Nothing
-  , _horsETag = Nothing
-  , _horsVersionId = Nothing
-  , _horsContentLength = Nothing
-  , _horsExpires = Nothing
-  , _horsRestore = Nothing
-  , _horsExpiration = Nothing
-  , _horsDeleteMarker = Nothing
-  , _horsSSECustomerAlgorithm = Nothing
-  , _horsMissingMeta = Nothing
-  , _horsWebsiteRedirectLocation = Nothing
-  , _horsAcceptRanges = Nothing
-  , _horsStorageClass = Nothing
-  , _horsSSECustomerKeyMD5 = Nothing
-  , _horsSSEKMSKeyId = Nothing
-  , _horsContentEncoding = Nothing
-  , _horsMetadata = mempty
-  , _horsReplicationStatus = Nothing
-  , _horsCacheControl = Nothing
-  , _horsContentLanguage = Nothing
-  , _horsLastModified = Nothing
-  , _horsContentDisposition = Nothing
-  , _horsServerSideEncryption = Nothing
-  , _horsContentType = Nothing
-  , _horsResponseStatus = pResponseStatus_
-  }
+    { _horsRequestCharged = Nothing
+    , _horsPartsCount = Nothing
+    , _horsETag = Nothing
+    , _horsVersionId = Nothing
+    , _horsContentLength = Nothing
+    , _horsExpires = Nothing
+    , _horsRestore = Nothing
+    , _horsExpiration = Nothing
+    , _horsDeleteMarker = Nothing
+    , _horsSSECustomerAlgorithm = Nothing
+    , _horsMissingMeta = Nothing
+    , _horsWebsiteRedirectLocation = Nothing
+    , _horsAcceptRanges = Nothing
+    , _horsStorageClass = Nothing
+    , _horsSSECustomerKeyMD5 = Nothing
+    , _horsSSEKMSKeyId = Nothing
+    , _horsContentEncoding = Nothing
+    , _horsMetadata = mempty
+    , _horsReplicationStatus = Nothing
+    , _horsCacheControl = Nothing
+    , _horsContentLanguage = Nothing
+    , _horsLastModified = Nothing
+    , _horsContentDisposition = Nothing
+    , _horsServerSideEncryption = Nothing
+    , _horsContentType = Nothing
+    , _horsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 horsRequestCharged :: Lens' HeadObjectResponse (Maybe RequestCharged)
-horsRequestCharged = lens _horsRequestCharged (\ s a -> s{_horsRequestCharged = a});
+horsRequestCharged = lens _horsRequestCharged (\ s a -> s{_horsRequestCharged = a})
 
 -- | The count of parts this object has.
 horsPartsCount :: Lens' HeadObjectResponse (Maybe Int)
-horsPartsCount = lens _horsPartsCount (\ s a -> s{_horsPartsCount = a});
+horsPartsCount = lens _horsPartsCount (\ s a -> s{_horsPartsCount = a})
 
 -- | An ETag is an opaque identifier assigned by a web server to a specific version of a resource found at a URL
 horsETag :: Lens' HeadObjectResponse (Maybe ETag)
-horsETag = lens _horsETag (\ s a -> s{_horsETag = a});
+horsETag = lens _horsETag (\ s a -> s{_horsETag = a})
 
 -- | Version of the object.
 horsVersionId :: Lens' HeadObjectResponse (Maybe ObjectVersionId)
-horsVersionId = lens _horsVersionId (\ s a -> s{_horsVersionId = a});
+horsVersionId = lens _horsVersionId (\ s a -> s{_horsVersionId = a})
 
 -- | Size of the body in bytes.
 horsContentLength :: Lens' HeadObjectResponse (Maybe Integer)
-horsContentLength = lens _horsContentLength (\ s a -> s{_horsContentLength = a});
+horsContentLength = lens _horsContentLength (\ s a -> s{_horsContentLength = a})
 
 -- | The date and time at which the object is no longer cacheable.
 horsExpires :: Lens' HeadObjectResponse (Maybe UTCTime)
-horsExpires = lens _horsExpires (\ s a -> s{_horsExpires = a}) . mapping _Time;
+horsExpires = lens _horsExpires (\ s a -> s{_horsExpires = a}) . mapping _Time
 
 -- | Provides information about object restoration operation and expiration time of the restored object copy.
 horsRestore :: Lens' HeadObjectResponse (Maybe Text)
-horsRestore = lens _horsRestore (\ s a -> s{_horsRestore = a});
+horsRestore = lens _horsRestore (\ s a -> s{_horsRestore = a})
 
 -- | If the object expiration is configured (see PUT Bucket lifecycle), the response includes this header. It includes the expiry-date and rule-id key value pairs providing object expiration information. The value of the rule-id is URL encoded.
 horsExpiration :: Lens' HeadObjectResponse (Maybe Text)
-horsExpiration = lens _horsExpiration (\ s a -> s{_horsExpiration = a});
+horsExpiration = lens _horsExpiration (\ s a -> s{_horsExpiration = a})
 
 -- | Specifies whether the object retrieved was (true) or was not (false) a Delete Marker. If false, this response header does not appear in the response.
 horsDeleteMarker :: Lens' HeadObjectResponse (Maybe Bool)
-horsDeleteMarker = lens _horsDeleteMarker (\ s a -> s{_horsDeleteMarker = a});
+horsDeleteMarker = lens _horsDeleteMarker (\ s a -> s{_horsDeleteMarker = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 horsSSECustomerAlgorithm :: Lens' HeadObjectResponse (Maybe Text)
-horsSSECustomerAlgorithm = lens _horsSSECustomerAlgorithm (\ s a -> s{_horsSSECustomerAlgorithm = a});
+horsSSECustomerAlgorithm = lens _horsSSECustomerAlgorithm (\ s a -> s{_horsSSECustomerAlgorithm = a})
 
 -- | This is set to the number of metadata entries not returned in x-amz-meta headers. This can happen if you create metadata using an API like SOAP that supports more flexible metadata than the REST API. For example, using SOAP, you can create metadata whose values are not legal HTTP headers.
 horsMissingMeta :: Lens' HeadObjectResponse (Maybe Int)
-horsMissingMeta = lens _horsMissingMeta (\ s a -> s{_horsMissingMeta = a});
+horsMissingMeta = lens _horsMissingMeta (\ s a -> s{_horsMissingMeta = a})
 
 -- | If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.
 horsWebsiteRedirectLocation :: Lens' HeadObjectResponse (Maybe Text)
-horsWebsiteRedirectLocation = lens _horsWebsiteRedirectLocation (\ s a -> s{_horsWebsiteRedirectLocation = a});
+horsWebsiteRedirectLocation = lens _horsWebsiteRedirectLocation (\ s a -> s{_horsWebsiteRedirectLocation = a})
 
 -- | Undocumented member.
 horsAcceptRanges :: Lens' HeadObjectResponse (Maybe Text)
-horsAcceptRanges = lens _horsAcceptRanges (\ s a -> s{_horsAcceptRanges = a});
+horsAcceptRanges = lens _horsAcceptRanges (\ s a -> s{_horsAcceptRanges = a})
 
 -- | Undocumented member.
 horsStorageClass :: Lens' HeadObjectResponse (Maybe StorageClass)
-horsStorageClass = lens _horsStorageClass (\ s a -> s{_horsStorageClass = a});
+horsStorageClass = lens _horsStorageClass (\ s a -> s{_horsStorageClass = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header to provide round trip message integrity verification of the customer-provided encryption key.
 horsSSECustomerKeyMD5 :: Lens' HeadObjectResponse (Maybe Text)
-horsSSECustomerKeyMD5 = lens _horsSSECustomerKeyMD5 (\ s a -> s{_horsSSECustomerKeyMD5 = a});
+horsSSECustomerKeyMD5 = lens _horsSSECustomerKeyMD5 (\ s a -> s{_horsSSECustomerKeyMD5 = a})
 
 -- | If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 horsSSEKMSKeyId :: Lens' HeadObjectResponse (Maybe Text)
-horsSSEKMSKeyId = lens _horsSSEKMSKeyId (\ s a -> s{_horsSSEKMSKeyId = a}) . mapping _Sensitive;
+horsSSEKMSKeyId = lens _horsSSEKMSKeyId (\ s a -> s{_horsSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field.
 horsContentEncoding :: Lens' HeadObjectResponse (Maybe Text)
-horsContentEncoding = lens _horsContentEncoding (\ s a -> s{_horsContentEncoding = a});
+horsContentEncoding = lens _horsContentEncoding (\ s a -> s{_horsContentEncoding = a})
 
 -- | A map of metadata to store with the object in S3.
 horsMetadata :: Lens' HeadObjectResponse (HashMap Text Text)
-horsMetadata = lens _horsMetadata (\ s a -> s{_horsMetadata = a}) . _Map;
+horsMetadata = lens _horsMetadata (\ s a -> s{_horsMetadata = a}) . _Map
 
 -- | Undocumented member.
 horsReplicationStatus :: Lens' HeadObjectResponse (Maybe ReplicationStatus)
-horsReplicationStatus = lens _horsReplicationStatus (\ s a -> s{_horsReplicationStatus = a});
+horsReplicationStatus = lens _horsReplicationStatus (\ s a -> s{_horsReplicationStatus = a})
 
 -- | Specifies caching behavior along the request/reply chain.
 horsCacheControl :: Lens' HeadObjectResponse (Maybe Text)
-horsCacheControl = lens _horsCacheControl (\ s a -> s{_horsCacheControl = a});
+horsCacheControl = lens _horsCacheControl (\ s a -> s{_horsCacheControl = a})
 
 -- | The language the content is in.
 horsContentLanguage :: Lens' HeadObjectResponse (Maybe Text)
-horsContentLanguage = lens _horsContentLanguage (\ s a -> s{_horsContentLanguage = a});
+horsContentLanguage = lens _horsContentLanguage (\ s a -> s{_horsContentLanguage = a})
 
 -- | Last modified date of the object
 horsLastModified :: Lens' HeadObjectResponse (Maybe UTCTime)
-horsLastModified = lens _horsLastModified (\ s a -> s{_horsLastModified = a}) . mapping _Time;
+horsLastModified = lens _horsLastModified (\ s a -> s{_horsLastModified = a}) . mapping _Time
 
 -- | Specifies presentational information for the object.
 horsContentDisposition :: Lens' HeadObjectResponse (Maybe Text)
-horsContentDisposition = lens _horsContentDisposition (\ s a -> s{_horsContentDisposition = a});
+horsContentDisposition = lens _horsContentDisposition (\ s a -> s{_horsContentDisposition = a})
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 horsServerSideEncryption :: Lens' HeadObjectResponse (Maybe ServerSideEncryption)
-horsServerSideEncryption = lens _horsServerSideEncryption (\ s a -> s{_horsServerSideEncryption = a});
+horsServerSideEncryption = lens _horsServerSideEncryption (\ s a -> s{_horsServerSideEncryption = a})
 
 -- | A standard MIME type describing the format of the object data.
 horsContentType :: Lens' HeadObjectResponse (Maybe Text)
-horsContentType = lens _horsContentType (\ s a -> s{_horsContentType = a});
+horsContentType = lens _horsContentType (\ s a -> s{_horsContentType = a})
 
 -- | -- | The response status code.
 horsResponseStatus :: Lens' HeadObjectResponse Int
-horsResponseStatus = lens _horsResponseStatus (\ s a -> s{_horsResponseStatus = a});
+horsResponseStatus = lens _horsResponseStatus (\ s a -> s{_horsResponseStatus = a})
 
 instance NFData HeadObjectResponse where
diff --git a/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs b/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs
--- a/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs
+++ b/gen/Network/AWS/S3/ListBucketAnalyticsConfigurations.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListBucketAnalyticsConfigurations
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -65,16 +65,16 @@
     -> ListBucketAnalyticsConfigurations
 listBucketAnalyticsConfigurations pBucket_ =
   ListBucketAnalyticsConfigurations'
-  {_lbacContinuationToken = Nothing, _lbacBucket = pBucket_}
+    {_lbacContinuationToken = Nothing, _lbacBucket = pBucket_}
 
 
 -- | The ContinuationToken that represents a placeholder from where this request should begin.
 lbacContinuationToken :: Lens' ListBucketAnalyticsConfigurations (Maybe Text)
-lbacContinuationToken = lens _lbacContinuationToken (\ s a -> s{_lbacContinuationToken = a});
+lbacContinuationToken = lens _lbacContinuationToken (\ s a -> s{_lbacContinuationToken = a})
 
 -- | The name of the bucket from which analytics configurations are retrieved.
 lbacBucket :: Lens' ListBucketAnalyticsConfigurations BucketName
-lbacBucket = lens _lbacBucket (\ s a -> s{_lbacBucket = a});
+lbacBucket = lens _lbacBucket (\ s a -> s{_lbacBucket = a})
 
 instance AWSRequest ListBucketAnalyticsConfigurations
          where
@@ -141,33 +141,33 @@
     -> ListBucketAnalyticsConfigurationsResponse
 listBucketAnalyticsConfigurationsResponse pResponseStatus_ =
   ListBucketAnalyticsConfigurationsResponse'
-  { _lbacrsAnalyticsConfigurationList = Nothing
-  , _lbacrsContinuationToken = Nothing
-  , _lbacrsNextContinuationToken = Nothing
-  , _lbacrsIsTruncated = Nothing
-  , _lbacrsResponseStatus = pResponseStatus_
-  }
+    { _lbacrsAnalyticsConfigurationList = Nothing
+    , _lbacrsContinuationToken = Nothing
+    , _lbacrsNextContinuationToken = Nothing
+    , _lbacrsIsTruncated = Nothing
+    , _lbacrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | The list of analytics configurations for a bucket.
 lbacrsAnalyticsConfigurationList :: Lens' ListBucketAnalyticsConfigurationsResponse [AnalyticsConfiguration]
-lbacrsAnalyticsConfigurationList = lens _lbacrsAnalyticsConfigurationList (\ s a -> s{_lbacrsAnalyticsConfigurationList = a}) . _Default . _Coerce;
+lbacrsAnalyticsConfigurationList = lens _lbacrsAnalyticsConfigurationList (\ s a -> s{_lbacrsAnalyticsConfigurationList = a}) . _Default . _Coerce
 
 -- | The ContinuationToken that represents where this request began.
 lbacrsContinuationToken :: Lens' ListBucketAnalyticsConfigurationsResponse (Maybe Text)
-lbacrsContinuationToken = lens _lbacrsContinuationToken (\ s a -> s{_lbacrsContinuationToken = a});
+lbacrsContinuationToken = lens _lbacrsContinuationToken (\ s a -> s{_lbacrsContinuationToken = a})
 
 -- | NextContinuationToken is sent when isTruncated is true, which indicates that there are more analytics configurations to list. The next request must include this NextContinuationToken. The token is obfuscated and is not a usable value.
 lbacrsNextContinuationToken :: Lens' ListBucketAnalyticsConfigurationsResponse (Maybe Text)
-lbacrsNextContinuationToken = lens _lbacrsNextContinuationToken (\ s a -> s{_lbacrsNextContinuationToken = a});
+lbacrsNextContinuationToken = lens _lbacrsNextContinuationToken (\ s a -> s{_lbacrsNextContinuationToken = a})
 
 -- | Indicates whether the returned list of analytics configurations is complete. A value of true indicates that the list is not complete and the NextContinuationToken will be provided for a subsequent request.
 lbacrsIsTruncated :: Lens' ListBucketAnalyticsConfigurationsResponse (Maybe Bool)
-lbacrsIsTruncated = lens _lbacrsIsTruncated (\ s a -> s{_lbacrsIsTruncated = a});
+lbacrsIsTruncated = lens _lbacrsIsTruncated (\ s a -> s{_lbacrsIsTruncated = a})
 
 -- | -- | The response status code.
 lbacrsResponseStatus :: Lens' ListBucketAnalyticsConfigurationsResponse Int
-lbacrsResponseStatus = lens _lbacrsResponseStatus (\ s a -> s{_lbacrsResponseStatus = a});
+lbacrsResponseStatus = lens _lbacrsResponseStatus (\ s a -> s{_lbacrsResponseStatus = a})
 
 instance NFData
            ListBucketAnalyticsConfigurationsResponse
diff --git a/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs b/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs
--- a/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs
+++ b/gen/Network/AWS/S3/ListBucketInventoryConfigurations.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListBucketInventoryConfigurations
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -65,16 +65,16 @@
     -> ListBucketInventoryConfigurations
 listBucketInventoryConfigurations pBucket_ =
   ListBucketInventoryConfigurations'
-  {_lbicContinuationToken = Nothing, _lbicBucket = pBucket_}
+    {_lbicContinuationToken = Nothing, _lbicBucket = pBucket_}
 
 
 -- | The marker used to continue an inventory configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
 lbicContinuationToken :: Lens' ListBucketInventoryConfigurations (Maybe Text)
-lbicContinuationToken = lens _lbicContinuationToken (\ s a -> s{_lbicContinuationToken = a});
+lbicContinuationToken = lens _lbicContinuationToken (\ s a -> s{_lbicContinuationToken = a})
 
 -- | The name of the bucket containing the inventory configurations to retrieve.
 lbicBucket :: Lens' ListBucketInventoryConfigurations BucketName
-lbicBucket = lens _lbicBucket (\ s a -> s{_lbicBucket = a});
+lbicBucket = lens _lbicBucket (\ s a -> s{_lbicBucket = a})
 
 instance AWSRequest ListBucketInventoryConfigurations
          where
@@ -141,33 +141,33 @@
     -> ListBucketInventoryConfigurationsResponse
 listBucketInventoryConfigurationsResponse pResponseStatus_ =
   ListBucketInventoryConfigurationsResponse'
-  { _lbicrsContinuationToken = Nothing
-  , _lbicrsInventoryConfigurationList = Nothing
-  , _lbicrsNextContinuationToken = Nothing
-  , _lbicrsIsTruncated = Nothing
-  , _lbicrsResponseStatus = pResponseStatus_
-  }
+    { _lbicrsContinuationToken = Nothing
+    , _lbicrsInventoryConfigurationList = Nothing
+    , _lbicrsNextContinuationToken = Nothing
+    , _lbicrsIsTruncated = Nothing
+    , _lbicrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | If sent in the request, the marker that is used as a starting point for this inventory configuration list response.
 lbicrsContinuationToken :: Lens' ListBucketInventoryConfigurationsResponse (Maybe Text)
-lbicrsContinuationToken = lens _lbicrsContinuationToken (\ s a -> s{_lbicrsContinuationToken = a});
+lbicrsContinuationToken = lens _lbicrsContinuationToken (\ s a -> s{_lbicrsContinuationToken = a})
 
 -- | The list of inventory configurations for a bucket.
 lbicrsInventoryConfigurationList :: Lens' ListBucketInventoryConfigurationsResponse [InventoryConfiguration]
-lbicrsInventoryConfigurationList = lens _lbicrsInventoryConfigurationList (\ s a -> s{_lbicrsInventoryConfigurationList = a}) . _Default . _Coerce;
+lbicrsInventoryConfigurationList = lens _lbicrsInventoryConfigurationList (\ s a -> s{_lbicrsInventoryConfigurationList = a}) . _Default . _Coerce
 
 -- | The marker used to continue this inventory configuration listing. Use the NextContinuationToken from this response to continue the listing in a subsequent request. The continuation token is an opaque value that Amazon S3 understands.
 lbicrsNextContinuationToken :: Lens' ListBucketInventoryConfigurationsResponse (Maybe Text)
-lbicrsNextContinuationToken = lens _lbicrsNextContinuationToken (\ s a -> s{_lbicrsNextContinuationToken = a});
+lbicrsNextContinuationToken = lens _lbicrsNextContinuationToken (\ s a -> s{_lbicrsNextContinuationToken = a})
 
 -- | Indicates whether the returned list of inventory configurations is truncated in this response. A value of true indicates that the list is truncated.
 lbicrsIsTruncated :: Lens' ListBucketInventoryConfigurationsResponse (Maybe Bool)
-lbicrsIsTruncated = lens _lbicrsIsTruncated (\ s a -> s{_lbicrsIsTruncated = a});
+lbicrsIsTruncated = lens _lbicrsIsTruncated (\ s a -> s{_lbicrsIsTruncated = a})
 
 -- | -- | The response status code.
 lbicrsResponseStatus :: Lens' ListBucketInventoryConfigurationsResponse Int
-lbicrsResponseStatus = lens _lbicrsResponseStatus (\ s a -> s{_lbicrsResponseStatus = a});
+lbicrsResponseStatus = lens _lbicrsResponseStatus (\ s a -> s{_lbicrsResponseStatus = a})
 
 instance NFData
            ListBucketInventoryConfigurationsResponse
diff --git a/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs b/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs
--- a/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs
+++ b/gen/Network/AWS/S3/ListBucketMetricsConfigurations.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListBucketMetricsConfigurations
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -65,16 +65,16 @@
     -> ListBucketMetricsConfigurations
 listBucketMetricsConfigurations pBucket_ =
   ListBucketMetricsConfigurations'
-  {_lbmcContinuationToken = Nothing, _lbmcBucket = pBucket_}
+    {_lbmcContinuationToken = Nothing, _lbmcBucket = pBucket_}
 
 
 -- | The marker that is used to continue a metrics configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
 lbmcContinuationToken :: Lens' ListBucketMetricsConfigurations (Maybe Text)
-lbmcContinuationToken = lens _lbmcContinuationToken (\ s a -> s{_lbmcContinuationToken = a});
+lbmcContinuationToken = lens _lbmcContinuationToken (\ s a -> s{_lbmcContinuationToken = a})
 
 -- | The name of the bucket containing the metrics configurations to retrieve.
 lbmcBucket :: Lens' ListBucketMetricsConfigurations BucketName
-lbmcBucket = lens _lbmcBucket (\ s a -> s{_lbmcBucket = a});
+lbmcBucket = lens _lbmcBucket (\ s a -> s{_lbmcBucket = a})
 
 instance AWSRequest ListBucketMetricsConfigurations
          where
@@ -139,33 +139,33 @@
     -> ListBucketMetricsConfigurationsResponse
 listBucketMetricsConfigurationsResponse pResponseStatus_ =
   ListBucketMetricsConfigurationsResponse'
-  { _lbmcrsContinuationToken = Nothing
-  , _lbmcrsMetricsConfigurationList = Nothing
-  , _lbmcrsNextContinuationToken = Nothing
-  , _lbmcrsIsTruncated = Nothing
-  , _lbmcrsResponseStatus = pResponseStatus_
-  }
+    { _lbmcrsContinuationToken = Nothing
+    , _lbmcrsMetricsConfigurationList = Nothing
+    , _lbmcrsNextContinuationToken = Nothing
+    , _lbmcrsIsTruncated = Nothing
+    , _lbmcrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | The marker that is used as a starting point for this metrics configuration list response. This value is present if it was sent in the request.
 lbmcrsContinuationToken :: Lens' ListBucketMetricsConfigurationsResponse (Maybe Text)
-lbmcrsContinuationToken = lens _lbmcrsContinuationToken (\ s a -> s{_lbmcrsContinuationToken = a});
+lbmcrsContinuationToken = lens _lbmcrsContinuationToken (\ s a -> s{_lbmcrsContinuationToken = a})
 
 -- | The list of metrics configurations for a bucket.
 lbmcrsMetricsConfigurationList :: Lens' ListBucketMetricsConfigurationsResponse [MetricsConfiguration]
-lbmcrsMetricsConfigurationList = lens _lbmcrsMetricsConfigurationList (\ s a -> s{_lbmcrsMetricsConfigurationList = a}) . _Default . _Coerce;
+lbmcrsMetricsConfigurationList = lens _lbmcrsMetricsConfigurationList (\ s a -> s{_lbmcrsMetricsConfigurationList = a}) . _Default . _Coerce
 
 -- | The marker used to continue a metrics configuration listing that has been truncated. Use the NextContinuationToken from a previously truncated list response to continue the listing. The continuation token is an opaque value that Amazon S3 understands.
 lbmcrsNextContinuationToken :: Lens' ListBucketMetricsConfigurationsResponse (Maybe Text)
-lbmcrsNextContinuationToken = lens _lbmcrsNextContinuationToken (\ s a -> s{_lbmcrsNextContinuationToken = a});
+lbmcrsNextContinuationToken = lens _lbmcrsNextContinuationToken (\ s a -> s{_lbmcrsNextContinuationToken = a})
 
 -- | Indicates whether the returned list of metrics configurations is complete. A value of true indicates that the list is not complete and the NextContinuationToken will be provided for a subsequent request.
 lbmcrsIsTruncated :: Lens' ListBucketMetricsConfigurationsResponse (Maybe Bool)
-lbmcrsIsTruncated = lens _lbmcrsIsTruncated (\ s a -> s{_lbmcrsIsTruncated = a});
+lbmcrsIsTruncated = lens _lbmcrsIsTruncated (\ s a -> s{_lbmcrsIsTruncated = a})
 
 -- | -- | The response status code.
 lbmcrsResponseStatus :: Lens' ListBucketMetricsConfigurationsResponse Int
-lbmcrsResponseStatus = lens _lbmcrsResponseStatus (\ s a -> s{_lbmcrsResponseStatus = a});
+lbmcrsResponseStatus = lens _lbmcrsResponseStatus (\ s a -> s{_lbmcrsResponseStatus = a})
 
 instance NFData
            ListBucketMetricsConfigurationsResponse
diff --git a/gen/Network/AWS/S3/ListBuckets.hs b/gen/Network/AWS/S3/ListBuckets.hs
--- a/gen/Network/AWS/S3/ListBuckets.hs
+++ b/gen/Network/AWS/S3/ListBuckets.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListBuckets
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -101,22 +101,22 @@
     -> ListBucketsResponse
 listBucketsResponse pResponseStatus_ =
   ListBucketsResponse'
-  { _lbrsBuckets = Nothing
-  , _lbrsOwner = Nothing
-  , _lbrsResponseStatus = pResponseStatus_
-  }
+    { _lbrsBuckets = Nothing
+    , _lbrsOwner = Nothing
+    , _lbrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 lbrsBuckets :: Lens' ListBucketsResponse [Bucket]
-lbrsBuckets = lens _lbrsBuckets (\ s a -> s{_lbrsBuckets = a}) . _Default . _Coerce;
+lbrsBuckets = lens _lbrsBuckets (\ s a -> s{_lbrsBuckets = a}) . _Default . _Coerce
 
 -- | Undocumented member.
 lbrsOwner :: Lens' ListBucketsResponse (Maybe Owner)
-lbrsOwner = lens _lbrsOwner (\ s a -> s{_lbrsOwner = a});
+lbrsOwner = lens _lbrsOwner (\ s a -> s{_lbrsOwner = a})
 
 -- | -- | The response status code.
 lbrsResponseStatus :: Lens' ListBucketsResponse Int
-lbrsResponseStatus = lens _lbrsResponseStatus (\ s a -> s{_lbrsResponseStatus = a});
+lbrsResponseStatus = lens _lbrsResponseStatus (\ s a -> s{_lbrsResponseStatus = a})
 
 instance NFData ListBucketsResponse where
diff --git a/gen/Network/AWS/S3/ListMultipartUploads.hs b/gen/Network/AWS/S3/ListMultipartUploads.hs
--- a/gen/Network/AWS/S3/ListMultipartUploads.hs
+++ b/gen/Network/AWS/S3/ListMultipartUploads.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListMultipartUploads
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -96,43 +96,43 @@
     -> ListMultipartUploads
 listMultipartUploads pBucket_ =
   ListMultipartUploads'
-  { _lmuKeyMarker = Nothing
-  , _lmuPrefix = Nothing
-  , _lmuEncodingType = Nothing
-  , _lmuUploadIdMarker = Nothing
-  , _lmuMaxUploads = Nothing
-  , _lmuDelimiter = Nothing
-  , _lmuBucket = pBucket_
-  }
+    { _lmuKeyMarker = Nothing
+    , _lmuPrefix = Nothing
+    , _lmuEncodingType = Nothing
+    , _lmuUploadIdMarker = Nothing
+    , _lmuMaxUploads = Nothing
+    , _lmuDelimiter = Nothing
+    , _lmuBucket = pBucket_
+    }
 
 
 -- | Together with upload-id-marker, this parameter specifies the multipart upload after which listing should begin.
 lmuKeyMarker :: Lens' ListMultipartUploads (Maybe Text)
-lmuKeyMarker = lens _lmuKeyMarker (\ s a -> s{_lmuKeyMarker = a});
+lmuKeyMarker = lens _lmuKeyMarker (\ s a -> s{_lmuKeyMarker = a})
 
 -- | Lists in-progress uploads only for those keys that begin with the specified prefix.
 lmuPrefix :: Lens' ListMultipartUploads (Maybe Text)
-lmuPrefix = lens _lmuPrefix (\ s a -> s{_lmuPrefix = a});
+lmuPrefix = lens _lmuPrefix (\ s a -> s{_lmuPrefix = a})
 
 -- | Undocumented member.
 lmuEncodingType :: Lens' ListMultipartUploads (Maybe EncodingType)
-lmuEncodingType = lens _lmuEncodingType (\ s a -> s{_lmuEncodingType = a});
+lmuEncodingType = lens _lmuEncodingType (\ s a -> s{_lmuEncodingType = a})
 
 -- | Together with key-marker, specifies the multipart upload after which listing should begin. If key-marker is not specified, the upload-id-marker parameter is ignored.
 lmuUploadIdMarker :: Lens' ListMultipartUploads (Maybe Text)
-lmuUploadIdMarker = lens _lmuUploadIdMarker (\ s a -> s{_lmuUploadIdMarker = a});
+lmuUploadIdMarker = lens _lmuUploadIdMarker (\ s a -> s{_lmuUploadIdMarker = a})
 
 -- | Sets the maximum number of multipart uploads, from 1 to 1,000, to return in the response body. 1,000 is the maximum number of uploads that can be returned in a response.
 lmuMaxUploads :: Lens' ListMultipartUploads (Maybe Int)
-lmuMaxUploads = lens _lmuMaxUploads (\ s a -> s{_lmuMaxUploads = a});
+lmuMaxUploads = lens _lmuMaxUploads (\ s a -> s{_lmuMaxUploads = a})
 
 -- | Character you use to group keys.
 lmuDelimiter :: Lens' ListMultipartUploads (Maybe Delimiter)
-lmuDelimiter = lens _lmuDelimiter (\ s a -> s{_lmuDelimiter = a});
+lmuDelimiter = lens _lmuDelimiter (\ s a -> s{_lmuDelimiter = a})
 
 -- | Undocumented member.
 lmuBucket :: Lens' ListMultipartUploads BucketName
-lmuBucket = lens _lmuBucket (\ s a -> s{_lmuBucket = a});
+lmuBucket = lens _lmuBucket (\ s a -> s{_lmuBucket = a})
 
 instance AWSPager ListMultipartUploads where
         page rq rs
@@ -238,72 +238,72 @@
     -> ListMultipartUploadsResponse
 listMultipartUploadsResponse pResponseStatus_ =
   ListMultipartUploadsResponse'
-  { _lmursKeyMarker = Nothing
-  , _lmursPrefix = Nothing
-  , _lmursCommonPrefixes = Nothing
-  , _lmursEncodingType = Nothing
-  , _lmursBucket = Nothing
-  , _lmursUploadIdMarker = Nothing
-  , _lmursMaxUploads = Nothing
-  , _lmursNextKeyMarker = Nothing
-  , _lmursUploads = Nothing
-  , _lmursIsTruncated = Nothing
-  , _lmursNextUploadIdMarker = Nothing
-  , _lmursDelimiter = Nothing
-  , _lmursResponseStatus = pResponseStatus_
-  }
+    { _lmursKeyMarker = Nothing
+    , _lmursPrefix = Nothing
+    , _lmursCommonPrefixes = Nothing
+    , _lmursEncodingType = Nothing
+    , _lmursBucket = Nothing
+    , _lmursUploadIdMarker = Nothing
+    , _lmursMaxUploads = Nothing
+    , _lmursNextKeyMarker = Nothing
+    , _lmursUploads = Nothing
+    , _lmursIsTruncated = Nothing
+    , _lmursNextUploadIdMarker = Nothing
+    , _lmursDelimiter = Nothing
+    , _lmursResponseStatus = pResponseStatus_
+    }
 
 
 -- | The key at or after which the listing began.
 lmursKeyMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmursKeyMarker = lens _lmursKeyMarker (\ s a -> s{_lmursKeyMarker = a});
+lmursKeyMarker = lens _lmursKeyMarker (\ s a -> s{_lmursKeyMarker = a})
 
 -- | When a prefix is provided in the request, this field contains the specified prefix. The result contains only keys starting with the specified prefix.
 lmursPrefix :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmursPrefix = lens _lmursPrefix (\ s a -> s{_lmursPrefix = a});
+lmursPrefix = lens _lmursPrefix (\ s a -> s{_lmursPrefix = a})
 
 -- | Undocumented member.
 lmursCommonPrefixes :: Lens' ListMultipartUploadsResponse [CommonPrefix]
-lmursCommonPrefixes = lens _lmursCommonPrefixes (\ s a -> s{_lmursCommonPrefixes = a}) . _Default . _Coerce;
+lmursCommonPrefixes = lens _lmursCommonPrefixes (\ s a -> s{_lmursCommonPrefixes = a}) . _Default . _Coerce
 
 -- | Encoding type used by Amazon S3 to encode object keys in the response.
 lmursEncodingType :: Lens' ListMultipartUploadsResponse (Maybe EncodingType)
-lmursEncodingType = lens _lmursEncodingType (\ s a -> s{_lmursEncodingType = a});
+lmursEncodingType = lens _lmursEncodingType (\ s a -> s{_lmursEncodingType = a})
 
 -- | Name of the bucket to which the multipart upload was initiated.
 lmursBucket :: Lens' ListMultipartUploadsResponse (Maybe BucketName)
-lmursBucket = lens _lmursBucket (\ s a -> s{_lmursBucket = a});
+lmursBucket = lens _lmursBucket (\ s a -> s{_lmursBucket = a})
 
 -- | Upload ID after which listing began.
 lmursUploadIdMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmursUploadIdMarker = lens _lmursUploadIdMarker (\ s a -> s{_lmursUploadIdMarker = a});
+lmursUploadIdMarker = lens _lmursUploadIdMarker (\ s a -> s{_lmursUploadIdMarker = a})
 
 -- | Maximum number of multipart uploads that could have been included in the response.
 lmursMaxUploads :: Lens' ListMultipartUploadsResponse (Maybe Int)
-lmursMaxUploads = lens _lmursMaxUploads (\ s a -> s{_lmursMaxUploads = a});
+lmursMaxUploads = lens _lmursMaxUploads (\ s a -> s{_lmursMaxUploads = a})
 
 -- | When a list is truncated, this element specifies the value that should be used for the key-marker request parameter in a subsequent request.
 lmursNextKeyMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmursNextKeyMarker = lens _lmursNextKeyMarker (\ s a -> s{_lmursNextKeyMarker = a});
+lmursNextKeyMarker = lens _lmursNextKeyMarker (\ s a -> s{_lmursNextKeyMarker = a})
 
 -- | Undocumented member.
 lmursUploads :: Lens' ListMultipartUploadsResponse [MultipartUpload]
-lmursUploads = lens _lmursUploads (\ s a -> s{_lmursUploads = a}) . _Default . _Coerce;
+lmursUploads = lens _lmursUploads (\ s a -> s{_lmursUploads = a}) . _Default . _Coerce
 
 -- | Indicates whether the returned list of multipart uploads is truncated. A value of true indicates that the list was truncated. The list can be truncated if the number of multipart uploads exceeds the limit allowed or specified by max uploads.
 lmursIsTruncated :: Lens' ListMultipartUploadsResponse (Maybe Bool)
-lmursIsTruncated = lens _lmursIsTruncated (\ s a -> s{_lmursIsTruncated = a});
+lmursIsTruncated = lens _lmursIsTruncated (\ s a -> s{_lmursIsTruncated = a})
 
 -- | When a list is truncated, this element specifies the value that should be used for the upload-id-marker request parameter in a subsequent request.
 lmursNextUploadIdMarker :: Lens' ListMultipartUploadsResponse (Maybe Text)
-lmursNextUploadIdMarker = lens _lmursNextUploadIdMarker (\ s a -> s{_lmursNextUploadIdMarker = a});
+lmursNextUploadIdMarker = lens _lmursNextUploadIdMarker (\ s a -> s{_lmursNextUploadIdMarker = a})
 
 -- | Undocumented member.
 lmursDelimiter :: Lens' ListMultipartUploadsResponse (Maybe Delimiter)
-lmursDelimiter = lens _lmursDelimiter (\ s a -> s{_lmursDelimiter = a});
+lmursDelimiter = lens _lmursDelimiter (\ s a -> s{_lmursDelimiter = a})
 
 -- | -- | The response status code.
 lmursResponseStatus :: Lens' ListMultipartUploadsResponse Int
-lmursResponseStatus = lens _lmursResponseStatus (\ s a -> s{_lmursResponseStatus = a});
+lmursResponseStatus = lens _lmursResponseStatus (\ s a -> s{_lmursResponseStatus = a})
 
 instance NFData ListMultipartUploadsResponse where
diff --git a/gen/Network/AWS/S3/ListObjectVersions.hs b/gen/Network/AWS/S3/ListObjectVersions.hs
--- a/gen/Network/AWS/S3/ListObjectVersions.hs
+++ b/gen/Network/AWS/S3/ListObjectVersions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListObjectVersions
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -27,32 +27,32 @@
       listObjectVersions
     , ListObjectVersions
     -- * Request Lenses
-    , lovKeyMarker
-    , lovPrefix
-    , lovEncodingType
-    , lovVersionIdMarker
-    , lovMaxKeys
-    , lovDelimiter
-    , lovBucket
+    , lKeyMarker
+    , lPrefix
+    , lEncodingType
+    , lVersionIdMarker
+    , lMaxKeys
+    , lDelimiter
+    , lBucket
 
     -- * Destructuring the Response
     , listObjectVersionsResponse
     , ListObjectVersionsResponse
     -- * Response Lenses
-    , lovrsNextVersionIdMarker
-    , lovrsKeyMarker
-    , lovrsDeleteMarkers
-    , lovrsPrefix
-    , lovrsCommonPrefixes
-    , lovrsEncodingType
-    , lovrsVersions
-    , lovrsName
-    , lovrsNextKeyMarker
-    , lovrsVersionIdMarker
-    , lovrsMaxKeys
-    , lovrsIsTruncated
-    , lovrsDelimiter
-    , lovrsResponseStatus
+    , lrsNextVersionIdMarker
+    , lrsKeyMarker
+    , lrsDeleteMarkers
+    , lrsPrefix
+    , lrsCommonPrefixes
+    , lrsEncodingType
+    , lrsVersions
+    , lrsName
+    , lrsNextKeyMarker
+    , lrsVersionIdMarker
+    , lrsMaxKeys
+    , lrsIsTruncated
+    , lrsDelimiter
+    , lrsResponseStatus
     ) where
 
 import Network.AWS.Lens
@@ -65,13 +65,13 @@
 
 -- | /See:/ 'listObjectVersions' smart constructor.
 data ListObjectVersions = ListObjectVersions'
-  { _lovKeyMarker       :: !(Maybe Text)
-  , _lovPrefix          :: !(Maybe Text)
-  , _lovEncodingType    :: !(Maybe EncodingType)
-  , _lovVersionIdMarker :: !(Maybe Text)
-  , _lovMaxKeys         :: !(Maybe Int)
-  , _lovDelimiter       :: !(Maybe Delimiter)
-  , _lovBucket          :: !BucketName
+  { _lKeyMarker       :: !(Maybe Text)
+  , _lPrefix          :: !(Maybe Text)
+  , _lEncodingType    :: !(Maybe EncodingType)
+  , _lVersionIdMarker :: !(Maybe Text)
+  , _lMaxKeys         :: !(Maybe Int)
+  , _lDelimiter       :: !(Maybe Delimiter)
+  , _lBucket          :: !BucketName
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
 
@@ -79,72 +79,71 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lovKeyMarker' - Specifies the key to start with when listing objects in a bucket.
+-- * 'lKeyMarker' - Specifies the key to start with when listing objects in a bucket.
 --
--- * 'lovPrefix' - Limits the response to keys that begin with the specified prefix.
+-- * 'lPrefix' - Limits the response to keys that begin with the specified prefix.
 --
--- * 'lovEncodingType' - Undocumented member.
+-- * 'lEncodingType' - Undocumented member.
 --
--- * 'lovVersionIdMarker' - Specifies the object version you want to start listing from.
+-- * 'lVersionIdMarker' - Specifies the object version you want to start listing from.
 --
--- * 'lovMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
+-- * 'lMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
 --
--- * 'lovDelimiter' - A delimiter is a character you use to group keys.
+-- * 'lDelimiter' - A delimiter is a character you use to group keys.
 --
--- * 'lovBucket' - Undocumented member.
+-- * 'lBucket' - Undocumented member.
 listObjectVersions
-    :: BucketName -- ^ 'lovBucket'
+    :: BucketName -- ^ 'lBucket'
     -> ListObjectVersions
 listObjectVersions pBucket_ =
   ListObjectVersions'
-  { _lovKeyMarker = Nothing
-  , _lovPrefix = Nothing
-  , _lovEncodingType = Nothing
-  , _lovVersionIdMarker = Nothing
-  , _lovMaxKeys = Nothing
-  , _lovDelimiter = Nothing
-  , _lovBucket = pBucket_
-  }
+    { _lKeyMarker = Nothing
+    , _lPrefix = Nothing
+    , _lEncodingType = Nothing
+    , _lVersionIdMarker = Nothing
+    , _lMaxKeys = Nothing
+    , _lDelimiter = Nothing
+    , _lBucket = pBucket_
+    }
 
 
 -- | Specifies the key to start with when listing objects in a bucket.
-lovKeyMarker :: Lens' ListObjectVersions (Maybe Text)
-lovKeyMarker = lens _lovKeyMarker (\ s a -> s{_lovKeyMarker = a});
+lKeyMarker :: Lens' ListObjectVersions (Maybe Text)
+lKeyMarker = lens _lKeyMarker (\ s a -> s{_lKeyMarker = a})
 
 -- | Limits the response to keys that begin with the specified prefix.
-lovPrefix :: Lens' ListObjectVersions (Maybe Text)
-lovPrefix = lens _lovPrefix (\ s a -> s{_lovPrefix = a});
+lPrefix :: Lens' ListObjectVersions (Maybe Text)
+lPrefix = lens _lPrefix (\ s a -> s{_lPrefix = a})
 
 -- | Undocumented member.
-lovEncodingType :: Lens' ListObjectVersions (Maybe EncodingType)
-lovEncodingType = lens _lovEncodingType (\ s a -> s{_lovEncodingType = a});
+lEncodingType :: Lens' ListObjectVersions (Maybe EncodingType)
+lEncodingType = lens _lEncodingType (\ s a -> s{_lEncodingType = a})
 
 -- | Specifies the object version you want to start listing from.
-lovVersionIdMarker :: Lens' ListObjectVersions (Maybe Text)
-lovVersionIdMarker = lens _lovVersionIdMarker (\ s a -> s{_lovVersionIdMarker = a});
+lVersionIdMarker :: Lens' ListObjectVersions (Maybe Text)
+lVersionIdMarker = lens _lVersionIdMarker (\ s a -> s{_lVersionIdMarker = a})
 
 -- | Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
-lovMaxKeys :: Lens' ListObjectVersions (Maybe Int)
-lovMaxKeys = lens _lovMaxKeys (\ s a -> s{_lovMaxKeys = a});
+lMaxKeys :: Lens' ListObjectVersions (Maybe Int)
+lMaxKeys = lens _lMaxKeys (\ s a -> s{_lMaxKeys = a})
 
 -- | A delimiter is a character you use to group keys.
-lovDelimiter :: Lens' ListObjectVersions (Maybe Delimiter)
-lovDelimiter = lens _lovDelimiter (\ s a -> s{_lovDelimiter = a});
+lDelimiter :: Lens' ListObjectVersions (Maybe Delimiter)
+lDelimiter = lens _lDelimiter (\ s a -> s{_lDelimiter = a})
 
 -- | Undocumented member.
-lovBucket :: Lens' ListObjectVersions BucketName
-lovBucket = lens _lovBucket (\ s a -> s{_lovBucket = a});
+lBucket :: Lens' ListObjectVersions BucketName
+lBucket = lens _lBucket (\ s a -> s{_lBucket = a})
 
 instance AWSPager ListObjectVersions where
         page rq rs
-          | stop (rs ^. lovrsIsTruncated) = Nothing
-          | isNothing (rs ^. lovrsNextKeyMarker) &&
-              isNothing (rs ^. lovrsNextVersionIdMarker)
+          | stop (rs ^. lrsIsTruncated) = Nothing
+          | isNothing (rs ^. lrsNextKeyMarker) &&
+              isNothing (rs ^. lrsNextVersionIdMarker)
             = Nothing
           | otherwise =
-            Just $ rq & lovKeyMarker .~ rs ^. lovrsNextKeyMarker
-              &
-              lovVersionIdMarker .~ rs ^. lovrsNextVersionIdMarker
+            Just $ rq & lKeyMarker .~ rs ^. lrsNextKeyMarker &
+              lVersionIdMarker .~ rs ^. lrsNextVersionIdMarker
 
 instance AWSRequest ListObjectVersions where
         type Rs ListObjectVersions =
@@ -177,34 +176,33 @@
 
 instance ToPath ListObjectVersions where
         toPath ListObjectVersions'{..}
-          = mconcat ["/", toBS _lovBucket]
+          = mconcat ["/", toBS _lBucket]
 
 instance ToQuery ListObjectVersions where
         toQuery ListObjectVersions'{..}
           = mconcat
-              ["key-marker" =: _lovKeyMarker,
-               "prefix" =: _lovPrefix,
-               "encoding-type" =: _lovEncodingType,
-               "version-id-marker" =: _lovVersionIdMarker,
-               "max-keys" =: _lovMaxKeys,
-               "delimiter" =: _lovDelimiter, "versions"]
+              ["key-marker" =: _lKeyMarker, "prefix" =: _lPrefix,
+               "encoding-type" =: _lEncodingType,
+               "version-id-marker" =: _lVersionIdMarker,
+               "max-keys" =: _lMaxKeys, "delimiter" =: _lDelimiter,
+               "versions"]
 
 -- | /See:/ 'listObjectVersionsResponse' smart constructor.
 data ListObjectVersionsResponse = ListObjectVersionsResponse'
-  { _lovrsNextVersionIdMarker :: !(Maybe Text)
-  , _lovrsKeyMarker           :: !(Maybe Text)
-  , _lovrsDeleteMarkers       :: !(Maybe [DeleteMarkerEntry])
-  , _lovrsPrefix              :: !(Maybe Text)
-  , _lovrsCommonPrefixes      :: !(Maybe [CommonPrefix])
-  , _lovrsEncodingType        :: !(Maybe EncodingType)
-  , _lovrsVersions            :: !(Maybe [ObjectVersion])
-  , _lovrsName                :: !(Maybe BucketName)
-  , _lovrsNextKeyMarker       :: !(Maybe Text)
-  , _lovrsVersionIdMarker     :: !(Maybe Text)
-  , _lovrsMaxKeys             :: !(Maybe Int)
-  , _lovrsIsTruncated         :: !(Maybe Bool)
-  , _lovrsDelimiter           :: !(Maybe Delimiter)
-  , _lovrsResponseStatus      :: !Int
+  { _lrsNextVersionIdMarker :: !(Maybe Text)
+  , _lrsKeyMarker           :: !(Maybe Text)
+  , _lrsDeleteMarkers       :: !(Maybe [DeleteMarkerEntry])
+  , _lrsPrefix              :: !(Maybe Text)
+  , _lrsCommonPrefixes      :: !(Maybe [CommonPrefix])
+  , _lrsEncodingType        :: !(Maybe EncodingType)
+  , _lrsVersions            :: !(Maybe [ObjectVersion])
+  , _lrsName                :: !(Maybe BucketName)
+  , _lrsNextKeyMarker       :: !(Maybe Text)
+  , _lrsVersionIdMarker     :: !(Maybe Text)
+  , _lrsMaxKeys             :: !(Maybe Int)
+  , _lrsIsTruncated         :: !(Maybe Bool)
+  , _lrsDelimiter           :: !(Maybe Delimiter)
+  , _lrsResponseStatus      :: !Int
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
 
@@ -212,109 +210,109 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'lovrsNextVersionIdMarker' - Use this value for the next version id marker parameter in a subsequent request.
+-- * 'lrsNextVersionIdMarker' - Use this value for the next version id marker parameter in a subsequent request.
 --
--- * 'lovrsKeyMarker' - Marks the last Key returned in a truncated response.
+-- * 'lrsKeyMarker' - Marks the last Key returned in a truncated response.
 --
--- * 'lovrsDeleteMarkers' - Undocumented member.
+-- * 'lrsDeleteMarkers' - Undocumented member.
 --
--- * 'lovrsPrefix' - Undocumented member.
+-- * 'lrsPrefix' - Undocumented member.
 --
--- * 'lovrsCommonPrefixes' - Undocumented member.
+-- * 'lrsCommonPrefixes' - Undocumented member.
 --
--- * 'lovrsEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
+-- * 'lrsEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
 --
--- * 'lovrsVersions' - Undocumented member.
+-- * 'lrsVersions' - Undocumented member.
 --
--- * 'lovrsName' - Undocumented member.
+-- * 'lrsName' - Undocumented member.
 --
--- * 'lovrsNextKeyMarker' - Use this value for the key marker request parameter in a subsequent request.
+-- * 'lrsNextKeyMarker' - Use this value for the key marker request parameter in a subsequent request.
 --
--- * 'lovrsVersionIdMarker' - Undocumented member.
+-- * 'lrsVersionIdMarker' - Undocumented member.
 --
--- * 'lovrsMaxKeys' - Undocumented member.
+-- * 'lrsMaxKeys' - Undocumented member.
 --
--- * 'lovrsIsTruncated' - A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria. If your results were truncated, you can make a follow-up paginated request using the NextKeyMarker and NextVersionIdMarker response parameters as a starting place in another request to return the rest of the results.
+-- * 'lrsIsTruncated' - A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria. If your results were truncated, you can make a follow-up paginated request using the NextKeyMarker and NextVersionIdMarker response parameters as a starting place in another request to return the rest of the results.
 --
--- * 'lovrsDelimiter' - Undocumented member.
+-- * 'lrsDelimiter' - Undocumented member.
 --
--- * 'lovrsResponseStatus' - -- | The response status code.
+-- * 'lrsResponseStatus' - -- | The response status code.
 listObjectVersionsResponse
-    :: Int -- ^ 'lovrsResponseStatus'
+    :: Int -- ^ 'lrsResponseStatus'
     -> ListObjectVersionsResponse
 listObjectVersionsResponse pResponseStatus_ =
   ListObjectVersionsResponse'
-  { _lovrsNextVersionIdMarker = Nothing
-  , _lovrsKeyMarker = Nothing
-  , _lovrsDeleteMarkers = Nothing
-  , _lovrsPrefix = Nothing
-  , _lovrsCommonPrefixes = Nothing
-  , _lovrsEncodingType = Nothing
-  , _lovrsVersions = Nothing
-  , _lovrsName = Nothing
-  , _lovrsNextKeyMarker = Nothing
-  , _lovrsVersionIdMarker = Nothing
-  , _lovrsMaxKeys = Nothing
-  , _lovrsIsTruncated = Nothing
-  , _lovrsDelimiter = Nothing
-  , _lovrsResponseStatus = pResponseStatus_
-  }
+    { _lrsNextVersionIdMarker = Nothing
+    , _lrsKeyMarker = Nothing
+    , _lrsDeleteMarkers = Nothing
+    , _lrsPrefix = Nothing
+    , _lrsCommonPrefixes = Nothing
+    , _lrsEncodingType = Nothing
+    , _lrsVersions = Nothing
+    , _lrsName = Nothing
+    , _lrsNextKeyMarker = Nothing
+    , _lrsVersionIdMarker = Nothing
+    , _lrsMaxKeys = Nothing
+    , _lrsIsTruncated = Nothing
+    , _lrsDelimiter = Nothing
+    , _lrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Use this value for the next version id marker parameter in a subsequent request.
-lovrsNextVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrsNextVersionIdMarker = lens _lovrsNextVersionIdMarker (\ s a -> s{_lovrsNextVersionIdMarker = a});
+lrsNextVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
+lrsNextVersionIdMarker = lens _lrsNextVersionIdMarker (\ s a -> s{_lrsNextVersionIdMarker = a})
 
 -- | Marks the last Key returned in a truncated response.
-lovrsKeyMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrsKeyMarker = lens _lovrsKeyMarker (\ s a -> s{_lovrsKeyMarker = a});
+lrsKeyMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
+lrsKeyMarker = lens _lrsKeyMarker (\ s a -> s{_lrsKeyMarker = a})
 
 -- | Undocumented member.
-lovrsDeleteMarkers :: Lens' ListObjectVersionsResponse [DeleteMarkerEntry]
-lovrsDeleteMarkers = lens _lovrsDeleteMarkers (\ s a -> s{_lovrsDeleteMarkers = a}) . _Default . _Coerce;
+lrsDeleteMarkers :: Lens' ListObjectVersionsResponse [DeleteMarkerEntry]
+lrsDeleteMarkers = lens _lrsDeleteMarkers (\ s a -> s{_lrsDeleteMarkers = a}) . _Default . _Coerce
 
 -- | Undocumented member.
-lovrsPrefix :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrsPrefix = lens _lovrsPrefix (\ s a -> s{_lovrsPrefix = a});
+lrsPrefix :: Lens' ListObjectVersionsResponse (Maybe Text)
+lrsPrefix = lens _lrsPrefix (\ s a -> s{_lrsPrefix = a})
 
 -- | Undocumented member.
-lovrsCommonPrefixes :: Lens' ListObjectVersionsResponse [CommonPrefix]
-lovrsCommonPrefixes = lens _lovrsCommonPrefixes (\ s a -> s{_lovrsCommonPrefixes = a}) . _Default . _Coerce;
+lrsCommonPrefixes :: Lens' ListObjectVersionsResponse [CommonPrefix]
+lrsCommonPrefixes = lens _lrsCommonPrefixes (\ s a -> s{_lrsCommonPrefixes = a}) . _Default . _Coerce
 
 -- | Encoding type used by Amazon S3 to encode object keys in the response.
-lovrsEncodingType :: Lens' ListObjectVersionsResponse (Maybe EncodingType)
-lovrsEncodingType = lens _lovrsEncodingType (\ s a -> s{_lovrsEncodingType = a});
+lrsEncodingType :: Lens' ListObjectVersionsResponse (Maybe EncodingType)
+lrsEncodingType = lens _lrsEncodingType (\ s a -> s{_lrsEncodingType = a})
 
 -- | Undocumented member.
-lovrsVersions :: Lens' ListObjectVersionsResponse [ObjectVersion]
-lovrsVersions = lens _lovrsVersions (\ s a -> s{_lovrsVersions = a}) . _Default . _Coerce;
+lrsVersions :: Lens' ListObjectVersionsResponse [ObjectVersion]
+lrsVersions = lens _lrsVersions (\ s a -> s{_lrsVersions = a}) . _Default . _Coerce
 
 -- | Undocumented member.
-lovrsName :: Lens' ListObjectVersionsResponse (Maybe BucketName)
-lovrsName = lens _lovrsName (\ s a -> s{_lovrsName = a});
+lrsName :: Lens' ListObjectVersionsResponse (Maybe BucketName)
+lrsName = lens _lrsName (\ s a -> s{_lrsName = a})
 
 -- | Use this value for the key marker request parameter in a subsequent request.
-lovrsNextKeyMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrsNextKeyMarker = lens _lovrsNextKeyMarker (\ s a -> s{_lovrsNextKeyMarker = a});
+lrsNextKeyMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
+lrsNextKeyMarker = lens _lrsNextKeyMarker (\ s a -> s{_lrsNextKeyMarker = a})
 
 -- | Undocumented member.
-lovrsVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
-lovrsVersionIdMarker = lens _lovrsVersionIdMarker (\ s a -> s{_lovrsVersionIdMarker = a});
+lrsVersionIdMarker :: Lens' ListObjectVersionsResponse (Maybe Text)
+lrsVersionIdMarker = lens _lrsVersionIdMarker (\ s a -> s{_lrsVersionIdMarker = a})
 
 -- | Undocumented member.
-lovrsMaxKeys :: Lens' ListObjectVersionsResponse (Maybe Int)
-lovrsMaxKeys = lens _lovrsMaxKeys (\ s a -> s{_lovrsMaxKeys = a});
+lrsMaxKeys :: Lens' ListObjectVersionsResponse (Maybe Int)
+lrsMaxKeys = lens _lrsMaxKeys (\ s a -> s{_lrsMaxKeys = a})
 
 -- | A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria. If your results were truncated, you can make a follow-up paginated request using the NextKeyMarker and NextVersionIdMarker response parameters as a starting place in another request to return the rest of the results.
-lovrsIsTruncated :: Lens' ListObjectVersionsResponse (Maybe Bool)
-lovrsIsTruncated = lens _lovrsIsTruncated (\ s a -> s{_lovrsIsTruncated = a});
+lrsIsTruncated :: Lens' ListObjectVersionsResponse (Maybe Bool)
+lrsIsTruncated = lens _lrsIsTruncated (\ s a -> s{_lrsIsTruncated = a})
 
 -- | Undocumented member.
-lovrsDelimiter :: Lens' ListObjectVersionsResponse (Maybe Delimiter)
-lovrsDelimiter = lens _lovrsDelimiter (\ s a -> s{_lovrsDelimiter = a});
+lrsDelimiter :: Lens' ListObjectVersionsResponse (Maybe Delimiter)
+lrsDelimiter = lens _lrsDelimiter (\ s a -> s{_lrsDelimiter = a})
 
 -- | -- | The response status code.
-lovrsResponseStatus :: Lens' ListObjectVersionsResponse Int
-lovrsResponseStatus = lens _lovrsResponseStatus (\ s a -> s{_lovrsResponseStatus = a});
+lrsResponseStatus :: Lens' ListObjectVersionsResponse Int
+lrsResponseStatus = lens _lrsResponseStatus (\ s a -> s{_lrsResponseStatus = a})
 
 instance NFData ListObjectVersionsResponse where
diff --git a/gen/Network/AWS/S3/ListObjects.hs b/gen/Network/AWS/S3/ListObjects.hs
--- a/gen/Network/AWS/S3/ListObjects.hs
+++ b/gen/Network/AWS/S3/ListObjects.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListObjects
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -94,43 +94,43 @@
     -> ListObjects
 listObjects pBucket_ =
   ListObjects'
-  { _loPrefix = Nothing
-  , _loEncodingType = Nothing
-  , _loRequestPayer = Nothing
-  , _loMarker = Nothing
-  , _loMaxKeys = Nothing
-  , _loDelimiter = Nothing
-  , _loBucket = pBucket_
-  }
+    { _loPrefix = Nothing
+    , _loEncodingType = Nothing
+    , _loRequestPayer = Nothing
+    , _loMarker = Nothing
+    , _loMaxKeys = Nothing
+    , _loDelimiter = Nothing
+    , _loBucket = pBucket_
+    }
 
 
 -- | Limits the response to keys that begin with the specified prefix.
 loPrefix :: Lens' ListObjects (Maybe Text)
-loPrefix = lens _loPrefix (\ s a -> s{_loPrefix = a});
+loPrefix = lens _loPrefix (\ s a -> s{_loPrefix = a})
 
 -- | Undocumented member.
 loEncodingType :: Lens' ListObjects (Maybe EncodingType)
-loEncodingType = lens _loEncodingType (\ s a -> s{_loEncodingType = a});
+loEncodingType = lens _loEncodingType (\ s a -> s{_loEncodingType = a})
 
 -- | Confirms that the requester knows that she or he will be charged for the list objects request. Bucket owners need not specify this parameter in their requests.
 loRequestPayer :: Lens' ListObjects (Maybe RequestPayer)
-loRequestPayer = lens _loRequestPayer (\ s a -> s{_loRequestPayer = a});
+loRequestPayer = lens _loRequestPayer (\ s a -> s{_loRequestPayer = a})
 
 -- | Specifies the key to start with when listing objects in a bucket.
 loMarker :: Lens' ListObjects (Maybe Text)
-loMarker = lens _loMarker (\ s a -> s{_loMarker = a});
+loMarker = lens _loMarker (\ s a -> s{_loMarker = a})
 
 -- | Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
 loMaxKeys :: Lens' ListObjects (Maybe Int)
-loMaxKeys = lens _loMaxKeys (\ s a -> s{_loMaxKeys = a});
+loMaxKeys = lens _loMaxKeys (\ s a -> s{_loMaxKeys = a})
 
 -- | A delimiter is a character you use to group keys.
 loDelimiter :: Lens' ListObjects (Maybe Delimiter)
-loDelimiter = lens _loDelimiter (\ s a -> s{_loDelimiter = a});
+loDelimiter = lens _loDelimiter (\ s a -> s{_loDelimiter = a})
 
 -- | Undocumented member.
 loBucket :: Lens' ListObjects BucketName
-loBucket = lens _loBucket (\ s a -> s{_loBucket = a});
+loBucket = lens _loBucket (\ s a -> s{_loBucket = a})
 
 instance AWSPager ListObjects where
         page rq rs
@@ -232,62 +232,62 @@
     -> ListObjectsResponse
 listObjectsResponse pResponseStatus_ =
   ListObjectsResponse'
-  { _lorsContents = Nothing
-  , _lorsPrefix = Nothing
-  , _lorsCommonPrefixes = Nothing
-  , _lorsEncodingType = Nothing
-  , _lorsName = Nothing
-  , _lorsMarker = Nothing
-  , _lorsNextMarker = Nothing
-  , _lorsMaxKeys = Nothing
-  , _lorsIsTruncated = Nothing
-  , _lorsDelimiter = Nothing
-  , _lorsResponseStatus = pResponseStatus_
-  }
+    { _lorsContents = Nothing
+    , _lorsPrefix = Nothing
+    , _lorsCommonPrefixes = Nothing
+    , _lorsEncodingType = Nothing
+    , _lorsName = Nothing
+    , _lorsMarker = Nothing
+    , _lorsNextMarker = Nothing
+    , _lorsMaxKeys = Nothing
+    , _lorsIsTruncated = Nothing
+    , _lorsDelimiter = Nothing
+    , _lorsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 lorsContents :: Lens' ListObjectsResponse [Object]
-lorsContents = lens _lorsContents (\ s a -> s{_lorsContents = a}) . _Default . _Coerce;
+lorsContents = lens _lorsContents (\ s a -> s{_lorsContents = a}) . _Default . _Coerce
 
 -- | Undocumented member.
 lorsPrefix :: Lens' ListObjectsResponse (Maybe Text)
-lorsPrefix = lens _lorsPrefix (\ s a -> s{_lorsPrefix = a});
+lorsPrefix = lens _lorsPrefix (\ s a -> s{_lorsPrefix = a})
 
 -- | Undocumented member.
 lorsCommonPrefixes :: Lens' ListObjectsResponse [CommonPrefix]
-lorsCommonPrefixes = lens _lorsCommonPrefixes (\ s a -> s{_lorsCommonPrefixes = a}) . _Default . _Coerce;
+lorsCommonPrefixes = lens _lorsCommonPrefixes (\ s a -> s{_lorsCommonPrefixes = a}) . _Default . _Coerce
 
 -- | Encoding type used by Amazon S3 to encode object keys in the response.
 lorsEncodingType :: Lens' ListObjectsResponse (Maybe EncodingType)
-lorsEncodingType = lens _lorsEncodingType (\ s a -> s{_lorsEncodingType = a});
+lorsEncodingType = lens _lorsEncodingType (\ s a -> s{_lorsEncodingType = a})
 
 -- | Undocumented member.
 lorsName :: Lens' ListObjectsResponse (Maybe BucketName)
-lorsName = lens _lorsName (\ s a -> s{_lorsName = a});
+lorsName = lens _lorsName (\ s a -> s{_lorsName = a})
 
 -- | Undocumented member.
 lorsMarker :: Lens' ListObjectsResponse (Maybe Text)
-lorsMarker = lens _lorsMarker (\ s a -> s{_lorsMarker = a});
+lorsMarker = lens _lorsMarker (\ s a -> s{_lorsMarker = a})
 
 -- | When response is truncated (the IsTruncated element value in the response is true), you can use the key name in this field as marker in the subsequent request to get next set of objects. Amazon S3 lists objects in alphabetical order Note: This element is returned only if you have delimiter request parameter specified. If response does not include the NextMaker and it is truncated, you can use the value of the last Key in the response as the marker in the subsequent request to get the next set of object keys.
 lorsNextMarker :: Lens' ListObjectsResponse (Maybe Text)
-lorsNextMarker = lens _lorsNextMarker (\ s a -> s{_lorsNextMarker = a});
+lorsNextMarker = lens _lorsNextMarker (\ s a -> s{_lorsNextMarker = a})
 
 -- | Undocumented member.
 lorsMaxKeys :: Lens' ListObjectsResponse (Maybe Int)
-lorsMaxKeys = lens _lorsMaxKeys (\ s a -> s{_lorsMaxKeys = a});
+lorsMaxKeys = lens _lorsMaxKeys (\ s a -> s{_lorsMaxKeys = a})
 
 -- | A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria.
 lorsIsTruncated :: Lens' ListObjectsResponse (Maybe Bool)
-lorsIsTruncated = lens _lorsIsTruncated (\ s a -> s{_lorsIsTruncated = a});
+lorsIsTruncated = lens _lorsIsTruncated (\ s a -> s{_lorsIsTruncated = a})
 
 -- | Undocumented member.
 lorsDelimiter :: Lens' ListObjectsResponse (Maybe Delimiter)
-lorsDelimiter = lens _lorsDelimiter (\ s a -> s{_lorsDelimiter = a});
+lorsDelimiter = lens _lorsDelimiter (\ s a -> s{_lorsDelimiter = a})
 
 -- | -- | The response status code.
 lorsResponseStatus :: Lens' ListObjectsResponse Int
-lorsResponseStatus = lens _lorsResponseStatus (\ s a -> s{_lorsResponseStatus = a});
+lorsResponseStatus = lens _lorsResponseStatus (\ s a -> s{_lorsResponseStatus = a})
 
 instance NFData ListObjectsResponse where
diff --git a/gen/Network/AWS/S3/ListObjectsV.hs b/gen/Network/AWS/S3/ListObjectsV.hs
deleted file mode 100644
--- a/gen/Network/AWS/S3/ListObjectsV.hs
+++ /dev/null
@@ -1,314 +0,0 @@
-{-# 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.S3.ListObjectsV
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns some or all (up to 1000) of the objects in a bucket. You can use the request parameters as selection criteria to return a subset of the objects in a bucket. Note: ListObjectsV2 is the revised List Objects API and we recommend you use this revised API for new application development.
-module Network.AWS.S3.ListObjectsV
-    (
-    -- * Creating a Request
-      listObjectsV
-    , ListObjectsV
-    -- * Request Lenses
-    , lStartAfter
-    , lContinuationToken
-    , lFetchOwner
-    , lPrefix
-    , lEncodingType
-    , lRequestPayer
-    , lMaxKeys
-    , lDelimiter
-    , lBucket
-
-    -- * Destructuring the Response
-    , listObjectsVResponse
-    , ListObjectsVResponse
-    -- * Response Lenses
-    , lrsStartAfter
-    , lrsKeyCount
-    , lrsContents
-    , lrsContinuationToken
-    , lrsPrefix
-    , lrsCommonPrefixes
-    , lrsEncodingType
-    , lrsName
-    , lrsNextContinuationToken
-    , lrsMaxKeys
-    , lrsIsTruncated
-    , lrsDelimiter
-    , lrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.S3.Types
-import Network.AWS.S3.Types.Product
-
--- | /See:/ 'listObjectsV' smart constructor.
-data ListObjectsV = ListObjectsV'
-  { _lStartAfter        :: !(Maybe Text)
-  , _lContinuationToken :: !(Maybe Text)
-  , _lFetchOwner        :: !(Maybe Bool)
-  , _lPrefix            :: !(Maybe Text)
-  , _lEncodingType      :: !(Maybe EncodingType)
-  , _lRequestPayer      :: !(Maybe RequestPayer)
-  , _lMaxKeys           :: !(Maybe Int)
-  , _lDelimiter         :: !(Maybe Delimiter)
-  , _lBucket            :: !BucketName
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListObjectsV' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lStartAfter' - StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
---
--- * 'lContinuationToken' - ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
---
--- * 'lFetchOwner' - The owner field is not present in listV2 by default, if you want to return owner field with each key in the result then set the fetch owner field to true
---
--- * 'lPrefix' - Limits the response to keys that begin with the specified prefix.
---
--- * 'lEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
---
--- * 'lRequestPayer' - Confirms that the requester knows that she or he will be charged for the list objects request in V2 style. Bucket owners need not specify this parameter in their requests.
---
--- * 'lMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
---
--- * 'lDelimiter' - A delimiter is a character you use to group keys.
---
--- * 'lBucket' - Name of the bucket to list.
-listObjectsV
-    :: BucketName -- ^ 'lBucket'
-    -> ListObjectsV
-listObjectsV pBucket_ =
-  ListObjectsV'
-  { _lStartAfter = Nothing
-  , _lContinuationToken = Nothing
-  , _lFetchOwner = Nothing
-  , _lPrefix = Nothing
-  , _lEncodingType = Nothing
-  , _lRequestPayer = Nothing
-  , _lMaxKeys = Nothing
-  , _lDelimiter = Nothing
-  , _lBucket = pBucket_
-  }
-
-
--- | StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
-lStartAfter :: Lens' ListObjectsV (Maybe Text)
-lStartAfter = lens _lStartAfter (\ s a -> s{_lStartAfter = a});
-
--- | ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
-lContinuationToken :: Lens' ListObjectsV (Maybe Text)
-lContinuationToken = lens _lContinuationToken (\ s a -> s{_lContinuationToken = a});
-
--- | The owner field is not present in listV2 by default, if you want to return owner field with each key in the result then set the fetch owner field to true
-lFetchOwner :: Lens' ListObjectsV (Maybe Bool)
-lFetchOwner = lens _lFetchOwner (\ s a -> s{_lFetchOwner = a});
-
--- | Limits the response to keys that begin with the specified prefix.
-lPrefix :: Lens' ListObjectsV (Maybe Text)
-lPrefix = lens _lPrefix (\ s a -> s{_lPrefix = a});
-
--- | Encoding type used by Amazon S3 to encode object keys in the response.
-lEncodingType :: Lens' ListObjectsV (Maybe EncodingType)
-lEncodingType = lens _lEncodingType (\ s a -> s{_lEncodingType = a});
-
--- | Confirms that the requester knows that she or he will be charged for the list objects request in V2 style. Bucket owners need not specify this parameter in their requests.
-lRequestPayer :: Lens' ListObjectsV (Maybe RequestPayer)
-lRequestPayer = lens _lRequestPayer (\ s a -> s{_lRequestPayer = a});
-
--- | Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
-lMaxKeys :: Lens' ListObjectsV (Maybe Int)
-lMaxKeys = lens _lMaxKeys (\ s a -> s{_lMaxKeys = a});
-
--- | A delimiter is a character you use to group keys.
-lDelimiter :: Lens' ListObjectsV (Maybe Delimiter)
-lDelimiter = lens _lDelimiter (\ s a -> s{_lDelimiter = a});
-
--- | Name of the bucket to list.
-lBucket :: Lens' ListObjectsV BucketName
-lBucket = lens _lBucket (\ s a -> s{_lBucket = a});
-
-instance AWSRequest ListObjectsV where
-        type Rs ListObjectsV = ListObjectsVResponse
-        request = get s3
-        response
-          = receiveXML
-              (\ s h x ->
-                 ListObjectsVResponse' <$>
-                   (x .@? "StartAfter") <*> (x .@? "KeyCount") <*>
-                     (may (parseXMLList "Contents") x)
-                     <*> (x .@? "ContinuationToken")
-                     <*> (x .@? "Prefix")
-                     <*> (may (parseXMLList "CommonPrefixes") x)
-                     <*> (x .@? "EncodingType")
-                     <*> (x .@? "Name")
-                     <*> (x .@? "NextContinuationToken")
-                     <*> (x .@? "MaxKeys")
-                     <*> (x .@? "IsTruncated")
-                     <*> (x .@? "Delimiter")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListObjectsV where
-
-instance NFData ListObjectsV where
-
-instance ToHeaders ListObjectsV where
-        toHeaders ListObjectsV'{..}
-          = mconcat ["x-amz-request-payer" =# _lRequestPayer]
-
-instance ToPath ListObjectsV where
-        toPath ListObjectsV'{..}
-          = mconcat ["/", toBS _lBucket]
-
-instance ToQuery ListObjectsV where
-        toQuery ListObjectsV'{..}
-          = mconcat
-              ["start-after" =: _lStartAfter,
-               "continuation-token" =: _lContinuationToken,
-               "fetch-owner" =: _lFetchOwner, "prefix" =: _lPrefix,
-               "encoding-type" =: _lEncodingType,
-               "max-keys" =: _lMaxKeys, "delimiter" =: _lDelimiter,
-               "list-type=2"]
-
--- | /See:/ 'listObjectsVResponse' smart constructor.
-data ListObjectsVResponse = ListObjectsVResponse'
-  { _lrsStartAfter            :: !(Maybe Text)
-  , _lrsKeyCount              :: !(Maybe Int)
-  , _lrsContents              :: !(Maybe [Object])
-  , _lrsContinuationToken     :: !(Maybe Text)
-  , _lrsPrefix                :: !(Maybe Text)
-  , _lrsCommonPrefixes        :: !(Maybe [CommonPrefix])
-  , _lrsEncodingType          :: !(Maybe EncodingType)
-  , _lrsName                  :: !(Maybe BucketName)
-  , _lrsNextContinuationToken :: !(Maybe Text)
-  , _lrsMaxKeys               :: !(Maybe Int)
-  , _lrsIsTruncated           :: !(Maybe Bool)
-  , _lrsDelimiter             :: !(Maybe Delimiter)
-  , _lrsResponseStatus        :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListObjectsVResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrsStartAfter' - StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
---
--- * 'lrsKeyCount' - KeyCount is the number of keys returned with this request. KeyCount will always be less than equals to MaxKeys field. Say you ask for 50 keys, your result will include less than equals 50 keys
---
--- * 'lrsContents' - Metadata about each object returned.
---
--- * 'lrsContinuationToken' - ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
---
--- * 'lrsPrefix' - Limits the response to keys that begin with the specified prefix.
---
--- * 'lrsCommonPrefixes' - CommonPrefixes contains all (if there are any) keys between Prefix and the next occurrence of the string specified by delimiter
---
--- * 'lrsEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
---
--- * 'lrsName' - Name of the bucket to list.
---
--- * 'lrsNextContinuationToken' - NextContinuationToken is sent when isTruncated is true which means there are more keys in the bucket that can be listed. The next list requests to Amazon S3 can be continued with this NextContinuationToken. NextContinuationToken is obfuscated and is not a real key
---
--- * 'lrsMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
---
--- * 'lrsIsTruncated' - A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria.
---
--- * 'lrsDelimiter' - A delimiter is a character you use to group keys.
---
--- * 'lrsResponseStatus' - -- | The response status code.
-listObjectsVResponse
-    :: Int -- ^ 'lrsResponseStatus'
-    -> ListObjectsVResponse
-listObjectsVResponse pResponseStatus_ =
-  ListObjectsVResponse'
-  { _lrsStartAfter = Nothing
-  , _lrsKeyCount = Nothing
-  , _lrsContents = Nothing
-  , _lrsContinuationToken = Nothing
-  , _lrsPrefix = Nothing
-  , _lrsCommonPrefixes = Nothing
-  , _lrsEncodingType = Nothing
-  , _lrsName = Nothing
-  , _lrsNextContinuationToken = Nothing
-  , _lrsMaxKeys = Nothing
-  , _lrsIsTruncated = Nothing
-  , _lrsDelimiter = Nothing
-  , _lrsResponseStatus = pResponseStatus_
-  }
-
-
--- | StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
-lrsStartAfter :: Lens' ListObjectsVResponse (Maybe Text)
-lrsStartAfter = lens _lrsStartAfter (\ s a -> s{_lrsStartAfter = a});
-
--- | KeyCount is the number of keys returned with this request. KeyCount will always be less than equals to MaxKeys field. Say you ask for 50 keys, your result will include less than equals 50 keys
-lrsKeyCount :: Lens' ListObjectsVResponse (Maybe Int)
-lrsKeyCount = lens _lrsKeyCount (\ s a -> s{_lrsKeyCount = a});
-
--- | Metadata about each object returned.
-lrsContents :: Lens' ListObjectsVResponse [Object]
-lrsContents = lens _lrsContents (\ s a -> s{_lrsContents = a}) . _Default . _Coerce;
-
--- | ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
-lrsContinuationToken :: Lens' ListObjectsVResponse (Maybe Text)
-lrsContinuationToken = lens _lrsContinuationToken (\ s a -> s{_lrsContinuationToken = a});
-
--- | Limits the response to keys that begin with the specified prefix.
-lrsPrefix :: Lens' ListObjectsVResponse (Maybe Text)
-lrsPrefix = lens _lrsPrefix (\ s a -> s{_lrsPrefix = a});
-
--- | CommonPrefixes contains all (if there are any) keys between Prefix and the next occurrence of the string specified by delimiter
-lrsCommonPrefixes :: Lens' ListObjectsVResponse [CommonPrefix]
-lrsCommonPrefixes = lens _lrsCommonPrefixes (\ s a -> s{_lrsCommonPrefixes = a}) . _Default . _Coerce;
-
--- | Encoding type used by Amazon S3 to encode object keys in the response.
-lrsEncodingType :: Lens' ListObjectsVResponse (Maybe EncodingType)
-lrsEncodingType = lens _lrsEncodingType (\ s a -> s{_lrsEncodingType = a});
-
--- | Name of the bucket to list.
-lrsName :: Lens' ListObjectsVResponse (Maybe BucketName)
-lrsName = lens _lrsName (\ s a -> s{_lrsName = a});
-
--- | NextContinuationToken is sent when isTruncated is true which means there are more keys in the bucket that can be listed. The next list requests to Amazon S3 can be continued with this NextContinuationToken. NextContinuationToken is obfuscated and is not a real key
-lrsNextContinuationToken :: Lens' ListObjectsVResponse (Maybe Text)
-lrsNextContinuationToken = lens _lrsNextContinuationToken (\ s a -> s{_lrsNextContinuationToken = a});
-
--- | Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
-lrsMaxKeys :: Lens' ListObjectsVResponse (Maybe Int)
-lrsMaxKeys = lens _lrsMaxKeys (\ s a -> s{_lrsMaxKeys = a});
-
--- | A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria.
-lrsIsTruncated :: Lens' ListObjectsVResponse (Maybe Bool)
-lrsIsTruncated = lens _lrsIsTruncated (\ s a -> s{_lrsIsTruncated = a});
-
--- | A delimiter is a character you use to group keys.
-lrsDelimiter :: Lens' ListObjectsVResponse (Maybe Delimiter)
-lrsDelimiter = lens _lrsDelimiter (\ s a -> s{_lrsDelimiter = a});
-
--- | -- | The response status code.
-lrsResponseStatus :: Lens' ListObjectsVResponse Int
-lrsResponseStatus = lens _lrsResponseStatus (\ s a -> s{_lrsResponseStatus = a});
-
-instance NFData ListObjectsVResponse where
diff --git a/gen/Network/AWS/S3/ListObjectsV2.hs b/gen/Network/AWS/S3/ListObjectsV2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/ListObjectsV2.hs
@@ -0,0 +1,328 @@
+{-# 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.S3.ListObjectsV2
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns some or all (up to 1000) of the objects in a bucket. You can use the request parameters as selection criteria to return a subset of the objects in a bucket. Note: ListObjectsV2 is the revised List Objects API and we recommend you use this revised API for new application development.
+--
+-- This operation returns paginated results.
+module Network.AWS.S3.ListObjectsV2
+    (
+    -- * Creating a Request
+      listObjectsV2
+    , ListObjectsV2
+    -- * Request Lenses
+    , lovStartAfter
+    , lovContinuationToken
+    , lovFetchOwner
+    , lovPrefix
+    , lovEncodingType
+    , lovRequestPayer
+    , lovMaxKeys
+    , lovDelimiter
+    , lovBucket
+
+    -- * Destructuring the Response
+    , listObjectsV2Response
+    , ListObjectsV2Response
+    -- * Response Lenses
+    , lovrsStartAfter
+    , lovrsKeyCount
+    , lovrsContents
+    , lovrsContinuationToken
+    , lovrsPrefix
+    , lovrsCommonPrefixes
+    , lovrsEncodingType
+    , lovrsName
+    , lovrsNextContinuationToken
+    , lovrsMaxKeys
+    , lovrsIsTruncated
+    , lovrsDelimiter
+    , lovrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Pager
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
+
+-- | /See:/ 'listObjectsV2' smart constructor.
+data ListObjectsV2 = ListObjectsV2'
+  { _lovStartAfter        :: !(Maybe Text)
+  , _lovContinuationToken :: !(Maybe Text)
+  , _lovFetchOwner        :: !(Maybe Bool)
+  , _lovPrefix            :: !(Maybe Text)
+  , _lovEncodingType      :: !(Maybe EncodingType)
+  , _lovRequestPayer      :: !(Maybe RequestPayer)
+  , _lovMaxKeys           :: !(Maybe Int)
+  , _lovDelimiter         :: !(Maybe Delimiter)
+  , _lovBucket            :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListObjectsV2' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lovStartAfter' - StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
+--
+-- * 'lovContinuationToken' - ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
+--
+-- * 'lovFetchOwner' - The owner field is not present in listV2 by default, if you want to return owner field with each key in the result then set the fetch owner field to true
+--
+-- * 'lovPrefix' - Limits the response to keys that begin with the specified prefix.
+--
+-- * 'lovEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
+--
+-- * 'lovRequestPayer' - Confirms that the requester knows that she or he will be charged for the list objects request in V2 style. Bucket owners need not specify this parameter in their requests.
+--
+-- * 'lovMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
+--
+-- * 'lovDelimiter' - A delimiter is a character you use to group keys.
+--
+-- * 'lovBucket' - Name of the bucket to list.
+listObjectsV2
+    :: BucketName -- ^ 'lovBucket'
+    -> ListObjectsV2
+listObjectsV2 pBucket_ =
+  ListObjectsV2'
+    { _lovStartAfter = Nothing
+    , _lovContinuationToken = Nothing
+    , _lovFetchOwner = Nothing
+    , _lovPrefix = Nothing
+    , _lovEncodingType = Nothing
+    , _lovRequestPayer = Nothing
+    , _lovMaxKeys = Nothing
+    , _lovDelimiter = Nothing
+    , _lovBucket = pBucket_
+    }
+
+
+-- | StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
+lovStartAfter :: Lens' ListObjectsV2 (Maybe Text)
+lovStartAfter = lens _lovStartAfter (\ s a -> s{_lovStartAfter = a})
+
+-- | ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
+lovContinuationToken :: Lens' ListObjectsV2 (Maybe Text)
+lovContinuationToken = lens _lovContinuationToken (\ s a -> s{_lovContinuationToken = a})
+
+-- | The owner field is not present in listV2 by default, if you want to return owner field with each key in the result then set the fetch owner field to true
+lovFetchOwner :: Lens' ListObjectsV2 (Maybe Bool)
+lovFetchOwner = lens _lovFetchOwner (\ s a -> s{_lovFetchOwner = a})
+
+-- | Limits the response to keys that begin with the specified prefix.
+lovPrefix :: Lens' ListObjectsV2 (Maybe Text)
+lovPrefix = lens _lovPrefix (\ s a -> s{_lovPrefix = a})
+
+-- | Encoding type used by Amazon S3 to encode object keys in the response.
+lovEncodingType :: Lens' ListObjectsV2 (Maybe EncodingType)
+lovEncodingType = lens _lovEncodingType (\ s a -> s{_lovEncodingType = a})
+
+-- | Confirms that the requester knows that she or he will be charged for the list objects request in V2 style. Bucket owners need not specify this parameter in their requests.
+lovRequestPayer :: Lens' ListObjectsV2 (Maybe RequestPayer)
+lovRequestPayer = lens _lovRequestPayer (\ s a -> s{_lovRequestPayer = a})
+
+-- | Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
+lovMaxKeys :: Lens' ListObjectsV2 (Maybe Int)
+lovMaxKeys = lens _lovMaxKeys (\ s a -> s{_lovMaxKeys = a})
+
+-- | A delimiter is a character you use to group keys.
+lovDelimiter :: Lens' ListObjectsV2 (Maybe Delimiter)
+lovDelimiter = lens _lovDelimiter (\ s a -> s{_lovDelimiter = a})
+
+-- | Name of the bucket to list.
+lovBucket :: Lens' ListObjectsV2 BucketName
+lovBucket = lens _lovBucket (\ s a -> s{_lovBucket = a})
+
+instance AWSPager ListObjectsV2 where
+        page rq rs
+          | stop (rs ^. lovrsIsTruncated) = Nothing
+          | isNothing (rs ^. lovrsNextContinuationToken) =
+            Nothing
+          | otherwise =
+            Just $ rq &
+              lovContinuationToken .~
+                rs ^. lovrsNextContinuationToken
+
+instance AWSRequest ListObjectsV2 where
+        type Rs ListObjectsV2 = ListObjectsV2Response
+        request = get s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 ListObjectsV2Response' <$>
+                   (x .@? "StartAfter") <*> (x .@? "KeyCount") <*>
+                     (may (parseXMLList "Contents") x)
+                     <*> (x .@? "ContinuationToken")
+                     <*> (x .@? "Prefix")
+                     <*> (may (parseXMLList "CommonPrefixes") x)
+                     <*> (x .@? "EncodingType")
+                     <*> (x .@? "Name")
+                     <*> (x .@? "NextContinuationToken")
+                     <*> (x .@? "MaxKeys")
+                     <*> (x .@? "IsTruncated")
+                     <*> (x .@? "Delimiter")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListObjectsV2 where
+
+instance NFData ListObjectsV2 where
+
+instance ToHeaders ListObjectsV2 where
+        toHeaders ListObjectsV2'{..}
+          = mconcat ["x-amz-request-payer" =# _lovRequestPayer]
+
+instance ToPath ListObjectsV2 where
+        toPath ListObjectsV2'{..}
+          = mconcat ["/", toBS _lovBucket]
+
+instance ToQuery ListObjectsV2 where
+        toQuery ListObjectsV2'{..}
+          = mconcat
+              ["start-after" =: _lovStartAfter,
+               "continuation-token" =: _lovContinuationToken,
+               "fetch-owner" =: _lovFetchOwner,
+               "prefix" =: _lovPrefix,
+               "encoding-type" =: _lovEncodingType,
+               "max-keys" =: _lovMaxKeys,
+               "delimiter" =: _lovDelimiter, "list-type=2"]
+
+-- | /See:/ 'listObjectsV2Response' smart constructor.
+data ListObjectsV2Response = ListObjectsV2Response'
+  { _lovrsStartAfter            :: !(Maybe Text)
+  , _lovrsKeyCount              :: !(Maybe Int)
+  , _lovrsContents              :: !(Maybe [Object])
+  , _lovrsContinuationToken     :: !(Maybe Text)
+  , _lovrsPrefix                :: !(Maybe Text)
+  , _lovrsCommonPrefixes        :: !(Maybe [CommonPrefix])
+  , _lovrsEncodingType          :: !(Maybe EncodingType)
+  , _lovrsName                  :: !(Maybe BucketName)
+  , _lovrsNextContinuationToken :: !(Maybe Text)
+  , _lovrsMaxKeys               :: !(Maybe Int)
+  , _lovrsIsTruncated           :: !(Maybe Bool)
+  , _lovrsDelimiter             :: !(Maybe Delimiter)
+  , _lovrsResponseStatus        :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ListObjectsV2Response' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lovrsStartAfter' - StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
+--
+-- * 'lovrsKeyCount' - KeyCount is the number of keys returned with this request. KeyCount will always be less than equals to MaxKeys field. Say you ask for 50 keys, your result will include less than equals 50 keys
+--
+-- * 'lovrsContents' - Metadata about each object returned.
+--
+-- * 'lovrsContinuationToken' - ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
+--
+-- * 'lovrsPrefix' - Limits the response to keys that begin with the specified prefix.
+--
+-- * 'lovrsCommonPrefixes' - CommonPrefixes contains all (if there are any) keys between Prefix and the next occurrence of the string specified by delimiter
+--
+-- * 'lovrsEncodingType' - Encoding type used by Amazon S3 to encode object keys in the response.
+--
+-- * 'lovrsName' - Name of the bucket to list.
+--
+-- * 'lovrsNextContinuationToken' - NextContinuationToken is sent when isTruncated is true which means there are more keys in the bucket that can be listed. The next list requests to Amazon S3 can be continued with this NextContinuationToken. NextContinuationToken is obfuscated and is not a real key
+--
+-- * 'lovrsMaxKeys' - Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
+--
+-- * 'lovrsIsTruncated' - A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria.
+--
+-- * 'lovrsDelimiter' - A delimiter is a character you use to group keys.
+--
+-- * 'lovrsResponseStatus' - -- | The response status code.
+listObjectsV2Response
+    :: Int -- ^ 'lovrsResponseStatus'
+    -> ListObjectsV2Response
+listObjectsV2Response pResponseStatus_ =
+  ListObjectsV2Response'
+    { _lovrsStartAfter = Nothing
+    , _lovrsKeyCount = Nothing
+    , _lovrsContents = Nothing
+    , _lovrsContinuationToken = Nothing
+    , _lovrsPrefix = Nothing
+    , _lovrsCommonPrefixes = Nothing
+    , _lovrsEncodingType = Nothing
+    , _lovrsName = Nothing
+    , _lovrsNextContinuationToken = Nothing
+    , _lovrsMaxKeys = Nothing
+    , _lovrsIsTruncated = Nothing
+    , _lovrsDelimiter = Nothing
+    , _lovrsResponseStatus = pResponseStatus_
+    }
+
+
+-- | StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts listing after this specified key. StartAfter can be any key in the bucket
+lovrsStartAfter :: Lens' ListObjectsV2Response (Maybe Text)
+lovrsStartAfter = lens _lovrsStartAfter (\ s a -> s{_lovrsStartAfter = a})
+
+-- | KeyCount is the number of keys returned with this request. KeyCount will always be less than equals to MaxKeys field. Say you ask for 50 keys, your result will include less than equals 50 keys
+lovrsKeyCount :: Lens' ListObjectsV2Response (Maybe Int)
+lovrsKeyCount = lens _lovrsKeyCount (\ s a -> s{_lovrsKeyCount = a})
+
+-- | Metadata about each object returned.
+lovrsContents :: Lens' ListObjectsV2Response [Object]
+lovrsContents = lens _lovrsContents (\ s a -> s{_lovrsContents = a}) . _Default . _Coerce
+
+-- | ContinuationToken indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key
+lovrsContinuationToken :: Lens' ListObjectsV2Response (Maybe Text)
+lovrsContinuationToken = lens _lovrsContinuationToken (\ s a -> s{_lovrsContinuationToken = a})
+
+-- | Limits the response to keys that begin with the specified prefix.
+lovrsPrefix :: Lens' ListObjectsV2Response (Maybe Text)
+lovrsPrefix = lens _lovrsPrefix (\ s a -> s{_lovrsPrefix = a})
+
+-- | CommonPrefixes contains all (if there are any) keys between Prefix and the next occurrence of the string specified by delimiter
+lovrsCommonPrefixes :: Lens' ListObjectsV2Response [CommonPrefix]
+lovrsCommonPrefixes = lens _lovrsCommonPrefixes (\ s a -> s{_lovrsCommonPrefixes = a}) . _Default . _Coerce
+
+-- | Encoding type used by Amazon S3 to encode object keys in the response.
+lovrsEncodingType :: Lens' ListObjectsV2Response (Maybe EncodingType)
+lovrsEncodingType = lens _lovrsEncodingType (\ s a -> s{_lovrsEncodingType = a})
+
+-- | Name of the bucket to list.
+lovrsName :: Lens' ListObjectsV2Response (Maybe BucketName)
+lovrsName = lens _lovrsName (\ s a -> s{_lovrsName = a})
+
+-- | NextContinuationToken is sent when isTruncated is true which means there are more keys in the bucket that can be listed. The next list requests to Amazon S3 can be continued with this NextContinuationToken. NextContinuationToken is obfuscated and is not a real key
+lovrsNextContinuationToken :: Lens' ListObjectsV2Response (Maybe Text)
+lovrsNextContinuationToken = lens _lovrsNextContinuationToken (\ s a -> s{_lovrsNextContinuationToken = a})
+
+-- | Sets the maximum number of keys returned in the response. The response might contain fewer keys but will never contain more.
+lovrsMaxKeys :: Lens' ListObjectsV2Response (Maybe Int)
+lovrsMaxKeys = lens _lovrsMaxKeys (\ s a -> s{_lovrsMaxKeys = a})
+
+-- | A flag that indicates whether or not Amazon S3 returned all of the results that satisfied the search criteria.
+lovrsIsTruncated :: Lens' ListObjectsV2Response (Maybe Bool)
+lovrsIsTruncated = lens _lovrsIsTruncated (\ s a -> s{_lovrsIsTruncated = a})
+
+-- | A delimiter is a character you use to group keys.
+lovrsDelimiter :: Lens' ListObjectsV2Response (Maybe Delimiter)
+lovrsDelimiter = lens _lovrsDelimiter (\ s a -> s{_lovrsDelimiter = a})
+
+-- | -- | The response status code.
+lovrsResponseStatus :: Lens' ListObjectsV2Response Int
+lovrsResponseStatus = lens _lovrsResponseStatus (\ s a -> s{_lovrsResponseStatus = a})
+
+instance NFData ListObjectsV2Response where
diff --git a/gen/Network/AWS/S3/ListParts.hs b/gen/Network/AWS/S3/ListParts.hs
--- a/gen/Network/AWS/S3/ListParts.hs
+++ b/gen/Network/AWS/S3/ListParts.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.ListParts
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -96,38 +96,38 @@
     -> ListParts
 listParts pBucket_ pKey_ pUploadId_ =
   ListParts'
-  { _lpMaxParts = Nothing
-  , _lpRequestPayer = Nothing
-  , _lpPartNumberMarker = Nothing
-  , _lpBucket = pBucket_
-  , _lpKey = pKey_
-  , _lpUploadId = pUploadId_
-  }
+    { _lpMaxParts = Nothing
+    , _lpRequestPayer = Nothing
+    , _lpPartNumberMarker = Nothing
+    , _lpBucket = pBucket_
+    , _lpKey = pKey_
+    , _lpUploadId = pUploadId_
+    }
 
 
 -- | Sets the maximum number of parts to return.
 lpMaxParts :: Lens' ListParts (Maybe Int)
-lpMaxParts = lens _lpMaxParts (\ s a -> s{_lpMaxParts = a});
+lpMaxParts = lens _lpMaxParts (\ s a -> s{_lpMaxParts = a})
 
 -- | Undocumented member.
 lpRequestPayer :: Lens' ListParts (Maybe RequestPayer)
-lpRequestPayer = lens _lpRequestPayer (\ s a -> s{_lpRequestPayer = a});
+lpRequestPayer = lens _lpRequestPayer (\ s a -> s{_lpRequestPayer = a})
 
 -- | Specifies the part after which listing should begin. Only parts with higher part numbers will be listed.
 lpPartNumberMarker :: Lens' ListParts (Maybe Int)
-lpPartNumberMarker = lens _lpPartNumberMarker (\ s a -> s{_lpPartNumberMarker = a});
+lpPartNumberMarker = lens _lpPartNumberMarker (\ s a -> s{_lpPartNumberMarker = a})
 
 -- | Undocumented member.
 lpBucket :: Lens' ListParts BucketName
-lpBucket = lens _lpBucket (\ s a -> s{_lpBucket = a});
+lpBucket = lens _lpBucket (\ s a -> s{_lpBucket = a})
 
 -- | Undocumented member.
 lpKey :: Lens' ListParts ObjectKey
-lpKey = lens _lpKey (\ s a -> s{_lpKey = a});
+lpKey = lens _lpKey (\ s a -> s{_lpKey = a})
 
 -- | Upload ID identifying the multipart upload whose parts are being listed.
 lpUploadId :: Lens' ListParts Text
-lpUploadId = lens _lpUploadId (\ s a -> s{_lpUploadId = a});
+lpUploadId = lens _lpUploadId (\ s a -> s{_lpUploadId = a})
 
 instance AWSPager ListParts where
         page rq rs
@@ -238,82 +238,82 @@
     -> ListPartsResponse
 listPartsResponse pResponseStatus_ =
   ListPartsResponse'
-  { _lprsParts = Nothing
-  , _lprsRequestCharged = Nothing
-  , _lprsMaxParts = Nothing
-  , _lprsInitiator = Nothing
-  , _lprsBucket = Nothing
-  , _lprsAbortDate = Nothing
-  , _lprsNextPartNumberMarker = Nothing
-  , _lprsAbortRuleId = Nothing
-  , _lprsOwner = Nothing
-  , _lprsKey = Nothing
-  , _lprsStorageClass = Nothing
-  , _lprsIsTruncated = Nothing
-  , _lprsPartNumberMarker = Nothing
-  , _lprsUploadId = Nothing
-  , _lprsResponseStatus = pResponseStatus_
-  }
+    { _lprsParts = Nothing
+    , _lprsRequestCharged = Nothing
+    , _lprsMaxParts = Nothing
+    , _lprsInitiator = Nothing
+    , _lprsBucket = Nothing
+    , _lprsAbortDate = Nothing
+    , _lprsNextPartNumberMarker = Nothing
+    , _lprsAbortRuleId = Nothing
+    , _lprsOwner = Nothing
+    , _lprsKey = Nothing
+    , _lprsStorageClass = Nothing
+    , _lprsIsTruncated = Nothing
+    , _lprsPartNumberMarker = Nothing
+    , _lprsUploadId = Nothing
+    , _lprsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 lprsParts :: Lens' ListPartsResponse [Part]
-lprsParts = lens _lprsParts (\ s a -> s{_lprsParts = a}) . _Default . _Coerce;
+lprsParts = lens _lprsParts (\ s a -> s{_lprsParts = a}) . _Default . _Coerce
 
 -- | Undocumented member.
 lprsRequestCharged :: Lens' ListPartsResponse (Maybe RequestCharged)
-lprsRequestCharged = lens _lprsRequestCharged (\ s a -> s{_lprsRequestCharged = a});
+lprsRequestCharged = lens _lprsRequestCharged (\ s a -> s{_lprsRequestCharged = a})
 
 -- | Maximum number of parts that were allowed in the response.
 lprsMaxParts :: Lens' ListPartsResponse (Maybe Int)
-lprsMaxParts = lens _lprsMaxParts (\ s a -> s{_lprsMaxParts = a});
+lprsMaxParts = lens _lprsMaxParts (\ s a -> s{_lprsMaxParts = a})
 
 -- | Identifies who initiated the multipart upload.
 lprsInitiator :: Lens' ListPartsResponse (Maybe Initiator)
-lprsInitiator = lens _lprsInitiator (\ s a -> s{_lprsInitiator = a});
+lprsInitiator = lens _lprsInitiator (\ s a -> s{_lprsInitiator = a})
 
 -- | Name of the bucket to which the multipart upload was initiated.
 lprsBucket :: Lens' ListPartsResponse (Maybe BucketName)
-lprsBucket = lens _lprsBucket (\ s a -> s{_lprsBucket = a});
+lprsBucket = lens _lprsBucket (\ s a -> s{_lprsBucket = a})
 
 -- | Date when multipart upload will become eligible for abort operation by lifecycle.
 lprsAbortDate :: Lens' ListPartsResponse (Maybe UTCTime)
-lprsAbortDate = lens _lprsAbortDate (\ s a -> s{_lprsAbortDate = a}) . mapping _Time;
+lprsAbortDate = lens _lprsAbortDate (\ s a -> s{_lprsAbortDate = a}) . mapping _Time
 
 -- | When a list is truncated, this element specifies the last part in the list, as well as the value to use for the part-number-marker request parameter in a subsequent request.
 lprsNextPartNumberMarker :: Lens' ListPartsResponse (Maybe Int)
-lprsNextPartNumberMarker = lens _lprsNextPartNumberMarker (\ s a -> s{_lprsNextPartNumberMarker = a});
+lprsNextPartNumberMarker = lens _lprsNextPartNumberMarker (\ s a -> s{_lprsNextPartNumberMarker = a})
 
 -- | Id of the lifecycle rule that makes a multipart upload eligible for abort operation.
 lprsAbortRuleId :: Lens' ListPartsResponse (Maybe Text)
-lprsAbortRuleId = lens _lprsAbortRuleId (\ s a -> s{_lprsAbortRuleId = a});
+lprsAbortRuleId = lens _lprsAbortRuleId (\ s a -> s{_lprsAbortRuleId = a})
 
 -- | Undocumented member.
 lprsOwner :: Lens' ListPartsResponse (Maybe Owner)
-lprsOwner = lens _lprsOwner (\ s a -> s{_lprsOwner = a});
+lprsOwner = lens _lprsOwner (\ s a -> s{_lprsOwner = a})
 
 -- | Object key for which the multipart upload was initiated.
 lprsKey :: Lens' ListPartsResponse (Maybe ObjectKey)
-lprsKey = lens _lprsKey (\ s a -> s{_lprsKey = a});
+lprsKey = lens _lprsKey (\ s a -> s{_lprsKey = a})
 
 -- | The class of storage used to store the object.
 lprsStorageClass :: Lens' ListPartsResponse (Maybe StorageClass)
-lprsStorageClass = lens _lprsStorageClass (\ s a -> s{_lprsStorageClass = a});
+lprsStorageClass = lens _lprsStorageClass (\ s a -> s{_lprsStorageClass = a})
 
 -- | Indicates whether the returned list of parts is truncated.
 lprsIsTruncated :: Lens' ListPartsResponse (Maybe Bool)
-lprsIsTruncated = lens _lprsIsTruncated (\ s a -> s{_lprsIsTruncated = a});
+lprsIsTruncated = lens _lprsIsTruncated (\ s a -> s{_lprsIsTruncated = a})
 
 -- | Part number after which listing begins.
 lprsPartNumberMarker :: Lens' ListPartsResponse (Maybe Int)
-lprsPartNumberMarker = lens _lprsPartNumberMarker (\ s a -> s{_lprsPartNumberMarker = a});
+lprsPartNumberMarker = lens _lprsPartNumberMarker (\ s a -> s{_lprsPartNumberMarker = a})
 
 -- | Upload ID identifying the multipart upload whose parts are being listed.
 lprsUploadId :: Lens' ListPartsResponse (Maybe Text)
-lprsUploadId = lens _lprsUploadId (\ s a -> s{_lprsUploadId = a});
+lprsUploadId = lens _lprsUploadId (\ s a -> s{_lprsUploadId = a})
 
 -- | -- | The response status code.
 lprsResponseStatus :: Lens' ListPartsResponse Int
-lprsResponseStatus = lens _lprsResponseStatus (\ s a -> s{_lprsResponseStatus = a});
+lprsResponseStatus = lens _lprsResponseStatus (\ s a -> s{_lprsResponseStatus = a})
 
 instance NFData ListPartsResponse where
diff --git a/gen/Network/AWS/S3/PutBucketACL.hs b/gen/Network/AWS/S3/PutBucketACL.hs
--- a/gen/Network/AWS/S3/PutBucketACL.hs
+++ b/gen/Network/AWS/S3/PutBucketACL.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketACL
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -87,53 +87,53 @@
     -> PutBucketACL
 putBucketACL pBucket_ =
   PutBucketACL'
-  { _pbaGrantReadACP = Nothing
-  , _pbaGrantWriteACP = Nothing
-  , _pbaGrantRead = Nothing
-  , _pbaGrantFullControl = Nothing
-  , _pbaContentMD5 = Nothing
-  , _pbaAccessControlPolicy = Nothing
-  , _pbaGrantWrite = Nothing
-  , _pbaACL = Nothing
-  , _pbaBucket = pBucket_
-  }
+    { _pbaGrantReadACP = Nothing
+    , _pbaGrantWriteACP = Nothing
+    , _pbaGrantRead = Nothing
+    , _pbaGrantFullControl = Nothing
+    , _pbaContentMD5 = Nothing
+    , _pbaAccessControlPolicy = Nothing
+    , _pbaGrantWrite = Nothing
+    , _pbaACL = Nothing
+    , _pbaBucket = pBucket_
+    }
 
 
 -- | Allows grantee to read the bucket ACL.
 pbaGrantReadACP :: Lens' PutBucketACL (Maybe Text)
-pbaGrantReadACP = lens _pbaGrantReadACP (\ s a -> s{_pbaGrantReadACP = a});
+pbaGrantReadACP = lens _pbaGrantReadACP (\ s a -> s{_pbaGrantReadACP = a})
 
 -- | Allows grantee to write the ACL for the applicable bucket.
 pbaGrantWriteACP :: Lens' PutBucketACL (Maybe Text)
-pbaGrantWriteACP = lens _pbaGrantWriteACP (\ s a -> s{_pbaGrantWriteACP = a});
+pbaGrantWriteACP = lens _pbaGrantWriteACP (\ s a -> s{_pbaGrantWriteACP = a})
 
 -- | Allows grantee to list the objects in the bucket.
 pbaGrantRead :: Lens' PutBucketACL (Maybe Text)
-pbaGrantRead = lens _pbaGrantRead (\ s a -> s{_pbaGrantRead = a});
+pbaGrantRead = lens _pbaGrantRead (\ s a -> s{_pbaGrantRead = a})
 
 -- | Allows grantee the read, write, read ACP, and write ACP permissions on the bucket.
 pbaGrantFullControl :: Lens' PutBucketACL (Maybe Text)
-pbaGrantFullControl = lens _pbaGrantFullControl (\ s a -> s{_pbaGrantFullControl = a});
+pbaGrantFullControl = lens _pbaGrantFullControl (\ s a -> s{_pbaGrantFullControl = a})
 
 -- | Undocumented member.
 pbaContentMD5 :: Lens' PutBucketACL (Maybe Text)
-pbaContentMD5 = lens _pbaContentMD5 (\ s a -> s{_pbaContentMD5 = a});
+pbaContentMD5 = lens _pbaContentMD5 (\ s a -> s{_pbaContentMD5 = a})
 
 -- | Undocumented member.
 pbaAccessControlPolicy :: Lens' PutBucketACL (Maybe AccessControlPolicy)
-pbaAccessControlPolicy = lens _pbaAccessControlPolicy (\ s a -> s{_pbaAccessControlPolicy = a});
+pbaAccessControlPolicy = lens _pbaAccessControlPolicy (\ s a -> s{_pbaAccessControlPolicy = a})
 
 -- | Allows grantee to create, overwrite, and delete any object in the bucket.
 pbaGrantWrite :: Lens' PutBucketACL (Maybe Text)
-pbaGrantWrite = lens _pbaGrantWrite (\ s a -> s{_pbaGrantWrite = a});
+pbaGrantWrite = lens _pbaGrantWrite (\ s a -> s{_pbaGrantWrite = a})
 
 -- | The canned ACL to apply to the bucket.
 pbaACL :: Lens' PutBucketACL (Maybe BucketCannedACL)
-pbaACL = lens _pbaACL (\ s a -> s{_pbaACL = a});
+pbaACL = lens _pbaACL (\ s a -> s{_pbaACL = a})
 
 -- | Undocumented member.
 pbaBucket :: Lens' PutBucketACL BucketName
-pbaBucket = lens _pbaBucket (\ s a -> s{_pbaBucket = a});
+pbaBucket = lens _pbaBucket (\ s a -> s{_pbaBucket = a})
 
 instance AWSRequest PutBucketACL where
         type Rs PutBucketACL = PutBucketACLResponse
diff --git a/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs b/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketAccelerateConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketAccelerateConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -60,18 +60,18 @@
     -> PutBucketAccelerateConfiguration
 putBucketAccelerateConfiguration pBucket_ pAccelerateConfiguration_ =
   PutBucketAccelerateConfiguration'
-  { _pbacBucket = pBucket_
-  , _pbacAccelerateConfiguration = pAccelerateConfiguration_
-  }
+    { _pbacBucket = pBucket_
+    , _pbacAccelerateConfiguration = pAccelerateConfiguration_
+    }
 
 
 -- | Name of the bucket for which the accelerate configuration is set.
 pbacBucket :: Lens' PutBucketAccelerateConfiguration BucketName
-pbacBucket = lens _pbacBucket (\ s a -> s{_pbacBucket = a});
+pbacBucket = lens _pbacBucket (\ s a -> s{_pbacBucket = a})
 
 -- | Specifies the Accelerate Configuration you want to set for the bucket.
 pbacAccelerateConfiguration :: Lens' PutBucketAccelerateConfiguration AccelerateConfiguration
-pbacAccelerateConfiguration = lens _pbacAccelerateConfiguration (\ s a -> s{_pbacAccelerateConfiguration = a});
+pbacAccelerateConfiguration = lens _pbacAccelerateConfiguration (\ s a -> s{_pbacAccelerateConfiguration = a})
 
 instance AWSRequest PutBucketAccelerateConfiguration
          where
diff --git a/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs b/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketAnalyticsConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketAnalyticsConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -65,23 +65,23 @@
     -> PutBucketAnalyticsConfiguration
 putBucketAnalyticsConfiguration pBucket_ pId_ pAnalyticsConfiguration_ =
   PutBucketAnalyticsConfiguration'
-  { _pBucket = pBucket_
-  , _pId = pId_
-  , _pAnalyticsConfiguration = pAnalyticsConfiguration_
-  }
+    { _pBucket = pBucket_
+    , _pId = pId_
+    , _pAnalyticsConfiguration = pAnalyticsConfiguration_
+    }
 
 
 -- | The name of the bucket to which an analytics configuration is stored.
 pBucket :: Lens' PutBucketAnalyticsConfiguration BucketName
-pBucket = lens _pBucket (\ s a -> s{_pBucket = a});
+pBucket = lens _pBucket (\ s a -> s{_pBucket = a})
 
 -- | The identifier used to represent an analytics configuration.
 pId :: Lens' PutBucketAnalyticsConfiguration Text
-pId = lens _pId (\ s a -> s{_pId = a});
+pId = lens _pId (\ s a -> s{_pId = a})
 
 -- | The configuration and any analyses for the analytics filter.
 pAnalyticsConfiguration :: Lens' PutBucketAnalyticsConfiguration AnalyticsConfiguration
-pAnalyticsConfiguration = lens _pAnalyticsConfiguration (\ s a -> s{_pAnalyticsConfiguration = a});
+pAnalyticsConfiguration = lens _pAnalyticsConfiguration (\ s a -> s{_pAnalyticsConfiguration = a})
 
 instance AWSRequest PutBucketAnalyticsConfiguration
          where
diff --git a/gen/Network/AWS/S3/PutBucketCORS.hs b/gen/Network/AWS/S3/PutBucketCORS.hs
--- a/gen/Network/AWS/S3/PutBucketCORS.hs
+++ b/gen/Network/AWS/S3/PutBucketCORS.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketCORS
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,23 +64,23 @@
     -> PutBucketCORS
 putBucketCORS pBucket_ pCORSConfiguration_ =
   PutBucketCORS'
-  { _pbcContentMD5 = Nothing
-  , _pbcBucket = pBucket_
-  , _pbcCORSConfiguration = pCORSConfiguration_
-  }
+    { _pbcContentMD5 = Nothing
+    , _pbcBucket = pBucket_
+    , _pbcCORSConfiguration = pCORSConfiguration_
+    }
 
 
 -- | Undocumented member.
 pbcContentMD5 :: Lens' PutBucketCORS (Maybe Text)
-pbcContentMD5 = lens _pbcContentMD5 (\ s a -> s{_pbcContentMD5 = a});
+pbcContentMD5 = lens _pbcContentMD5 (\ s a -> s{_pbcContentMD5 = a})
 
 -- | Undocumented member.
 pbcBucket :: Lens' PutBucketCORS BucketName
-pbcBucket = lens _pbcBucket (\ s a -> s{_pbcBucket = a});
+pbcBucket = lens _pbcBucket (\ s a -> s{_pbcBucket = a})
 
 -- | Undocumented member.
 pbcCORSConfiguration :: Lens' PutBucketCORS CORSConfiguration
-pbcCORSConfiguration = lens _pbcCORSConfiguration (\ s a -> s{_pbcCORSConfiguration = a});
+pbcCORSConfiguration = lens _pbcCORSConfiguration (\ s a -> s{_pbcCORSConfiguration = a})
 
 instance AWSRequest PutBucketCORS where
         type Rs PutBucketCORS = PutBucketCORSResponse
diff --git a/gen/Network/AWS/S3/PutBucketEncryption.hs b/gen/Network/AWS/S3/PutBucketEncryption.hs
--- a/gen/Network/AWS/S3/PutBucketEncryption.hs
+++ b/gen/Network/AWS/S3/PutBucketEncryption.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketEncryption
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,23 +64,24 @@
     -> PutBucketEncryption
 putBucketEncryption pBucket_ pServerSideEncryptionConfiguration_ =
   PutBucketEncryption'
-  { _pbeContentMD5 = Nothing
-  , _pbeBucket = pBucket_
-  , _pbeServerSideEncryptionConfiguration = pServerSideEncryptionConfiguration_
-  }
+    { _pbeContentMD5 = Nothing
+    , _pbeBucket = pBucket_
+    , _pbeServerSideEncryptionConfiguration =
+        pServerSideEncryptionConfiguration_
+    }
 
 
 -- | The base64-encoded 128-bit MD5 digest of the server-side encryption configuration.
 pbeContentMD5 :: Lens' PutBucketEncryption (Maybe Text)
-pbeContentMD5 = lens _pbeContentMD5 (\ s a -> s{_pbeContentMD5 = a});
+pbeContentMD5 = lens _pbeContentMD5 (\ s a -> s{_pbeContentMD5 = a})
 
 -- | The name of the bucket for which the server-side encryption configuration is set.
 pbeBucket :: Lens' PutBucketEncryption BucketName
-pbeBucket = lens _pbeBucket (\ s a -> s{_pbeBucket = a});
+pbeBucket = lens _pbeBucket (\ s a -> s{_pbeBucket = a})
 
 -- | Undocumented member.
 pbeServerSideEncryptionConfiguration :: Lens' PutBucketEncryption ServerSideEncryptionConfiguration
-pbeServerSideEncryptionConfiguration = lens _pbeServerSideEncryptionConfiguration (\ s a -> s{_pbeServerSideEncryptionConfiguration = a});
+pbeServerSideEncryptionConfiguration = lens _pbeServerSideEncryptionConfiguration (\ s a -> s{_pbeServerSideEncryptionConfiguration = a})
 
 instance AWSRequest PutBucketEncryption where
         type Rs PutBucketEncryption =
diff --git a/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs b/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketInventoryConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketInventoryConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -65,23 +65,23 @@
     -> PutBucketInventoryConfiguration
 putBucketInventoryConfiguration pBucket_ pId_ pInventoryConfiguration_ =
   PutBucketInventoryConfiguration'
-  { _pbicBucket = pBucket_
-  , _pbicId = pId_
-  , _pbicInventoryConfiguration = pInventoryConfiguration_
-  }
+    { _pbicBucket = pBucket_
+    , _pbicId = pId_
+    , _pbicInventoryConfiguration = pInventoryConfiguration_
+    }
 
 
 -- | The name of the bucket where the inventory configuration will be stored.
 pbicBucket :: Lens' PutBucketInventoryConfiguration BucketName
-pbicBucket = lens _pbicBucket (\ s a -> s{_pbicBucket = a});
+pbicBucket = lens _pbicBucket (\ s a -> s{_pbicBucket = a})
 
 -- | The ID used to identify the inventory configuration.
 pbicId :: Lens' PutBucketInventoryConfiguration Text
-pbicId = lens _pbicId (\ s a -> s{_pbicId = a});
+pbicId = lens _pbicId (\ s a -> s{_pbicId = a})
 
 -- | Specifies the inventory configuration.
 pbicInventoryConfiguration :: Lens' PutBucketInventoryConfiguration InventoryConfiguration
-pbicInventoryConfiguration = lens _pbicInventoryConfiguration (\ s a -> s{_pbicInventoryConfiguration = a});
+pbicInventoryConfiguration = lens _pbicInventoryConfiguration (\ s a -> s{_pbicInventoryConfiguration = a})
 
 instance AWSRequest PutBucketInventoryConfiguration
          where
diff --git a/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs b/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketLifecycleConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketLifecycleConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -59,16 +59,16 @@
     -> PutBucketLifecycleConfiguration
 putBucketLifecycleConfiguration pBucket_ =
   PutBucketLifecycleConfiguration'
-  {_pblcLifecycleConfiguration = Nothing, _pblcBucket = pBucket_}
+    {_pblcLifecycleConfiguration = Nothing, _pblcBucket = pBucket_}
 
 
 -- | Undocumented member.
 pblcLifecycleConfiguration :: Lens' PutBucketLifecycleConfiguration (Maybe BucketLifecycleConfiguration)
-pblcLifecycleConfiguration = lens _pblcLifecycleConfiguration (\ s a -> s{_pblcLifecycleConfiguration = a});
+pblcLifecycleConfiguration = lens _pblcLifecycleConfiguration (\ s a -> s{_pblcLifecycleConfiguration = a})
 
 -- | Undocumented member.
 pblcBucket :: Lens' PutBucketLifecycleConfiguration BucketName
-pblcBucket = lens _pblcBucket (\ s a -> s{_pblcBucket = a});
+pblcBucket = lens _pblcBucket (\ s a -> s{_pblcBucket = a})
 
 instance AWSRequest PutBucketLifecycleConfiguration
          where
diff --git a/gen/Network/AWS/S3/PutBucketLogging.hs b/gen/Network/AWS/S3/PutBucketLogging.hs
--- a/gen/Network/AWS/S3/PutBucketLogging.hs
+++ b/gen/Network/AWS/S3/PutBucketLogging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketLogging
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,23 +64,23 @@
     -> PutBucketLogging
 putBucketLogging pBucket_ pBucketLoggingStatus_ =
   PutBucketLogging'
-  { _pblContentMD5 = Nothing
-  , _pblBucket = pBucket_
-  , _pblBucketLoggingStatus = pBucketLoggingStatus_
-  }
+    { _pblContentMD5 = Nothing
+    , _pblBucket = pBucket_
+    , _pblBucketLoggingStatus = pBucketLoggingStatus_
+    }
 
 
 -- | Undocumented member.
 pblContentMD5 :: Lens' PutBucketLogging (Maybe Text)
-pblContentMD5 = lens _pblContentMD5 (\ s a -> s{_pblContentMD5 = a});
+pblContentMD5 = lens _pblContentMD5 (\ s a -> s{_pblContentMD5 = a})
 
 -- | Undocumented member.
 pblBucket :: Lens' PutBucketLogging BucketName
-pblBucket = lens _pblBucket (\ s a -> s{_pblBucket = a});
+pblBucket = lens _pblBucket (\ s a -> s{_pblBucket = a})
 
 -- | Undocumented member.
 pblBucketLoggingStatus :: Lens' PutBucketLogging BucketLoggingStatus
-pblBucketLoggingStatus = lens _pblBucketLoggingStatus (\ s a -> s{_pblBucketLoggingStatus = a});
+pblBucketLoggingStatus = lens _pblBucketLoggingStatus (\ s a -> s{_pblBucketLoggingStatus = a})
 
 instance AWSRequest PutBucketLogging where
         type Rs PutBucketLogging = PutBucketLoggingResponse
diff --git a/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs b/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketMetricsConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketMetricsConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -65,23 +65,23 @@
     -> PutBucketMetricsConfiguration
 putBucketMetricsConfiguration pBucket_ pId_ pMetricsConfiguration_ =
   PutBucketMetricsConfiguration'
-  { _pbmcBucket = pBucket_
-  , _pbmcId = pId_
-  , _pbmcMetricsConfiguration = pMetricsConfiguration_
-  }
+    { _pbmcBucket = pBucket_
+    , _pbmcId = pId_
+    , _pbmcMetricsConfiguration = pMetricsConfiguration_
+    }
 
 
 -- | The name of the bucket for which the metrics configuration is set.
 pbmcBucket :: Lens' PutBucketMetricsConfiguration BucketName
-pbmcBucket = lens _pbmcBucket (\ s a -> s{_pbmcBucket = a});
+pbmcBucket = lens _pbmcBucket (\ s a -> s{_pbmcBucket = a})
 
 -- | The ID used to identify the metrics configuration.
 pbmcId :: Lens' PutBucketMetricsConfiguration Text
-pbmcId = lens _pbmcId (\ s a -> s{_pbmcId = a});
+pbmcId = lens _pbmcId (\ s a -> s{_pbmcId = a})
 
 -- | Specifies the metrics configuration.
 pbmcMetricsConfiguration :: Lens' PutBucketMetricsConfiguration MetricsConfiguration
-pbmcMetricsConfiguration = lens _pbmcMetricsConfiguration (\ s a -> s{_pbmcMetricsConfiguration = a});
+pbmcMetricsConfiguration = lens _pbmcMetricsConfiguration (\ s a -> s{_pbmcMetricsConfiguration = a})
 
 instance AWSRequest PutBucketMetricsConfiguration
          where
diff --git a/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs b/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
--- a/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
+++ b/gen/Network/AWS/S3/PutBucketNotificationConfiguration.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketNotificationConfiguration
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -60,18 +60,18 @@
     -> PutBucketNotificationConfiguration
 putBucketNotificationConfiguration pBucket_ pNotificationConfiguration_ =
   PutBucketNotificationConfiguration'
-  { _pbncBucket = pBucket_
-  , _pbncNotificationConfiguration = pNotificationConfiguration_
-  }
+    { _pbncBucket = pBucket_
+    , _pbncNotificationConfiguration = pNotificationConfiguration_
+    }
 
 
 -- | Undocumented member.
 pbncBucket :: Lens' PutBucketNotificationConfiguration BucketName
-pbncBucket = lens _pbncBucket (\ s a -> s{_pbncBucket = a});
+pbncBucket = lens _pbncBucket (\ s a -> s{_pbncBucket = a})
 
 -- | Undocumented member.
 pbncNotificationConfiguration :: Lens' PutBucketNotificationConfiguration NotificationConfiguration
-pbncNotificationConfiguration = lens _pbncNotificationConfiguration (\ s a -> s{_pbncNotificationConfiguration = a});
+pbncNotificationConfiguration = lens _pbncNotificationConfiguration (\ s a -> s{_pbncNotificationConfiguration = a})
 
 instance AWSRequest
            PutBucketNotificationConfiguration
diff --git a/gen/Network/AWS/S3/PutBucketPolicy.hs b/gen/Network/AWS/S3/PutBucketPolicy.hs
--- a/gen/Network/AWS/S3/PutBucketPolicy.hs
+++ b/gen/Network/AWS/S3/PutBucketPolicy.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketPolicy
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -47,7 +47,7 @@
   { _pbpConfirmRemoveSelfBucketAccess :: !(Maybe Bool)
   , _pbpContentMD5                    :: !(Maybe Text)
   , _pbpBucket                        :: !BucketName
-  , _pbpPolicy                        :: !(HashMap Text Value)
+  , _pbpPolicy                        :: !ByteString
   } deriving (Eq, Show, Data, Typeable, Generic)
 
 
@@ -64,32 +64,32 @@
 -- * 'pbpPolicy' - The bucket policy as a JSON document.
 putBucketPolicy
     :: BucketName -- ^ 'pbpBucket'
-    -> HashMap Text Value -- ^ 'pbpPolicy'
+    -> ByteString -- ^ 'pbpPolicy'
     -> PutBucketPolicy
 putBucketPolicy pBucket_ pPolicy_ =
   PutBucketPolicy'
-  { _pbpConfirmRemoveSelfBucketAccess = Nothing
-  , _pbpContentMD5 = Nothing
-  , _pbpBucket = pBucket_
-  , _pbpPolicy = pPolicy_
-  }
+    { _pbpConfirmRemoveSelfBucketAccess = Nothing
+    , _pbpContentMD5 = Nothing
+    , _pbpBucket = pBucket_
+    , _pbpPolicy = pPolicy_
+    }
 
 
 -- | Set this parameter to true to confirm that you want to remove your permissions to change this bucket policy in the future.
 pbpConfirmRemoveSelfBucketAccess :: Lens' PutBucketPolicy (Maybe Bool)
-pbpConfirmRemoveSelfBucketAccess = lens _pbpConfirmRemoveSelfBucketAccess (\ s a -> s{_pbpConfirmRemoveSelfBucketAccess = a});
+pbpConfirmRemoveSelfBucketAccess = lens _pbpConfirmRemoveSelfBucketAccess (\ s a -> s{_pbpConfirmRemoveSelfBucketAccess = a})
 
 -- | Undocumented member.
 pbpContentMD5 :: Lens' PutBucketPolicy (Maybe Text)
-pbpContentMD5 = lens _pbpContentMD5 (\ s a -> s{_pbpContentMD5 = a});
+pbpContentMD5 = lens _pbpContentMD5 (\ s a -> s{_pbpContentMD5 = a})
 
 -- | Undocumented member.
 pbpBucket :: Lens' PutBucketPolicy BucketName
-pbpBucket = lens _pbpBucket (\ s a -> s{_pbpBucket = a});
+pbpBucket = lens _pbpBucket (\ s a -> s{_pbpBucket = a})
 
 -- | The bucket policy as a JSON document.
-pbpPolicy :: Lens' PutBucketPolicy (HashMap Text Value)
-pbpPolicy = lens _pbpPolicy (\ s a -> s{_pbpPolicy = a});
+pbpPolicy :: Lens' PutBucketPolicy ByteString
+pbpPolicy = lens _pbpPolicy (\ s a -> s{_pbpPolicy = a})
 
 instance AWSRequest PutBucketPolicy where
         type Rs PutBucketPolicy = PutBucketPolicyResponse
diff --git a/gen/Network/AWS/S3/PutBucketReplication.hs b/gen/Network/AWS/S3/PutBucketReplication.hs
--- a/gen/Network/AWS/S3/PutBucketReplication.hs
+++ b/gen/Network/AWS/S3/PutBucketReplication.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketReplication
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,23 +64,23 @@
     -> PutBucketReplication
 putBucketReplication pBucket_ pReplicationConfiguration_ =
   PutBucketReplication'
-  { _pbrContentMD5 = Nothing
-  , _pbrBucket = pBucket_
-  , _pbrReplicationConfiguration = pReplicationConfiguration_
-  }
+    { _pbrContentMD5 = Nothing
+    , _pbrBucket = pBucket_
+    , _pbrReplicationConfiguration = pReplicationConfiguration_
+    }
 
 
 -- | Undocumented member.
 pbrContentMD5 :: Lens' PutBucketReplication (Maybe Text)
-pbrContentMD5 = lens _pbrContentMD5 (\ s a -> s{_pbrContentMD5 = a});
+pbrContentMD5 = lens _pbrContentMD5 (\ s a -> s{_pbrContentMD5 = a})
 
 -- | Undocumented member.
 pbrBucket :: Lens' PutBucketReplication BucketName
-pbrBucket = lens _pbrBucket (\ s a -> s{_pbrBucket = a});
+pbrBucket = lens _pbrBucket (\ s a -> s{_pbrBucket = a})
 
 -- | Undocumented member.
 pbrReplicationConfiguration :: Lens' PutBucketReplication ReplicationConfiguration
-pbrReplicationConfiguration = lens _pbrReplicationConfiguration (\ s a -> s{_pbrReplicationConfiguration = a});
+pbrReplicationConfiguration = lens _pbrReplicationConfiguration (\ s a -> s{_pbrReplicationConfiguration = a})
 
 instance AWSRequest PutBucketReplication where
         type Rs PutBucketReplication =
diff --git a/gen/Network/AWS/S3/PutBucketRequestPayment.hs b/gen/Network/AWS/S3/PutBucketRequestPayment.hs
--- a/gen/Network/AWS/S3/PutBucketRequestPayment.hs
+++ b/gen/Network/AWS/S3/PutBucketRequestPayment.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketRequestPayment
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,23 +64,23 @@
     -> PutBucketRequestPayment
 putBucketRequestPayment pBucket_ pRequestPaymentConfiguration_ =
   PutBucketRequestPayment'
-  { _pbrpContentMD5 = Nothing
-  , _pbrpBucket = pBucket_
-  , _pbrpRequestPaymentConfiguration = pRequestPaymentConfiguration_
-  }
+    { _pbrpContentMD5 = Nothing
+    , _pbrpBucket = pBucket_
+    , _pbrpRequestPaymentConfiguration = pRequestPaymentConfiguration_
+    }
 
 
 -- | Undocumented member.
 pbrpContentMD5 :: Lens' PutBucketRequestPayment (Maybe Text)
-pbrpContentMD5 = lens _pbrpContentMD5 (\ s a -> s{_pbrpContentMD5 = a});
+pbrpContentMD5 = lens _pbrpContentMD5 (\ s a -> s{_pbrpContentMD5 = a})
 
 -- | Undocumented member.
 pbrpBucket :: Lens' PutBucketRequestPayment BucketName
-pbrpBucket = lens _pbrpBucket (\ s a -> s{_pbrpBucket = a});
+pbrpBucket = lens _pbrpBucket (\ s a -> s{_pbrpBucket = a})
 
 -- | Undocumented member.
 pbrpRequestPaymentConfiguration :: Lens' PutBucketRequestPayment RequestPaymentConfiguration
-pbrpRequestPaymentConfiguration = lens _pbrpRequestPaymentConfiguration (\ s a -> s{_pbrpRequestPaymentConfiguration = a});
+pbrpRequestPaymentConfiguration = lens _pbrpRequestPaymentConfiguration (\ s a -> s{_pbrpRequestPaymentConfiguration = a})
 
 instance AWSRequest PutBucketRequestPayment where
         type Rs PutBucketRequestPayment =
diff --git a/gen/Network/AWS/S3/PutBucketTagging.hs b/gen/Network/AWS/S3/PutBucketTagging.hs
--- a/gen/Network/AWS/S3/PutBucketTagging.hs
+++ b/gen/Network/AWS/S3/PutBucketTagging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketTagging
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,20 +64,20 @@
     -> PutBucketTagging
 putBucketTagging pBucket_ pTagging_ =
   PutBucketTagging'
-  {_pbtContentMD5 = Nothing, _pbtBucket = pBucket_, _pbtTagging = pTagging_}
+    {_pbtContentMD5 = Nothing, _pbtBucket = pBucket_, _pbtTagging = pTagging_}
 
 
 -- | Undocumented member.
 pbtContentMD5 :: Lens' PutBucketTagging (Maybe Text)
-pbtContentMD5 = lens _pbtContentMD5 (\ s a -> s{_pbtContentMD5 = a});
+pbtContentMD5 = lens _pbtContentMD5 (\ s a -> s{_pbtContentMD5 = a})
 
 -- | Undocumented member.
 pbtBucket :: Lens' PutBucketTagging BucketName
-pbtBucket = lens _pbtBucket (\ s a -> s{_pbtBucket = a});
+pbtBucket = lens _pbtBucket (\ s a -> s{_pbtBucket = a})
 
 -- | Undocumented member.
 pbtTagging :: Lens' PutBucketTagging Tagging
-pbtTagging = lens _pbtTagging (\ s a -> s{_pbtTagging = a});
+pbtTagging = lens _pbtTagging (\ s a -> s{_pbtTagging = a})
 
 instance AWSRequest PutBucketTagging where
         type Rs PutBucketTagging = PutBucketTaggingResponse
diff --git a/gen/Network/AWS/S3/PutBucketVersioning.hs b/gen/Network/AWS/S3/PutBucketVersioning.hs
--- a/gen/Network/AWS/S3/PutBucketVersioning.hs
+++ b/gen/Network/AWS/S3/PutBucketVersioning.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketVersioning
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -68,28 +68,28 @@
     -> PutBucketVersioning
 putBucketVersioning pBucket_ pVersioningConfiguration_ =
   PutBucketVersioning'
-  { _pbvMFA = Nothing
-  , _pbvContentMD5 = Nothing
-  , _pbvBucket = pBucket_
-  , _pbvVersioningConfiguration = pVersioningConfiguration_
-  }
+    { _pbvMFA = Nothing
+    , _pbvContentMD5 = Nothing
+    , _pbvBucket = pBucket_
+    , _pbvVersioningConfiguration = pVersioningConfiguration_
+    }
 
 
 -- | The concatenation of the authentication device's serial number, a space, and the value that is displayed on your authentication device.
 pbvMFA :: Lens' PutBucketVersioning (Maybe Text)
-pbvMFA = lens _pbvMFA (\ s a -> s{_pbvMFA = a});
+pbvMFA = lens _pbvMFA (\ s a -> s{_pbvMFA = a})
 
 -- | Undocumented member.
 pbvContentMD5 :: Lens' PutBucketVersioning (Maybe Text)
-pbvContentMD5 = lens _pbvContentMD5 (\ s a -> s{_pbvContentMD5 = a});
+pbvContentMD5 = lens _pbvContentMD5 (\ s a -> s{_pbvContentMD5 = a})
 
 -- | Undocumented member.
 pbvBucket :: Lens' PutBucketVersioning BucketName
-pbvBucket = lens _pbvBucket (\ s a -> s{_pbvBucket = a});
+pbvBucket = lens _pbvBucket (\ s a -> s{_pbvBucket = a})
 
 -- | Undocumented member.
 pbvVersioningConfiguration :: Lens' PutBucketVersioning VersioningConfiguration
-pbvVersioningConfiguration = lens _pbvVersioningConfiguration (\ s a -> s{_pbvVersioningConfiguration = a});
+pbvVersioningConfiguration = lens _pbvVersioningConfiguration (\ s a -> s{_pbvVersioningConfiguration = a})
 
 instance AWSRequest PutBucketVersioning where
         type Rs PutBucketVersioning =
diff --git a/gen/Network/AWS/S3/PutBucketWebsite.hs b/gen/Network/AWS/S3/PutBucketWebsite.hs
--- a/gen/Network/AWS/S3/PutBucketWebsite.hs
+++ b/gen/Network/AWS/S3/PutBucketWebsite.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutBucketWebsite
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -64,23 +64,23 @@
     -> PutBucketWebsite
 putBucketWebsite pBucket_ pWebsiteConfiguration_ =
   PutBucketWebsite'
-  { _pbwContentMD5 = Nothing
-  , _pbwBucket = pBucket_
-  , _pbwWebsiteConfiguration = pWebsiteConfiguration_
-  }
+    { _pbwContentMD5 = Nothing
+    , _pbwBucket = pBucket_
+    , _pbwWebsiteConfiguration = pWebsiteConfiguration_
+    }
 
 
 -- | Undocumented member.
 pbwContentMD5 :: Lens' PutBucketWebsite (Maybe Text)
-pbwContentMD5 = lens _pbwContentMD5 (\ s a -> s{_pbwContentMD5 = a});
+pbwContentMD5 = lens _pbwContentMD5 (\ s a -> s{_pbwContentMD5 = a})
 
 -- | Undocumented member.
 pbwBucket :: Lens' PutBucketWebsite BucketName
-pbwBucket = lens _pbwBucket (\ s a -> s{_pbwBucket = a});
+pbwBucket = lens _pbwBucket (\ s a -> s{_pbwBucket = a})
 
 -- | Undocumented member.
 pbwWebsiteConfiguration :: Lens' PutBucketWebsite WebsiteConfiguration
-pbwWebsiteConfiguration = lens _pbwWebsiteConfiguration (\ s a -> s{_pbwWebsiteConfiguration = a});
+pbwWebsiteConfiguration = lens _pbwWebsiteConfiguration (\ s a -> s{_pbwWebsiteConfiguration = a})
 
 instance AWSRequest PutBucketWebsite where
         type Rs PutBucketWebsite = PutBucketWebsiteResponse
diff --git a/gen/Network/AWS/S3/PutObject.hs b/gen/Network/AWS/S3/PutObject.hs
--- a/gen/Network/AWS/S3/PutObject.hs
+++ b/gen/Network/AWS/S3/PutObject.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutObject
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -167,138 +167,138 @@
     -> PutObject
 putObject pBucket_ pKey_ pBody_ =
   PutObject'
-  { _poContentLength = Nothing
-  , _poExpires = Nothing
-  , _poGrantReadACP = Nothing
-  , _poSSECustomerAlgorithm = Nothing
-  , _poSSECustomerKey = Nothing
-  , _poRequestPayer = Nothing
-  , _poGrantWriteACP = Nothing
-  , _poWebsiteRedirectLocation = Nothing
-  , _poGrantRead = Nothing
-  , _poStorageClass = Nothing
-  , _poSSECustomerKeyMD5 = Nothing
-  , _poSSEKMSKeyId = Nothing
-  , _poGrantFullControl = Nothing
-  , _poContentEncoding = Nothing
-  , _poTagging = Nothing
-  , _poContentMD5 = Nothing
-  , _poMetadata = mempty
-  , _poCacheControl = Nothing
-  , _poContentLanguage = Nothing
-  , _poACL = Nothing
-  , _poContentDisposition = Nothing
-  , _poServerSideEncryption = Nothing
-  , _poContentType = Nothing
-  , _poBucket = pBucket_
-  , _poKey = pKey_
-  , _poBody = pBody_
-  }
+    { _poContentLength = Nothing
+    , _poExpires = Nothing
+    , _poGrantReadACP = Nothing
+    , _poSSECustomerAlgorithm = Nothing
+    , _poSSECustomerKey = Nothing
+    , _poRequestPayer = Nothing
+    , _poGrantWriteACP = Nothing
+    , _poWebsiteRedirectLocation = Nothing
+    , _poGrantRead = Nothing
+    , _poStorageClass = Nothing
+    , _poSSECustomerKeyMD5 = Nothing
+    , _poSSEKMSKeyId = Nothing
+    , _poGrantFullControl = Nothing
+    , _poContentEncoding = Nothing
+    , _poTagging = Nothing
+    , _poContentMD5 = Nothing
+    , _poMetadata = mempty
+    , _poCacheControl = Nothing
+    , _poContentLanguage = Nothing
+    , _poACL = Nothing
+    , _poContentDisposition = Nothing
+    , _poServerSideEncryption = Nothing
+    , _poContentType = Nothing
+    , _poBucket = pBucket_
+    , _poKey = pKey_
+    , _poBody = pBody_
+    }
 
 
 -- | Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically.
 poContentLength :: Lens' PutObject (Maybe Integer)
-poContentLength = lens _poContentLength (\ s a -> s{_poContentLength = a});
+poContentLength = lens _poContentLength (\ s a -> s{_poContentLength = a})
 
 -- | The date and time at which the object is no longer cacheable.
 poExpires :: Lens' PutObject (Maybe UTCTime)
-poExpires = lens _poExpires (\ s a -> s{_poExpires = a}) . mapping _Time;
+poExpires = lens _poExpires (\ s a -> s{_poExpires = a}) . mapping _Time
 
 -- | Allows grantee to read the object ACL.
 poGrantReadACP :: Lens' PutObject (Maybe Text)
-poGrantReadACP = lens _poGrantReadACP (\ s a -> s{_poGrantReadACP = a});
+poGrantReadACP = lens _poGrantReadACP (\ s a -> s{_poGrantReadACP = a})
 
 -- | Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 poSSECustomerAlgorithm :: Lens' PutObject (Maybe Text)
-poSSECustomerAlgorithm = lens _poSSECustomerAlgorithm (\ s a -> s{_poSSECustomerAlgorithm = a});
+poSSECustomerAlgorithm = lens _poSSECustomerAlgorithm (\ s a -> s{_poSSECustomerAlgorithm = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm header.
 poSSECustomerKey :: Lens' PutObject (Maybe Text)
-poSSECustomerKey = lens _poSSECustomerKey (\ s a -> s{_poSSECustomerKey = a}) . mapping _Sensitive;
+poSSECustomerKey = lens _poSSECustomerKey (\ s a -> s{_poSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Undocumented member.
 poRequestPayer :: Lens' PutObject (Maybe RequestPayer)
-poRequestPayer = lens _poRequestPayer (\ s a -> s{_poRequestPayer = a});
+poRequestPayer = lens _poRequestPayer (\ s a -> s{_poRequestPayer = a})
 
 -- | Allows grantee to write the ACL for the applicable object.
 poGrantWriteACP :: Lens' PutObject (Maybe Text)
-poGrantWriteACP = lens _poGrantWriteACP (\ s a -> s{_poGrantWriteACP = a});
+poGrantWriteACP = lens _poGrantWriteACP (\ s a -> s{_poGrantWriteACP = a})
 
 -- | If the bucket is configured as a website, redirects requests for this object to another object in the same bucket or to an external URL. Amazon S3 stores the value of this header in the object metadata.
 poWebsiteRedirectLocation :: Lens' PutObject (Maybe Text)
-poWebsiteRedirectLocation = lens _poWebsiteRedirectLocation (\ s a -> s{_poWebsiteRedirectLocation = a});
+poWebsiteRedirectLocation = lens _poWebsiteRedirectLocation (\ s a -> s{_poWebsiteRedirectLocation = a})
 
 -- | Allows grantee to read the object data and its metadata.
 poGrantRead :: Lens' PutObject (Maybe Text)
-poGrantRead = lens _poGrantRead (\ s a -> s{_poGrantRead = a});
+poGrantRead = lens _poGrantRead (\ s a -> s{_poGrantRead = a})
 
 -- | The type of storage to use for the object. Defaults to 'STANDARD'.
 poStorageClass :: Lens' PutObject (Maybe StorageClass)
-poStorageClass = lens _poStorageClass (\ s a -> s{_poStorageClass = a});
+poStorageClass = lens _poStorageClass (\ s a -> s{_poStorageClass = a})
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 poSSECustomerKeyMD5 :: Lens' PutObject (Maybe Text)
-poSSECustomerKeyMD5 = lens _poSSECustomerKeyMD5 (\ s a -> s{_poSSECustomerKeyMD5 = a});
+poSSECustomerKeyMD5 = lens _poSSECustomerKeyMD5 (\ s a -> s{_poSSECustomerKeyMD5 = a})
 
 -- | Specifies the AWS KMS key ID to use for object encryption. All GET and PUT requests for an object protected by AWS KMS will fail if not made via SSL or using SigV4. Documentation on configuring any of the officially supported AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version
 poSSEKMSKeyId :: Lens' PutObject (Maybe Text)
-poSSEKMSKeyId = lens _poSSEKMSKeyId (\ s a -> s{_poSSEKMSKeyId = a}) . mapping _Sensitive;
+poSSEKMSKeyId = lens _poSSEKMSKeyId (\ s a -> s{_poSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.
 poGrantFullControl :: Lens' PutObject (Maybe Text)
-poGrantFullControl = lens _poGrantFullControl (\ s a -> s{_poGrantFullControl = a});
+poGrantFullControl = lens _poGrantFullControl (\ s a -> s{_poGrantFullControl = a})
 
 -- | Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field.
 poContentEncoding :: Lens' PutObject (Maybe Text)
-poContentEncoding = lens _poContentEncoding (\ s a -> s{_poContentEncoding = a});
+poContentEncoding = lens _poContentEncoding (\ s a -> s{_poContentEncoding = a})
 
 -- | The tag-set for the object. The tag-set must be encoded as URL Query parameters
 poTagging :: Lens' PutObject (Maybe Text)
-poTagging = lens _poTagging (\ s a -> s{_poTagging = a});
+poTagging = lens _poTagging (\ s a -> s{_poTagging = a})
 
 -- | The base64-encoded 128-bit MD5 digest of the part data.
 poContentMD5 :: Lens' PutObject (Maybe Text)
-poContentMD5 = lens _poContentMD5 (\ s a -> s{_poContentMD5 = a});
+poContentMD5 = lens _poContentMD5 (\ s a -> s{_poContentMD5 = a})
 
 -- | A map of metadata to store with the object in S3.
 poMetadata :: Lens' PutObject (HashMap Text Text)
-poMetadata = lens _poMetadata (\ s a -> s{_poMetadata = a}) . _Map;
+poMetadata = lens _poMetadata (\ s a -> s{_poMetadata = a}) . _Map
 
 -- | Specifies caching behavior along the request/reply chain.
 poCacheControl :: Lens' PutObject (Maybe Text)
-poCacheControl = lens _poCacheControl (\ s a -> s{_poCacheControl = a});
+poCacheControl = lens _poCacheControl (\ s a -> s{_poCacheControl = a})
 
 -- | The language the content is in.
 poContentLanguage :: Lens' PutObject (Maybe Text)
-poContentLanguage = lens _poContentLanguage (\ s a -> s{_poContentLanguage = a});
+poContentLanguage = lens _poContentLanguage (\ s a -> s{_poContentLanguage = a})
 
 -- | The canned ACL to apply to the object.
 poACL :: Lens' PutObject (Maybe ObjectCannedACL)
-poACL = lens _poACL (\ s a -> s{_poACL = a});
+poACL = lens _poACL (\ s a -> s{_poACL = a})
 
 -- | Specifies presentational information for the object.
 poContentDisposition :: Lens' PutObject (Maybe Text)
-poContentDisposition = lens _poContentDisposition (\ s a -> s{_poContentDisposition = a});
+poContentDisposition = lens _poContentDisposition (\ s a -> s{_poContentDisposition = a})
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 poServerSideEncryption :: Lens' PutObject (Maybe ServerSideEncryption)
-poServerSideEncryption = lens _poServerSideEncryption (\ s a -> s{_poServerSideEncryption = a});
+poServerSideEncryption = lens _poServerSideEncryption (\ s a -> s{_poServerSideEncryption = a})
 
 -- | A standard MIME type describing the format of the object data.
 poContentType :: Lens' PutObject (Maybe Text)
-poContentType = lens _poContentType (\ s a -> s{_poContentType = a});
+poContentType = lens _poContentType (\ s a -> s{_poContentType = a})
 
 -- | Name of the bucket to which the PUT operation was initiated.
 poBucket :: Lens' PutObject BucketName
-poBucket = lens _poBucket (\ s a -> s{_poBucket = a});
+poBucket = lens _poBucket (\ s a -> s{_poBucket = a})
 
 -- | Object key for which the PUT operation was initiated.
 poKey :: Lens' PutObject ObjectKey
-poKey = lens _poKey (\ s a -> s{_poKey = a});
+poKey = lens _poKey (\ s a -> s{_poKey = a})
 
 -- | Object data.
 poBody :: Lens' PutObject RqBody
-poBody = lens _poBody (\ s a -> s{_poBody = a});
+poBody = lens _poBody (\ s a -> s{_poBody = a})
 
 instance AWSRequest PutObject where
         type Rs PutObject = PutObjectResponse
@@ -404,52 +404,52 @@
     -> PutObjectResponse
 putObjectResponse pResponseStatus_ =
   PutObjectResponse'
-  { _porsRequestCharged = Nothing
-  , _porsETag = Nothing
-  , _porsVersionId = Nothing
-  , _porsExpiration = Nothing
-  , _porsSSECustomerAlgorithm = Nothing
-  , _porsSSECustomerKeyMD5 = Nothing
-  , _porsSSEKMSKeyId = Nothing
-  , _porsServerSideEncryption = Nothing
-  , _porsResponseStatus = pResponseStatus_
-  }
+    { _porsRequestCharged = Nothing
+    , _porsETag = Nothing
+    , _porsVersionId = Nothing
+    , _porsExpiration = Nothing
+    , _porsSSECustomerAlgorithm = Nothing
+    , _porsSSECustomerKeyMD5 = Nothing
+    , _porsSSEKMSKeyId = Nothing
+    , _porsServerSideEncryption = Nothing
+    , _porsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 porsRequestCharged :: Lens' PutObjectResponse (Maybe RequestCharged)
-porsRequestCharged = lens _porsRequestCharged (\ s a -> s{_porsRequestCharged = a});
+porsRequestCharged = lens _porsRequestCharged (\ s a -> s{_porsRequestCharged = a})
 
 -- | Entity tag for the uploaded object.
 porsETag :: Lens' PutObjectResponse (Maybe ETag)
-porsETag = lens _porsETag (\ s a -> s{_porsETag = a});
+porsETag = lens _porsETag (\ s a -> s{_porsETag = a})
 
 -- | Version of the object.
 porsVersionId :: Lens' PutObjectResponse (Maybe ObjectVersionId)
-porsVersionId = lens _porsVersionId (\ s a -> s{_porsVersionId = a});
+porsVersionId = lens _porsVersionId (\ s a -> s{_porsVersionId = a})
 
 -- | If the object expiration is configured, this will contain the expiration date (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.
 porsExpiration :: Lens' PutObjectResponse (Maybe Text)
-porsExpiration = lens _porsExpiration (\ s a -> s{_porsExpiration = a});
+porsExpiration = lens _porsExpiration (\ s a -> s{_porsExpiration = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 porsSSECustomerAlgorithm :: Lens' PutObjectResponse (Maybe Text)
-porsSSECustomerAlgorithm = lens _porsSSECustomerAlgorithm (\ s a -> s{_porsSSECustomerAlgorithm = a});
+porsSSECustomerAlgorithm = lens _porsSSECustomerAlgorithm (\ s a -> s{_porsSSECustomerAlgorithm = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header to provide round trip message integrity verification of the customer-provided encryption key.
 porsSSECustomerKeyMD5 :: Lens' PutObjectResponse (Maybe Text)
-porsSSECustomerKeyMD5 = lens _porsSSECustomerKeyMD5 (\ s a -> s{_porsSSECustomerKeyMD5 = a});
+porsSSECustomerKeyMD5 = lens _porsSSECustomerKeyMD5 (\ s a -> s{_porsSSECustomerKeyMD5 = a})
 
 -- | If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 porsSSEKMSKeyId :: Lens' PutObjectResponse (Maybe Text)
-porsSSEKMSKeyId = lens _porsSSEKMSKeyId (\ s a -> s{_porsSSEKMSKeyId = a}) . mapping _Sensitive;
+porsSSEKMSKeyId = lens _porsSSEKMSKeyId (\ s a -> s{_porsSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 porsServerSideEncryption :: Lens' PutObjectResponse (Maybe ServerSideEncryption)
-porsServerSideEncryption = lens _porsServerSideEncryption (\ s a -> s{_porsServerSideEncryption = a});
+porsServerSideEncryption = lens _porsServerSideEncryption (\ s a -> s{_porsServerSideEncryption = a})
 
 -- | -- | The response status code.
 porsResponseStatus :: Lens' PutObjectResponse Int
-porsResponseStatus = lens _porsResponseStatus (\ s a -> s{_porsResponseStatus = a});
+porsResponseStatus = lens _porsResponseStatus (\ s a -> s{_porsResponseStatus = a})
 
 instance NFData PutObjectResponse where
diff --git a/gen/Network/AWS/S3/PutObjectACL.hs b/gen/Network/AWS/S3/PutObjectACL.hs
--- a/gen/Network/AWS/S3/PutObjectACL.hs
+++ b/gen/Network/AWS/S3/PutObjectACL.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutObjectACL
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -103,68 +103,68 @@
     -> PutObjectACL
 putObjectACL pBucket_ pKey_ =
   PutObjectACL'
-  { _poaVersionId = Nothing
-  , _poaGrantReadACP = Nothing
-  , _poaRequestPayer = Nothing
-  , _poaGrantWriteACP = Nothing
-  , _poaGrantRead = Nothing
-  , _poaGrantFullControl = Nothing
-  , _poaContentMD5 = Nothing
-  , _poaAccessControlPolicy = Nothing
-  , _poaGrantWrite = Nothing
-  , _poaACL = Nothing
-  , _poaBucket = pBucket_
-  , _poaKey = pKey_
-  }
+    { _poaVersionId = Nothing
+    , _poaGrantReadACP = Nothing
+    , _poaRequestPayer = Nothing
+    , _poaGrantWriteACP = Nothing
+    , _poaGrantRead = Nothing
+    , _poaGrantFullControl = Nothing
+    , _poaContentMD5 = Nothing
+    , _poaAccessControlPolicy = Nothing
+    , _poaGrantWrite = Nothing
+    , _poaACL = Nothing
+    , _poaBucket = pBucket_
+    , _poaKey = pKey_
+    }
 
 
 -- | VersionId used to reference a specific version of the object.
 poaVersionId :: Lens' PutObjectACL (Maybe ObjectVersionId)
-poaVersionId = lens _poaVersionId (\ s a -> s{_poaVersionId = a});
+poaVersionId = lens _poaVersionId (\ s a -> s{_poaVersionId = a})
 
 -- | Allows grantee to read the bucket ACL.
 poaGrantReadACP :: Lens' PutObjectACL (Maybe Text)
-poaGrantReadACP = lens _poaGrantReadACP (\ s a -> s{_poaGrantReadACP = a});
+poaGrantReadACP = lens _poaGrantReadACP (\ s a -> s{_poaGrantReadACP = a})
 
 -- | Undocumented member.
 poaRequestPayer :: Lens' PutObjectACL (Maybe RequestPayer)
-poaRequestPayer = lens _poaRequestPayer (\ s a -> s{_poaRequestPayer = a});
+poaRequestPayer = lens _poaRequestPayer (\ s a -> s{_poaRequestPayer = a})
 
 -- | Allows grantee to write the ACL for the applicable bucket.
 poaGrantWriteACP :: Lens' PutObjectACL (Maybe Text)
-poaGrantWriteACP = lens _poaGrantWriteACP (\ s a -> s{_poaGrantWriteACP = a});
+poaGrantWriteACP = lens _poaGrantWriteACP (\ s a -> s{_poaGrantWriteACP = a})
 
 -- | Allows grantee to list the objects in the bucket.
 poaGrantRead :: Lens' PutObjectACL (Maybe Text)
-poaGrantRead = lens _poaGrantRead (\ s a -> s{_poaGrantRead = a});
+poaGrantRead = lens _poaGrantRead (\ s a -> s{_poaGrantRead = a})
 
 -- | Allows grantee the read, write, read ACP, and write ACP permissions on the bucket.
 poaGrantFullControl :: Lens' PutObjectACL (Maybe Text)
-poaGrantFullControl = lens _poaGrantFullControl (\ s a -> s{_poaGrantFullControl = a});
+poaGrantFullControl = lens _poaGrantFullControl (\ s a -> s{_poaGrantFullControl = a})
 
 -- | Undocumented member.
 poaContentMD5 :: Lens' PutObjectACL (Maybe Text)
-poaContentMD5 = lens _poaContentMD5 (\ s a -> s{_poaContentMD5 = a});
+poaContentMD5 = lens _poaContentMD5 (\ s a -> s{_poaContentMD5 = a})
 
 -- | Undocumented member.
 poaAccessControlPolicy :: Lens' PutObjectACL (Maybe AccessControlPolicy)
-poaAccessControlPolicy = lens _poaAccessControlPolicy (\ s a -> s{_poaAccessControlPolicy = a});
+poaAccessControlPolicy = lens _poaAccessControlPolicy (\ s a -> s{_poaAccessControlPolicy = a})
 
 -- | Allows grantee to create, overwrite, and delete any object in the bucket.
 poaGrantWrite :: Lens' PutObjectACL (Maybe Text)
-poaGrantWrite = lens _poaGrantWrite (\ s a -> s{_poaGrantWrite = a});
+poaGrantWrite = lens _poaGrantWrite (\ s a -> s{_poaGrantWrite = a})
 
 -- | The canned ACL to apply to the object.
 poaACL :: Lens' PutObjectACL (Maybe ObjectCannedACL)
-poaACL = lens _poaACL (\ s a -> s{_poaACL = a});
+poaACL = lens _poaACL (\ s a -> s{_poaACL = a})
 
 -- | Undocumented member.
 poaBucket :: Lens' PutObjectACL BucketName
-poaBucket = lens _poaBucket (\ s a -> s{_poaBucket = a});
+poaBucket = lens _poaBucket (\ s a -> s{_poaBucket = a})
 
 -- | Undocumented member.
 poaKey :: Lens' PutObjectACL ObjectKey
-poaKey = lens _poaKey (\ s a -> s{_poaKey = a});
+poaKey = lens _poaKey (\ s a -> s{_poaKey = a})
 
 instance AWSRequest PutObjectACL where
         type Rs PutObjectACL = PutObjectACLResponse
@@ -226,15 +226,15 @@
     -> PutObjectACLResponse
 putObjectACLResponse pResponseStatus_ =
   PutObjectACLResponse'
-  {_poarsRequestCharged = Nothing, _poarsResponseStatus = pResponseStatus_}
+    {_poarsRequestCharged = Nothing, _poarsResponseStatus = pResponseStatus_}
 
 
 -- | Undocumented member.
 poarsRequestCharged :: Lens' PutObjectACLResponse (Maybe RequestCharged)
-poarsRequestCharged = lens _poarsRequestCharged (\ s a -> s{_poarsRequestCharged = a});
+poarsRequestCharged = lens _poarsRequestCharged (\ s a -> s{_poarsRequestCharged = a})
 
 -- | -- | The response status code.
 poarsResponseStatus :: Lens' PutObjectACLResponse Int
-poarsResponseStatus = lens _poarsResponseStatus (\ s a -> s{_poarsResponseStatus = a});
+poarsResponseStatus = lens _poarsResponseStatus (\ s a -> s{_poarsResponseStatus = a})
 
 instance NFData PutObjectACLResponse where
diff --git a/gen/Network/AWS/S3/PutObjectTagging.hs b/gen/Network/AWS/S3/PutObjectTagging.hs
--- a/gen/Network/AWS/S3/PutObjectTagging.hs
+++ b/gen/Network/AWS/S3/PutObjectTagging.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.PutObjectTagging
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -76,33 +76,33 @@
     -> PutObjectTagging
 putObjectTagging pBucket_ pKey_ pTagging_ =
   PutObjectTagging'
-  { _potVersionId = Nothing
-  , _potContentMD5 = Nothing
-  , _potBucket = pBucket_
-  , _potKey = pKey_
-  , _potTagging = pTagging_
-  }
+    { _potVersionId = Nothing
+    , _potContentMD5 = Nothing
+    , _potBucket = pBucket_
+    , _potKey = pKey_
+    , _potTagging = pTagging_
+    }
 
 
 -- | Undocumented member.
 potVersionId :: Lens' PutObjectTagging (Maybe ObjectVersionId)
-potVersionId = lens _potVersionId (\ s a -> s{_potVersionId = a});
+potVersionId = lens _potVersionId (\ s a -> s{_potVersionId = a})
 
 -- | Undocumented member.
 potContentMD5 :: Lens' PutObjectTagging (Maybe Text)
-potContentMD5 = lens _potContentMD5 (\ s a -> s{_potContentMD5 = a});
+potContentMD5 = lens _potContentMD5 (\ s a -> s{_potContentMD5 = a})
 
 -- | Undocumented member.
 potBucket :: Lens' PutObjectTagging BucketName
-potBucket = lens _potBucket (\ s a -> s{_potBucket = a});
+potBucket = lens _potBucket (\ s a -> s{_potBucket = a})
 
 -- | Undocumented member.
 potKey :: Lens' PutObjectTagging ObjectKey
-potKey = lens _potKey (\ s a -> s{_potKey = a});
+potKey = lens _potKey (\ s a -> s{_potKey = a})
 
 -- | Undocumented member.
 potTagging :: Lens' PutObjectTagging Tagging
-potTagging = lens _potTagging (\ s a -> s{_potTagging = a});
+potTagging = lens _potTagging (\ s a -> s{_potTagging = a})
 
 instance AWSRequest PutObjectTagging where
         type Rs PutObjectTagging = PutObjectTaggingResponse
@@ -155,15 +155,15 @@
     -> PutObjectTaggingResponse
 putObjectTaggingResponse pResponseStatus_ =
   PutObjectTaggingResponse'
-  {_potrsVersionId = Nothing, _potrsResponseStatus = pResponseStatus_}
+    {_potrsVersionId = Nothing, _potrsResponseStatus = pResponseStatus_}
 
 
 -- | Undocumented member.
 potrsVersionId :: Lens' PutObjectTaggingResponse (Maybe ObjectVersionId)
-potrsVersionId = lens _potrsVersionId (\ s a -> s{_potrsVersionId = a});
+potrsVersionId = lens _potrsVersionId (\ s a -> s{_potrsVersionId = a})
 
 -- | -- | The response status code.
 potrsResponseStatus :: Lens' PutObjectTaggingResponse Int
-potrsResponseStatus = lens _potrsResponseStatus (\ s a -> s{_potrsResponseStatus = a});
+potrsResponseStatus = lens _potrsResponseStatus (\ s a -> s{_potrsResponseStatus = a})
 
 instance NFData PutObjectTaggingResponse where
diff --git a/gen/Network/AWS/S3/RestoreObject.hs b/gen/Network/AWS/S3/RestoreObject.hs
--- a/gen/Network/AWS/S3/RestoreObject.hs
+++ b/gen/Network/AWS/S3/RestoreObject.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.RestoreObject
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -36,6 +36,7 @@
     , RestoreObjectResponse
     -- * Response Lenses
     , rorsRequestCharged
+    , rorsRestoreOutputPath
     , rorsResponseStatus
     ) where
 
@@ -53,7 +54,7 @@
   , _roRestoreRequest :: !(Maybe RestoreRequest)
   , _roBucket         :: !BucketName
   , _roKey            :: !ObjectKey
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+  } deriving (Eq, Show, Data, Typeable, Generic)
 
 
 -- | Creates a value of 'RestoreObject' with the minimum fields required to make a request.
@@ -75,33 +76,33 @@
     -> RestoreObject
 restoreObject pBucket_ pKey_ =
   RestoreObject'
-  { _roVersionId = Nothing
-  , _roRequestPayer = Nothing
-  , _roRestoreRequest = Nothing
-  , _roBucket = pBucket_
-  , _roKey = pKey_
-  }
+    { _roVersionId = Nothing
+    , _roRequestPayer = Nothing
+    , _roRestoreRequest = Nothing
+    , _roBucket = pBucket_
+    , _roKey = pKey_
+    }
 
 
 -- | Undocumented member.
 roVersionId :: Lens' RestoreObject (Maybe ObjectVersionId)
-roVersionId = lens _roVersionId (\ s a -> s{_roVersionId = a});
+roVersionId = lens _roVersionId (\ s a -> s{_roVersionId = a})
 
 -- | Undocumented member.
 roRequestPayer :: Lens' RestoreObject (Maybe RequestPayer)
-roRequestPayer = lens _roRequestPayer (\ s a -> s{_roRequestPayer = a});
+roRequestPayer = lens _roRequestPayer (\ s a -> s{_roRequestPayer = a})
 
 -- | Undocumented member.
 roRestoreRequest :: Lens' RestoreObject (Maybe RestoreRequest)
-roRestoreRequest = lens _roRestoreRequest (\ s a -> s{_roRestoreRequest = a});
+roRestoreRequest = lens _roRestoreRequest (\ s a -> s{_roRestoreRequest = a})
 
 -- | Undocumented member.
 roBucket :: Lens' RestoreObject BucketName
-roBucket = lens _roBucket (\ s a -> s{_roBucket = a});
+roBucket = lens _roBucket (\ s a -> s{_roBucket = a})
 
 -- | Undocumented member.
 roKey :: Lens' RestoreObject ObjectKey
-roKey = lens _roKey (\ s a -> s{_roKey = a});
+roKey = lens _roKey (\ s a -> s{_roKey = a})
 
 instance AWSRequest RestoreObject where
         type Rs RestoreObject = RestoreObjectResponse
@@ -111,7 +112,8 @@
               (\ s h x ->
                  RestoreObjectResponse' <$>
                    (h .#? "x-amz-request-charged") <*>
-                     (pure (fromEnum s)))
+                     (h .#? "x-amz-restore-output-path")
+                     <*> (pure (fromEnum s)))
 
 instance Hashable RestoreObject where
 
@@ -138,8 +140,9 @@
 
 -- | /See:/ 'restoreObjectResponse' smart constructor.
 data RestoreObjectResponse = RestoreObjectResponse'
-  { _rorsRequestCharged :: !(Maybe RequestCharged)
-  , _rorsResponseStatus :: !Int
+  { _rorsRequestCharged    :: !(Maybe RequestCharged)
+  , _rorsRestoreOutputPath :: !(Maybe Text)
+  , _rorsResponseStatus    :: !Int
   } deriving (Eq, Read, Show, Data, Typeable, Generic)
 
 
@@ -149,21 +152,30 @@
 --
 -- * 'rorsRequestCharged' - Undocumented member.
 --
+-- * 'rorsRestoreOutputPath' - Indicates the path in the provided S3 output location where Select results will be restored to.
+--
 -- * 'rorsResponseStatus' - -- | The response status code.
 restoreObjectResponse
     :: Int -- ^ 'rorsResponseStatus'
     -> RestoreObjectResponse
 restoreObjectResponse pResponseStatus_ =
   RestoreObjectResponse'
-  {_rorsRequestCharged = Nothing, _rorsResponseStatus = pResponseStatus_}
+    { _rorsRequestCharged = Nothing
+    , _rorsRestoreOutputPath = Nothing
+    , _rorsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 rorsRequestCharged :: Lens' RestoreObjectResponse (Maybe RequestCharged)
-rorsRequestCharged = lens _rorsRequestCharged (\ s a -> s{_rorsRequestCharged = a});
+rorsRequestCharged = lens _rorsRequestCharged (\ s a -> s{_rorsRequestCharged = a})
 
+-- | Indicates the path in the provided S3 output location where Select results will be restored to.
+rorsRestoreOutputPath :: Lens' RestoreObjectResponse (Maybe Text)
+rorsRestoreOutputPath = lens _rorsRestoreOutputPath (\ s a -> s{_rorsRestoreOutputPath = a})
+
 -- | -- | The response status code.
 rorsResponseStatus :: Lens' RestoreObjectResponse Int
-rorsResponseStatus = lens _rorsResponseStatus (\ s a -> s{_rorsResponseStatus = a});
+rorsResponseStatus = lens _rorsResponseStatus (\ s a -> s{_rorsResponseStatus = a})
 
 instance NFData RestoreObjectResponse where
diff --git a/gen/Network/AWS/S3/SelectObjectContent.hs b/gen/Network/AWS/S3/SelectObjectContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/S3/SelectObjectContent.hs
@@ -0,0 +1,232 @@
+{-# 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.S3.SelectObjectContent
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation filters the contents of an Amazon S3 object based on a simple Structured Query Language (SQL) statement. In the request, along with the SQL expression, you must also specify a data serialization format (JSON or CSV) of the object. Amazon S3 uses this to parse object data into records, and returns only records that match the specified SQL expression. You must also specify the data serialization format for the response.
+module Network.AWS.S3.SelectObjectContent
+    (
+    -- * Creating a Request
+      selectObjectContent
+    , SelectObjectContent
+    -- * Request Lenses
+    , socSSECustomerAlgorithm
+    , socSSECustomerKey
+    , socRequestProgress
+    , socSSECustomerKeyMD5
+    , socBucket
+    , socKey
+    , socExpression
+    , socExpressionType
+    , socInputSerialization
+    , socOutputSerialization
+
+    -- * Destructuring the Response
+    , selectObjectContentResponse
+    , SelectObjectContentResponse
+    -- * Response Lenses
+    , socrsPayload
+    , socrsResponseStatus
+    ) where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+import Network.AWS.S3.Types
+import Network.AWS.S3.Types.Product
+
+-- | <https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html S3Select API Documentation>
+--
+-- /See:/ 'selectObjectContent' smart constructor.
+data SelectObjectContent = SelectObjectContent'
+  { _socSSECustomerAlgorithm :: !(Maybe Text)
+  , _socSSECustomerKey       :: !(Maybe (Sensitive Text))
+  , _socRequestProgress      :: !(Maybe RequestProgress)
+  , _socSSECustomerKeyMD5    :: !(Maybe Text)
+  , _socBucket               :: !BucketName
+  , _socKey                  :: !ObjectKey
+  , _socExpression           :: !Text
+  , _socExpressionType       :: !ExpressionType
+  , _socInputSerialization   :: !InputSerialization
+  , _socOutputSerialization  :: !OutputSerialization
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SelectObjectContent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'socSSECustomerAlgorithm' - <https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html Server-Side Encryption (Using Customer-Provided Encryption Keys>
+--
+-- * 'socSSECustomerKey' - <https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html Server-Side Encryption (Using Customer-Provided Encryption Keys>
+--
+-- * 'socRequestProgress' - Specifies if periodic request progress information should be enabled.
+--
+-- * 'socSSECustomerKeyMD5' - <https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html Server-Side Encryption (Using Customer-Provided Encryption Keys>
+--
+-- * 'socBucket' - The S3 Bucket.
+--
+-- * 'socKey' - The Object Key.
+--
+-- * 'socExpression' - The expression that is used to query the object.
+--
+-- * 'socExpressionType' - The type of the provided expression (e.g., SQL).
+--
+-- * 'socInputSerialization' - Describes the format of the data in the object that is being queried.
+--
+-- * 'socOutputSerialization' - Describes the format of the data that you want Amazon S3 to return in response.
+selectObjectContent
+    :: BucketName -- ^ 'socBucket'
+    -> ObjectKey -- ^ 'socKey'
+    -> Text -- ^ 'socExpression'
+    -> ExpressionType -- ^ 'socExpressionType'
+    -> InputSerialization -- ^ 'socInputSerialization'
+    -> OutputSerialization -- ^ 'socOutputSerialization'
+    -> SelectObjectContent
+selectObjectContent pBucket_ pKey_ pExpression_ pExpressionType_ pInputSerialization_ pOutputSerialization_ =
+  SelectObjectContent'
+    { _socSSECustomerAlgorithm = Nothing
+    , _socSSECustomerKey = Nothing
+    , _socRequestProgress = Nothing
+    , _socSSECustomerKeyMD5 = Nothing
+    , _socBucket = pBucket_
+    , _socKey = pKey_
+    , _socExpression = pExpression_
+    , _socExpressionType = pExpressionType_
+    , _socInputSerialization = pInputSerialization_
+    , _socOutputSerialization = pOutputSerialization_
+    }
+
+
+-- | <https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html Server-Side Encryption (Using Customer-Provided Encryption Keys>
+socSSECustomerAlgorithm :: Lens' SelectObjectContent (Maybe Text)
+socSSECustomerAlgorithm = lens _socSSECustomerAlgorithm (\ s a -> s{_socSSECustomerAlgorithm = a})
+
+-- | <https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html Server-Side Encryption (Using Customer-Provided Encryption Keys>
+socSSECustomerKey :: Lens' SelectObjectContent (Maybe Text)
+socSSECustomerKey = lens _socSSECustomerKey (\ s a -> s{_socSSECustomerKey = a}) . mapping _Sensitive
+
+-- | Specifies if periodic request progress information should be enabled.
+socRequestProgress :: Lens' SelectObjectContent (Maybe RequestProgress)
+socRequestProgress = lens _socRequestProgress (\ s a -> s{_socRequestProgress = a})
+
+-- | <https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html Server-Side Encryption (Using Customer-Provided Encryption Keys>
+socSSECustomerKeyMD5 :: Lens' SelectObjectContent (Maybe Text)
+socSSECustomerKeyMD5 = lens _socSSECustomerKeyMD5 (\ s a -> s{_socSSECustomerKeyMD5 = a})
+
+-- | The S3 Bucket.
+socBucket :: Lens' SelectObjectContent BucketName
+socBucket = lens _socBucket (\ s a -> s{_socBucket = a})
+
+-- | The Object Key.
+socKey :: Lens' SelectObjectContent ObjectKey
+socKey = lens _socKey (\ s a -> s{_socKey = a})
+
+-- | The expression that is used to query the object.
+socExpression :: Lens' SelectObjectContent Text
+socExpression = lens _socExpression (\ s a -> s{_socExpression = a})
+
+-- | The type of the provided expression (e.g., SQL).
+socExpressionType :: Lens' SelectObjectContent ExpressionType
+socExpressionType = lens _socExpressionType (\ s a -> s{_socExpressionType = a})
+
+-- | Describes the format of the data in the object that is being queried.
+socInputSerialization :: Lens' SelectObjectContent InputSerialization
+socInputSerialization = lens _socInputSerialization (\ s a -> s{_socInputSerialization = a})
+
+-- | Describes the format of the data that you want Amazon S3 to return in response.
+socOutputSerialization :: Lens' SelectObjectContent OutputSerialization
+socOutputSerialization = lens _socOutputSerialization (\ s a -> s{_socOutputSerialization = a})
+
+instance AWSRequest SelectObjectContent where
+        type Rs SelectObjectContent =
+             SelectObjectContentResponse
+        request = postXML s3
+        response
+          = receiveXML
+              (\ s h x ->
+                 SelectObjectContentResponse' <$>
+                   (parseXML x) <*> (pure (fromEnum s)))
+
+instance Hashable SelectObjectContent where
+
+instance NFData SelectObjectContent where
+
+instance ToElement SelectObjectContent where
+        toElement
+          = mkElement
+              "{http://s3.amazonaws.com/doc/2006-03-01/}SelectObjectContentRequest"
+
+instance ToHeaders SelectObjectContent where
+        toHeaders SelectObjectContent'{..}
+          = mconcat
+              ["x-amz-server-side-encryption-customer-algorithm" =#
+                 _socSSECustomerAlgorithm,
+               "x-amz-server-side-encryption-customer-key" =#
+                 _socSSECustomerKey,
+               "x-amz-server-side-encryption-customer-key-MD5" =#
+                 _socSSECustomerKeyMD5]
+
+instance ToPath SelectObjectContent where
+        toPath SelectObjectContent'{..}
+          = mconcat ["/", toBS _socBucket, "/", toBS _socKey]
+
+instance ToQuery SelectObjectContent where
+        toQuery = const (mconcat ["select&select-type=2"])
+
+instance ToXML SelectObjectContent where
+        toXML SelectObjectContent'{..}
+          = mconcat
+              ["RequestProgress" @= _socRequestProgress,
+               "Expression" @= _socExpression,
+               "ExpressionType" @= _socExpressionType,
+               "InputSerialization" @= _socInputSerialization,
+               "OutputSerialization" @= _socOutputSerialization]
+
+-- | /See:/ 'selectObjectContentResponse' smart constructor.
+data SelectObjectContentResponse = SelectObjectContentResponse'
+  { _socrsPayload        :: !(Maybe SelectObjectContentEventStream)
+  , _socrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SelectObjectContentResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'socrsPayload' - Undocumented member.
+--
+-- * 'socrsResponseStatus' - -- | The response status code.
+selectObjectContentResponse
+    :: Int -- ^ 'socrsResponseStatus'
+    -> SelectObjectContentResponse
+selectObjectContentResponse pResponseStatus_ =
+  SelectObjectContentResponse'
+    {_socrsPayload = Nothing, _socrsResponseStatus = pResponseStatus_}
+
+
+-- | Undocumented member.
+socrsPayload :: Lens' SelectObjectContentResponse (Maybe SelectObjectContentEventStream)
+socrsPayload = lens _socrsPayload (\ s a -> s{_socrsPayload = a})
+
+-- | -- | The response status code.
+socrsResponseStatus :: Lens' SelectObjectContentResponse Int
+socrsResponseStatus = lens _socrsResponseStatus (\ s a -> s{_socrsResponseStatus = a})
+
+instance NFData SelectObjectContentResponse where
diff --git a/gen/Network/AWS/S3/Types.hs b/gen/Network/AWS/S3/Types.hs
--- a/gen/Network/AWS/S3/Types.hs
+++ b/gen/Network/AWS/S3/Types.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.Types
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -42,6 +42,9 @@
     -- * BucketVersioningStatus
     , BucketVersioningStatus (..)
 
+    -- * CompressionType
+    , CompressionType (..)
+
     -- * EncodingType
     , EncodingType (..)
 
@@ -51,6 +54,12 @@
     -- * ExpirationStatus
     , ExpirationStatus (..)
 
+    -- * ExpressionType
+    , ExpressionType (..)
+
+    -- * FileHeaderInfo
+    , FileHeaderInfo (..)
+
     -- * FilterRuleName
     , FilterRuleName (..)
 
@@ -66,6 +75,9 @@
     -- * InventoryOptionalField
     , InventoryOptionalField (..)
 
+    -- * JSONType
+    , JSONType (..)
+
     -- * MFADelete
     , MFADelete (..)
 
@@ -96,6 +108,9 @@
     -- * Protocol
     , Protocol (..)
 
+    -- * QuoteFields
+    , QuoteFields (..)
+
     -- * ReplicationRuleStatus
     , ReplicationRuleStatus (..)
 
@@ -108,6 +123,9 @@
     -- * RequestPayer
     , RequestPayer (..)
 
+    -- * RestoreRequestType
+    , RestoreRequestType (..)
+
     -- * ServerSideEncryption
     , ServerSideEncryption (..)
 
@@ -216,6 +234,25 @@
     , crAllowedMethods
     , crAllowedOrigins
 
+    -- * CSVInput
+    , CSVInput
+    , csvInput
+    , ciQuoteCharacter
+    , ciRecordDelimiter
+    , ciFileHeaderInfo
+    , ciQuoteEscapeCharacter
+    , ciComments
+    , ciFieldDelimiter
+
+    -- * CSVOutput
+    , CSVOutput
+    , csvOutput
+    , coQuoteCharacter
+    , coQuoteFields
+    , coRecordDelimiter
+    , coQuoteEscapeCharacter
+    , coFieldDelimiter
+
     -- * CommonPrefix
     , CommonPrefix
     , commonPrefix
@@ -238,6 +275,10 @@
     , cKeyPrefixEquals
     , cHTTPErrorCodeReturnedEquals
 
+    -- * ContinuationEvent
+    , ContinuationEvent
+    , continuationEvent
+
     -- * CopyObjectResult
     , CopyObjectResult
     , copyObjectResult
@@ -287,11 +328,22 @@
     , dEncryptionConfiguration
     , dBucket
 
+    -- * Encryption
+    , Encryption
+    , encryption
+    , eKMSKeyId
+    , eKMSContext
+    , eEncryptionType
+
     -- * EncryptionConfiguration
     , EncryptionConfiguration
     , encryptionConfiguration
     , ecReplicaKMSKeyId
 
+    -- * EndEvent
+    , EndEvent
+    , endEvent
+
     -- * ErrorDocument
     , ErrorDocument
     , errorDocument
@@ -334,6 +386,13 @@
     , iDisplayName
     , iId
 
+    -- * InputSerialization
+    , InputSerialization
+    , inputSerialization
+    , isJSON
+    , isCSV
+    , isCompressionType
+
     -- * InventoryConfiguration
     , InventoryConfiguration
     , inventoryConfiguration
@@ -375,6 +434,16 @@
     , inventorySchedule
     , isFrequency
 
+    -- * JSONInput
+    , JSONInput
+    , jsonInput
+    , jiType
+
+    -- * JSONOutput
+    , JSONOutput
+    , jsonOutput
+    , joRecordDelimiter
+
     -- * LambdaFunctionConfiguration
     , LambdaFunctionConfiguration
     , lambdaFunctionConfiguration
@@ -419,10 +488,16 @@
     -- * LoggingEnabled
     , LoggingEnabled
     , loggingEnabled
-    , leTargetBucket
     , leTargetGrants
+    , leTargetBucket
     , leTargetPrefix
 
+    -- * MetadataEntry
+    , MetadataEntry
+    , metadataEntry
+    , meValue
+    , meName
+
     -- * MetricsAndOperator
     , MetricsAndOperator
     , metricsAndOperator
@@ -503,6 +578,17 @@
     , ovStorageClass
     , ovLastModified
 
+    -- * OutputLocation
+    , OutputLocation
+    , outputLocation
+    , olS3
+
+    -- * OutputSerialization
+    , OutputSerialization
+    , outputSerialization
+    , osJSON
+    , osCSV
+
     -- * Owner
     , Owner
     , owner
@@ -517,6 +603,18 @@
     , pPartNumber
     , pLastModified
 
+    -- * Progress
+    , Progress
+    , progress
+    , pBytesReturned
+    , pBytesScanned
+    , pBytesProcessed
+
+    -- * ProgressEvent
+    , ProgressEvent
+    , progressEvent
+    , peDetails
+
     -- * QueueConfiguration
     , QueueConfiguration
     , queueConfiguration
@@ -525,6 +623,11 @@
     , qcQueueARN
     , qcEvents
 
+    -- * RecordsEvent
+    , RecordsEvent
+    , recordsEvent
+    , rePayload
+
     -- * Redirect
     , Redirect
     , redirect
@@ -560,11 +663,21 @@
     , requestPaymentConfiguration
     , rpcPayer
 
+    -- * RequestProgress
+    , RequestProgress
+    , requestProgress
+    , rpEnabled
+
     -- * RestoreRequest
     , RestoreRequest
     , restoreRequest
-    , rrGlacierJobParameters
     , rrDays
+    , rrSelectParameters
+    , rrOutputLocation
+    , rrTier
+    , rrGlacierJobParameters
+    , rrType
+    , rrDescription
 
     -- * RoutingRule
     , RoutingRule
@@ -577,6 +690,18 @@
     , s3KeyFilter
     , skfFilterRules
 
+    -- * S3Location
+    , S3Location
+    , s3Location
+    , slCannedACL
+    , slAccessControlList
+    , slUserMetadata
+    , slEncryption
+    , slStorageClass
+    , slTagging
+    , slBucketName
+    , slPrefix
+
     -- * S3ServiceError
     , S3ServiceError
     , s3ServiceError
@@ -594,6 +719,23 @@
     , SSES3
     , sSES3
 
+    -- * SelectObjectContentEventStream
+    , SelectObjectContentEventStream
+    , selectObjectContentEventStream
+    , socesProgress
+    , socesRecords
+    , socesCont
+    , socesStats
+    , socesEnd
+
+    -- * SelectParameters
+    , SelectParameters
+    , selectParameters
+    , spInputSerialization
+    , spExpressionType
+    , spExpression
+    , spOutputSerialization
+
     -- * ServerSideEncryptionByDefault
     , ServerSideEncryptionByDefault
     , serverSideEncryptionByDefault
@@ -620,6 +762,18 @@
     , sseKMSEncryptedObjects
     , skeoStatus
 
+    -- * Stats
+    , Stats
+    , stats
+    , sBytesReturned
+    , sBytesScanned
+    , sBytesProcessed
+
+    -- * StatsEvent
+    , StatsEvent
+    , statsEvent
+    , seDetails
+
     -- * StorageClassAnalysis
     , StorageClassAnalysis
     , storageClassAnalysis
@@ -689,24 +843,24 @@
 s3 :: Service
 s3 =
   Service
-  { _svcAbbrev = "S3"
-  , _svcSigner = v4
-  , _svcPrefix = "s3"
-  , _svcVersion = "2006-03-01"
-  , _svcEndpoint = defaultEndpoint s3
-  , _svcTimeout = Just 70
-  , _svcCheck = statusSuccess
-  , _svcError = parseXMLError "S3"
-  , _svcRetry = retry
-  }
+    { _svcAbbrev = "S3"
+    , _svcSigner = v4
+    , _svcPrefix = "s3"
+    , _svcVersion = "2006-03-01"
+    , _svcEndpoint = defaultEndpoint s3
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseXMLError "S3"
+    , _svcRetry = retry
+    }
   where
     retry =
       Exponential
-      { _retryBase = 5.0e-2
-      , _retryGrowth = 2
-      , _retryAttempts = 5
-      , _retryCheck = check
-      }
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
     check e
       | has (hasCode "ThrottledException" . hasStatus 400) e =
         Just "throttled_exception"
@@ -715,6 +869,8 @@
         Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
       | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
+        Just "request_throttled_exception"
       | has (hasCode "BadDigest" . hasStatus 400) e = Just "contentmd5"
       | has (hasStatus 502) e = Just "bad_gateway"
       | has (hasStatus 503) e = Just "service_unavailable"
diff --git a/gen/Network/AWS/S3/Types/Product.hs b/gen/Network/AWS/S3/Types/Product.hs
--- a/gen/Network/AWS/S3/Types/Product.hs
+++ b/gen/Network/AWS/S3/Types/Product.hs
@@ -9,4029 +9,4973 @@
 
 -- |
 -- Module      : Network.AWS.S3.Types.Product
--- Copyright   : (c) 2013-2017 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.S3.Types.Product where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.S3.Internal
-import Network.AWS.S3.Types.Sum
-
--- | Specifies the days since the initiation of an Incomplete Multipart Upload that Lifecycle will wait before permanently removing all parts of the upload.
---
--- /See:/ 'abortIncompleteMultipartUpload' smart constructor.
-newtype AbortIncompleteMultipartUpload = AbortIncompleteMultipartUpload'
-  { _aimuDaysAfterInitiation :: Maybe Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AbortIncompleteMultipartUpload' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aimuDaysAfterInitiation' - Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
-abortIncompleteMultipartUpload
-    :: AbortIncompleteMultipartUpload
-abortIncompleteMultipartUpload =
-  AbortIncompleteMultipartUpload' {_aimuDaysAfterInitiation = Nothing}
-
-
--- | Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
-aimuDaysAfterInitiation :: Lens' AbortIncompleteMultipartUpload (Maybe Int)
-aimuDaysAfterInitiation = lens _aimuDaysAfterInitiation (\ s a -> s{_aimuDaysAfterInitiation = a});
-
-instance FromXML AbortIncompleteMultipartUpload where
-        parseXML x
-          = AbortIncompleteMultipartUpload' <$>
-              (x .@? "DaysAfterInitiation")
-
-instance Hashable AbortIncompleteMultipartUpload
-         where
-
-instance NFData AbortIncompleteMultipartUpload where
-
-instance ToXML AbortIncompleteMultipartUpload where
-        toXML AbortIncompleteMultipartUpload'{..}
-          = mconcat
-              ["DaysAfterInitiation" @= _aimuDaysAfterInitiation]
-
--- | /See:/ 'accelerateConfiguration' smart constructor.
-newtype AccelerateConfiguration = AccelerateConfiguration'
-  { _acStatus :: Maybe BucketAccelerateStatus
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AccelerateConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acStatus' - The accelerate configuration of the bucket.
-accelerateConfiguration
-    :: AccelerateConfiguration
-accelerateConfiguration = AccelerateConfiguration' {_acStatus = Nothing}
-
-
--- | The accelerate configuration of the bucket.
-acStatus :: Lens' AccelerateConfiguration (Maybe BucketAccelerateStatus)
-acStatus = lens _acStatus (\ s a -> s{_acStatus = a});
-
-instance Hashable AccelerateConfiguration where
-
-instance NFData AccelerateConfiguration where
-
-instance ToXML AccelerateConfiguration where
-        toXML AccelerateConfiguration'{..}
-          = mconcat ["Status" @= _acStatus]
-
--- | /See:/ 'accessControlPolicy' smart constructor.
-data AccessControlPolicy = AccessControlPolicy'
-  { _acpGrants :: !(Maybe [Grant])
-  , _acpOwner  :: !(Maybe Owner)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AccessControlPolicy' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acpGrants' - A list of grants.
---
--- * 'acpOwner' - Undocumented member.
-accessControlPolicy
-    :: AccessControlPolicy
-accessControlPolicy =
-  AccessControlPolicy' {_acpGrants = Nothing, _acpOwner = Nothing}
-
-
--- | A list of grants.
-acpGrants :: Lens' AccessControlPolicy [Grant]
-acpGrants = lens _acpGrants (\ s a -> s{_acpGrants = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-acpOwner :: Lens' AccessControlPolicy (Maybe Owner)
-acpOwner = lens _acpOwner (\ s a -> s{_acpOwner = a});
-
-instance Hashable AccessControlPolicy where
-
-instance NFData AccessControlPolicy where
-
-instance ToXML AccessControlPolicy where
-        toXML AccessControlPolicy'{..}
-          = mconcat
-              ["AccessControlList" @=
-                 toXML (toXMLList "Grant" <$> _acpGrants),
-               "Owner" @= _acpOwner]
-
--- | Container for information regarding the access control for replicas.
---
--- /See:/ 'accessControlTranslation' smart constructor.
-newtype AccessControlTranslation = AccessControlTranslation'
-  { _actOwner :: OwnerOverride
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AccessControlTranslation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'actOwner' - The override value for the owner of the replica object.
-accessControlTranslation
-    :: OwnerOverride -- ^ 'actOwner'
-    -> AccessControlTranslation
-accessControlTranslation pOwner_ =
-  AccessControlTranslation' {_actOwner = pOwner_}
-
-
--- | The override value for the owner of the replica object.
-actOwner :: Lens' AccessControlTranslation OwnerOverride
-actOwner = lens _actOwner (\ s a -> s{_actOwner = a});
-
-instance FromXML AccessControlTranslation where
-        parseXML x
-          = AccessControlTranslation' <$> (x .@ "Owner")
-
-instance Hashable AccessControlTranslation where
-
-instance NFData AccessControlTranslation where
-
-instance ToXML AccessControlTranslation where
-        toXML AccessControlTranslation'{..}
-          = mconcat ["Owner" @= _actOwner]
-
--- | /See:/ 'analyticsAndOperator' smart constructor.
-data AnalyticsAndOperator = AnalyticsAndOperator'
-  { _aaoPrefix :: !(Maybe Text)
-  , _aaoTags   :: !(Maybe [Tag])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AnalyticsAndOperator' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaoPrefix' - The prefix to use when evaluating an AND predicate.
---
--- * 'aaoTags' - The list of tags to use when evaluating an AND predicate.
-analyticsAndOperator
-    :: AnalyticsAndOperator
-analyticsAndOperator =
-  AnalyticsAndOperator' {_aaoPrefix = Nothing, _aaoTags = Nothing}
-
-
--- | The prefix to use when evaluating an AND predicate.
-aaoPrefix :: Lens' AnalyticsAndOperator (Maybe Text)
-aaoPrefix = lens _aaoPrefix (\ s a -> s{_aaoPrefix = a});
-
--- | The list of tags to use when evaluating an AND predicate.
-aaoTags :: Lens' AnalyticsAndOperator [Tag]
-aaoTags = lens _aaoTags (\ s a -> s{_aaoTags = a}) . _Default . _Coerce;
-
-instance FromXML AnalyticsAndOperator where
-        parseXML x
-          = AnalyticsAndOperator' <$>
-              (x .@? "Prefix") <*>
-                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
-
-instance Hashable AnalyticsAndOperator where
-
-instance NFData AnalyticsAndOperator where
-
-instance ToXML AnalyticsAndOperator where
-        toXML AnalyticsAndOperator'{..}
-          = mconcat
-              ["Prefix" @= _aaoPrefix,
-               "Tag" @= toXML (toXMLList "Tag" <$> _aaoTags)]
-
--- | /See:/ 'analyticsConfiguration' smart constructor.
-data AnalyticsConfiguration = AnalyticsConfiguration'
-  { _acFilter               :: !(Maybe AnalyticsFilter)
-  , _acId                   :: !Text
-  , _acStorageClassAnalysis :: !StorageClassAnalysis
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AnalyticsConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acFilter' - The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
---
--- * 'acId' - The identifier used to represent an analytics configuration.
---
--- * 'acStorageClassAnalysis' - If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
-analyticsConfiguration
-    :: Text -- ^ 'acId'
-    -> StorageClassAnalysis -- ^ 'acStorageClassAnalysis'
-    -> AnalyticsConfiguration
-analyticsConfiguration pId_ pStorageClassAnalysis_ =
-  AnalyticsConfiguration'
-  { _acFilter = Nothing
-  , _acId = pId_
-  , _acStorageClassAnalysis = pStorageClassAnalysis_
-  }
-
-
--- | The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
-acFilter :: Lens' AnalyticsConfiguration (Maybe AnalyticsFilter)
-acFilter = lens _acFilter (\ s a -> s{_acFilter = a});
-
--- | The identifier used to represent an analytics configuration.
-acId :: Lens' AnalyticsConfiguration Text
-acId = lens _acId (\ s a -> s{_acId = a});
-
--- | If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
-acStorageClassAnalysis :: Lens' AnalyticsConfiguration StorageClassAnalysis
-acStorageClassAnalysis = lens _acStorageClassAnalysis (\ s a -> s{_acStorageClassAnalysis = a});
-
-instance FromXML AnalyticsConfiguration where
-        parseXML x
-          = AnalyticsConfiguration' <$>
-              (x .@? "Filter") <*> (x .@ "Id") <*>
-                (x .@ "StorageClassAnalysis")
-
-instance Hashable AnalyticsConfiguration where
-
-instance NFData AnalyticsConfiguration where
-
-instance ToXML AnalyticsConfiguration where
-        toXML AnalyticsConfiguration'{..}
-          = mconcat
-              ["Filter" @= _acFilter, "Id" @= _acId,
-               "StorageClassAnalysis" @= _acStorageClassAnalysis]
-
--- | /See:/ 'analyticsExportDestination' smart constructor.
-newtype AnalyticsExportDestination = AnalyticsExportDestination'
-  { _aedS3BucketDestination :: AnalyticsS3BucketDestination
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AnalyticsExportDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aedS3BucketDestination' - A destination signifying output to an S3 bucket.
-analyticsExportDestination
-    :: AnalyticsS3BucketDestination -- ^ 'aedS3BucketDestination'
-    -> AnalyticsExportDestination
-analyticsExportDestination pS3BucketDestination_ =
-  AnalyticsExportDestination' {_aedS3BucketDestination = pS3BucketDestination_}
-
-
--- | A destination signifying output to an S3 bucket.
-aedS3BucketDestination :: Lens' AnalyticsExportDestination AnalyticsS3BucketDestination
-aedS3BucketDestination = lens _aedS3BucketDestination (\ s a -> s{_aedS3BucketDestination = a});
-
-instance FromXML AnalyticsExportDestination where
-        parseXML x
-          = AnalyticsExportDestination' <$>
-              (x .@ "S3BucketDestination")
-
-instance Hashable AnalyticsExportDestination where
-
-instance NFData AnalyticsExportDestination where
-
-instance ToXML AnalyticsExportDestination where
-        toXML AnalyticsExportDestination'{..}
-          = mconcat
-              ["S3BucketDestination" @= _aedS3BucketDestination]
-
--- | /See:/ 'analyticsFilter' smart constructor.
-data AnalyticsFilter = AnalyticsFilter'
-  { _afTag    :: !(Maybe Tag)
-  , _afPrefix :: !(Maybe Text)
-  , _afAnd    :: !(Maybe AnalyticsAndOperator)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AnalyticsFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'afTag' - The tag to use when evaluating an analytics filter.
---
--- * 'afPrefix' - The prefix to use when evaluating an analytics filter.
---
--- * 'afAnd' - A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
-analyticsFilter
-    :: AnalyticsFilter
-analyticsFilter =
-  AnalyticsFilter' {_afTag = Nothing, _afPrefix = Nothing, _afAnd = Nothing}
-
-
--- | The tag to use when evaluating an analytics filter.
-afTag :: Lens' AnalyticsFilter (Maybe Tag)
-afTag = lens _afTag (\ s a -> s{_afTag = a});
-
--- | The prefix to use when evaluating an analytics filter.
-afPrefix :: Lens' AnalyticsFilter (Maybe Text)
-afPrefix = lens _afPrefix (\ s a -> s{_afPrefix = a});
-
--- | A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
-afAnd :: Lens' AnalyticsFilter (Maybe AnalyticsAndOperator)
-afAnd = lens _afAnd (\ s a -> s{_afAnd = a});
-
-instance FromXML AnalyticsFilter where
-        parseXML x
-          = AnalyticsFilter' <$>
-              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
-
-instance Hashable AnalyticsFilter where
-
-instance NFData AnalyticsFilter where
-
-instance ToXML AnalyticsFilter where
-        toXML AnalyticsFilter'{..}
-          = mconcat
-              ["Tag" @= _afTag, "Prefix" @= _afPrefix,
-               "And" @= _afAnd]
-
--- | /See:/ 'analyticsS3BucketDestination' smart constructor.
-data AnalyticsS3BucketDestination = AnalyticsS3BucketDestination'
-  { _asbdBucketAccountId :: !(Maybe Text)
-  , _asbdPrefix          :: !(Maybe Text)
-  , _asbdFormat          :: !AnalyticsS3ExportFileFormat
-  , _asbdBucket          :: !BucketName
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AnalyticsS3BucketDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asbdBucketAccountId' - The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
---
--- * 'asbdPrefix' - The prefix to use when exporting data. The exported data begins with this prefix.
---
--- * 'asbdFormat' - The file format used when exporting data to Amazon S3.
---
--- * 'asbdBucket' - The Amazon resource name (ARN) of the bucket to which data is exported.
-analyticsS3BucketDestination
-    :: AnalyticsS3ExportFileFormat -- ^ 'asbdFormat'
-    -> BucketName -- ^ 'asbdBucket'
-    -> AnalyticsS3BucketDestination
-analyticsS3BucketDestination pFormat_ pBucket_ =
-  AnalyticsS3BucketDestination'
-  { _asbdBucketAccountId = Nothing
-  , _asbdPrefix = Nothing
-  , _asbdFormat = pFormat_
-  , _asbdBucket = pBucket_
-  }
-
-
--- | The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
-asbdBucketAccountId :: Lens' AnalyticsS3BucketDestination (Maybe Text)
-asbdBucketAccountId = lens _asbdBucketAccountId (\ s a -> s{_asbdBucketAccountId = a});
-
--- | The prefix to use when exporting data. The exported data begins with this prefix.
-asbdPrefix :: Lens' AnalyticsS3BucketDestination (Maybe Text)
-asbdPrefix = lens _asbdPrefix (\ s a -> s{_asbdPrefix = a});
-
--- | The file format used when exporting data to Amazon S3.
-asbdFormat :: Lens' AnalyticsS3BucketDestination AnalyticsS3ExportFileFormat
-asbdFormat = lens _asbdFormat (\ s a -> s{_asbdFormat = a});
-
--- | The Amazon resource name (ARN) of the bucket to which data is exported.
-asbdBucket :: Lens' AnalyticsS3BucketDestination BucketName
-asbdBucket = lens _asbdBucket (\ s a -> s{_asbdBucket = a});
-
-instance FromXML AnalyticsS3BucketDestination where
-        parseXML x
-          = AnalyticsS3BucketDestination' <$>
-              (x .@? "BucketAccountId") <*> (x .@? "Prefix") <*>
-                (x .@ "Format")
-                <*> (x .@ "Bucket")
-
-instance Hashable AnalyticsS3BucketDestination where
-
-instance NFData AnalyticsS3BucketDestination where
-
-instance ToXML AnalyticsS3BucketDestination where
-        toXML AnalyticsS3BucketDestination'{..}
-          = mconcat
-              ["BucketAccountId" @= _asbdBucketAccountId,
-               "Prefix" @= _asbdPrefix, "Format" @= _asbdFormat,
-               "Bucket" @= _asbdBucket]
-
--- | /See:/ 'bucket' smart constructor.
-data Bucket = Bucket'
-  { _bCreationDate :: !RFC822
-  , _bName         :: !BucketName
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Bucket' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bCreationDate' - Date the bucket was created.
---
--- * 'bName' - The name of the bucket.
-bucket
-    :: UTCTime -- ^ 'bCreationDate'
-    -> BucketName -- ^ 'bName'
-    -> Bucket
-bucket pCreationDate_ pName_ =
-  Bucket' {_bCreationDate = _Time # pCreationDate_, _bName = pName_}
-
-
--- | Date the bucket was created.
-bCreationDate :: Lens' Bucket UTCTime
-bCreationDate = lens _bCreationDate (\ s a -> s{_bCreationDate = a}) . _Time;
-
--- | The name of the bucket.
-bName :: Lens' Bucket BucketName
-bName = lens _bName (\ s a -> s{_bName = a});
-
-instance FromXML Bucket where
-        parseXML x
-          = Bucket' <$> (x .@ "CreationDate") <*> (x .@ "Name")
-
-instance Hashable Bucket where
-
-instance NFData Bucket where
-
--- | /See:/ 'bucketLifecycleConfiguration' smart constructor.
-newtype BucketLifecycleConfiguration = BucketLifecycleConfiguration'
-  { _blcRules :: [LifecycleRule]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BucketLifecycleConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'blcRules' - Undocumented member.
-bucketLifecycleConfiguration
-    :: BucketLifecycleConfiguration
-bucketLifecycleConfiguration =
-  BucketLifecycleConfiguration' {_blcRules = mempty}
-
-
--- | Undocumented member.
-blcRules :: Lens' BucketLifecycleConfiguration [LifecycleRule]
-blcRules = lens _blcRules (\ s a -> s{_blcRules = a}) . _Coerce;
-
-instance Hashable BucketLifecycleConfiguration where
-
-instance NFData BucketLifecycleConfiguration where
-
-instance ToXML BucketLifecycleConfiguration where
-        toXML BucketLifecycleConfiguration'{..}
-          = mconcat [toXMLList "Rule" _blcRules]
-
--- | /See:/ 'bucketLoggingStatus' smart constructor.
-newtype BucketLoggingStatus = BucketLoggingStatus'
-  { _blsLoggingEnabled :: Maybe LoggingEnabled
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BucketLoggingStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'blsLoggingEnabled' - Undocumented member.
-bucketLoggingStatus
-    :: BucketLoggingStatus
-bucketLoggingStatus = BucketLoggingStatus' {_blsLoggingEnabled = Nothing}
-
-
--- | Undocumented member.
-blsLoggingEnabled :: Lens' BucketLoggingStatus (Maybe LoggingEnabled)
-blsLoggingEnabled = lens _blsLoggingEnabled (\ s a -> s{_blsLoggingEnabled = a});
-
-instance Hashable BucketLoggingStatus where
-
-instance NFData BucketLoggingStatus where
-
-instance ToXML BucketLoggingStatus where
-        toXML BucketLoggingStatus'{..}
-          = mconcat ["LoggingEnabled" @= _blsLoggingEnabled]
-
--- | /See:/ 'corsConfiguration' smart constructor.
-newtype CORSConfiguration = CORSConfiguration'
-  { _ccCORSRules :: [CORSRule]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CORSConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccCORSRules' - Undocumented member.
-corsConfiguration
-    :: CORSConfiguration
-corsConfiguration = CORSConfiguration' {_ccCORSRules = mempty}
-
-
--- | Undocumented member.
-ccCORSRules :: Lens' CORSConfiguration [CORSRule]
-ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Coerce;
-
-instance Hashable CORSConfiguration where
-
-instance NFData CORSConfiguration where
-
-instance ToXML CORSConfiguration where
-        toXML CORSConfiguration'{..}
-          = mconcat [toXMLList "CORSRule" _ccCORSRules]
-
--- | /See:/ 'corsRule' smart constructor.
-data CORSRule = CORSRule'
-  { _crMaxAgeSeconds  :: !(Maybe Int)
-  , _crAllowedHeaders :: !(Maybe [Text])
-  , _crExposeHeaders  :: !(Maybe [Text])
-  , _crAllowedMethods :: ![Text]
-  , _crAllowedOrigins :: ![Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CORSRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crMaxAgeSeconds' - The time in seconds that your browser is to cache the preflight response for the specified resource.
---
--- * 'crAllowedHeaders' - Specifies which headers are allowed in a pre-flight OPTIONS request.
---
--- * 'crExposeHeaders' - One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
---
--- * 'crAllowedMethods' - Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
---
--- * 'crAllowedOrigins' - One or more origins you want customers to be able to access the bucket from.
-corsRule
-    :: CORSRule
-corsRule =
-  CORSRule'
-  { _crMaxAgeSeconds = Nothing
-  , _crAllowedHeaders = Nothing
-  , _crExposeHeaders = Nothing
-  , _crAllowedMethods = mempty
-  , _crAllowedOrigins = mempty
-  }
-
-
--- | The time in seconds that your browser is to cache the preflight response for the specified resource.
-crMaxAgeSeconds :: Lens' CORSRule (Maybe Int)
-crMaxAgeSeconds = lens _crMaxAgeSeconds (\ s a -> s{_crMaxAgeSeconds = a});
-
--- | Specifies which headers are allowed in a pre-flight OPTIONS request.
-crAllowedHeaders :: Lens' CORSRule [Text]
-crAllowedHeaders = lens _crAllowedHeaders (\ s a -> s{_crAllowedHeaders = a}) . _Default . _Coerce;
-
--- | One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
-crExposeHeaders :: Lens' CORSRule [Text]
-crExposeHeaders = lens _crExposeHeaders (\ s a -> s{_crExposeHeaders = a}) . _Default . _Coerce;
-
--- | Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
-crAllowedMethods :: Lens' CORSRule [Text]
-crAllowedMethods = lens _crAllowedMethods (\ s a -> s{_crAllowedMethods = a}) . _Coerce;
-
--- | One or more origins you want customers to be able to access the bucket from.
-crAllowedOrigins :: Lens' CORSRule [Text]
-crAllowedOrigins = lens _crAllowedOrigins (\ s a -> s{_crAllowedOrigins = a}) . _Coerce;
-
-instance FromXML CORSRule where
-        parseXML x
-          = CORSRule' <$>
-              (x .@? "MaxAgeSeconds") <*>
-                (may (parseXMLList "AllowedHeader") x)
-                <*> (may (parseXMLList "ExposeHeader") x)
-                <*> (parseXMLList "AllowedMethod" x)
-                <*> (parseXMLList "AllowedOrigin" x)
-
-instance Hashable CORSRule where
-
-instance NFData CORSRule where
-
-instance ToXML CORSRule where
-        toXML CORSRule'{..}
-          = mconcat
-              ["MaxAgeSeconds" @= _crMaxAgeSeconds,
-               toXML
-                 (toXMLList "AllowedHeader" <$> _crAllowedHeaders),
-               toXML
-                 (toXMLList "ExposeHeader" <$> _crExposeHeaders),
-               toXMLList "AllowedMethod" _crAllowedMethods,
-               toXMLList "AllowedOrigin" _crAllowedOrigins]
-
--- | /See:/ 'commonPrefix' smart constructor.
-newtype CommonPrefix = CommonPrefix'
-  { _cpPrefix :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CommonPrefix' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpPrefix' - Undocumented member.
-commonPrefix
-    :: CommonPrefix
-commonPrefix = CommonPrefix' {_cpPrefix = Nothing}
-
-
--- | Undocumented member.
-cpPrefix :: Lens' CommonPrefix (Maybe Text)
-cpPrefix = lens _cpPrefix (\ s a -> s{_cpPrefix = a});
-
-instance FromXML CommonPrefix where
-        parseXML x = CommonPrefix' <$> (x .@? "Prefix")
-
-instance Hashable CommonPrefix where
-
-instance NFData CommonPrefix where
-
--- | /See:/ 'completedMultipartUpload' smart constructor.
-newtype CompletedMultipartUpload = CompletedMultipartUpload'
-  { _cmuParts :: Maybe (List1 CompletedPart)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CompletedMultipartUpload' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cmuParts' - Undocumented member.
-completedMultipartUpload
-    :: CompletedMultipartUpload
-completedMultipartUpload = CompletedMultipartUpload' {_cmuParts = Nothing}
-
-
--- | Undocumented member.
-cmuParts :: Lens' CompletedMultipartUpload (Maybe (NonEmpty CompletedPart))
-cmuParts = lens _cmuParts (\ s a -> s{_cmuParts = a}) . mapping _List1;
-
-instance Hashable CompletedMultipartUpload where
-
-instance NFData CompletedMultipartUpload where
-
-instance ToXML CompletedMultipartUpload where
-        toXML CompletedMultipartUpload'{..}
-          = mconcat [toXML (toXMLList "Part" <$> _cmuParts)]
-
--- | /See:/ 'completedPart' smart constructor.
-data CompletedPart = CompletedPart'
-  { _cpPartNumber :: !Int
-  , _cpETag       :: !ETag
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CompletedPart' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpPartNumber' - Part number that identifies the part. This is a positive integer between 1 and 10,000.
---
--- * 'cpETag' - Entity tag returned when the part was uploaded.
-completedPart
-    :: Int -- ^ 'cpPartNumber'
-    -> ETag -- ^ 'cpETag'
-    -> CompletedPart
-completedPart pPartNumber_ pETag_ =
-  CompletedPart' {_cpPartNumber = pPartNumber_, _cpETag = pETag_}
-
-
--- | Part number that identifies the part. This is a positive integer between 1 and 10,000.
-cpPartNumber :: Lens' CompletedPart Int
-cpPartNumber = lens _cpPartNumber (\ s a -> s{_cpPartNumber = a});
-
--- | Entity tag returned when the part was uploaded.
-cpETag :: Lens' CompletedPart ETag
-cpETag = lens _cpETag (\ s a -> s{_cpETag = a});
-
-instance Hashable CompletedPart where
-
-instance NFData CompletedPart where
-
-instance ToXML CompletedPart where
-        toXML CompletedPart'{..}
-          = mconcat
-              ["PartNumber" @= _cpPartNumber, "ETag" @= _cpETag]
-
--- | /See:/ 'condition' smart constructor.
-data Condition = Condition'
-  { _cKeyPrefixEquals             :: !(Maybe Text)
-  , _cHTTPErrorCodeReturnedEquals :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Condition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cKeyPrefixEquals' - The object key name prefix when the redirect is applied. For example, to redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. To redirect request for all pages with the prefix docs/, the key prefix will be /docs, which identifies all objects in the docs/ folder. Required when the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals is not specified. If both conditions are specified, both must be true for the redirect to be applied.
---
--- * 'cHTTPErrorCodeReturnedEquals' - The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied. Required when parent element Condition is specified and sibling KeyPrefixEquals is not specified. If both are specified, then both must be true for the redirect to be applied.
-condition
-    :: Condition
-condition =
-  Condition'
-  {_cKeyPrefixEquals = Nothing, _cHTTPErrorCodeReturnedEquals = Nothing}
-
-
--- | The object key name prefix when the redirect is applied. For example, to redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. To redirect request for all pages with the prefix docs/, the key prefix will be /docs, which identifies all objects in the docs/ folder. Required when the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals is not specified. If both conditions are specified, both must be true for the redirect to be applied.
-cKeyPrefixEquals :: Lens' Condition (Maybe Text)
-cKeyPrefixEquals = lens _cKeyPrefixEquals (\ s a -> s{_cKeyPrefixEquals = a});
-
--- | The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied. Required when parent element Condition is specified and sibling KeyPrefixEquals is not specified. If both are specified, then both must be true for the redirect to be applied.
-cHTTPErrorCodeReturnedEquals :: Lens' Condition (Maybe Text)
-cHTTPErrorCodeReturnedEquals = lens _cHTTPErrorCodeReturnedEquals (\ s a -> s{_cHTTPErrorCodeReturnedEquals = a});
-
-instance FromXML Condition where
-        parseXML x
-          = Condition' <$>
-              (x .@? "KeyPrefixEquals") <*>
-                (x .@? "HttpErrorCodeReturnedEquals")
-
-instance Hashable Condition where
-
-instance NFData Condition where
-
-instance ToXML Condition where
-        toXML Condition'{..}
-          = mconcat
-              ["KeyPrefixEquals" @= _cKeyPrefixEquals,
-               "HttpErrorCodeReturnedEquals" @=
-                 _cHTTPErrorCodeReturnedEquals]
-
--- | /See:/ 'copyObjectResult' smart constructor.
-data CopyObjectResult = CopyObjectResult'
-  { _corETag         :: !(Maybe ETag)
-  , _corLastModified :: !(Maybe RFC822)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CopyObjectResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'corETag' - Undocumented member.
---
--- * 'corLastModified' - Undocumented member.
-copyObjectResult
-    :: CopyObjectResult
-copyObjectResult =
-  CopyObjectResult' {_corETag = Nothing, _corLastModified = Nothing}
-
-
--- | Undocumented member.
-corETag :: Lens' CopyObjectResult (Maybe ETag)
-corETag = lens _corETag (\ s a -> s{_corETag = a});
-
--- | Undocumented member.
-corLastModified :: Lens' CopyObjectResult (Maybe UTCTime)
-corLastModified = lens _corLastModified (\ s a -> s{_corLastModified = a}) . mapping _Time;
-
-instance FromXML CopyObjectResult where
-        parseXML x
-          = CopyObjectResult' <$>
-              (x .@? "ETag") <*> (x .@? "LastModified")
-
-instance Hashable CopyObjectResult where
-
-instance NFData CopyObjectResult where
-
--- | /See:/ 'copyPartResult' smart constructor.
-data CopyPartResult = CopyPartResult'
-  { _cprETag         :: !(Maybe ETag)
-  , _cprLastModified :: !(Maybe RFC822)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CopyPartResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cprETag' - Entity tag of the object.
---
--- * 'cprLastModified' - Date and time at which the object was uploaded.
-copyPartResult
-    :: CopyPartResult
-copyPartResult =
-  CopyPartResult' {_cprETag = Nothing, _cprLastModified = Nothing}
-
-
--- | Entity tag of the object.
-cprETag :: Lens' CopyPartResult (Maybe ETag)
-cprETag = lens _cprETag (\ s a -> s{_cprETag = a});
-
--- | Date and time at which the object was uploaded.
-cprLastModified :: Lens' CopyPartResult (Maybe UTCTime)
-cprLastModified = lens _cprLastModified (\ s a -> s{_cprLastModified = a}) . mapping _Time;
-
-instance FromXML CopyPartResult where
-        parseXML x
-          = CopyPartResult' <$>
-              (x .@? "ETag") <*> (x .@? "LastModified")
-
-instance Hashable CopyPartResult where
-
-instance NFData CopyPartResult where
-
--- | /See:/ 'createBucketConfiguration' smart constructor.
-newtype CreateBucketConfiguration = CreateBucketConfiguration'
-  { _cbcLocationConstraint :: Maybe LocationConstraint
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateBucketConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cbcLocationConstraint' - Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
-createBucketConfiguration
-    :: CreateBucketConfiguration
-createBucketConfiguration =
-  CreateBucketConfiguration' {_cbcLocationConstraint = Nothing}
-
-
--- | Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
-cbcLocationConstraint :: Lens' CreateBucketConfiguration (Maybe LocationConstraint)
-cbcLocationConstraint = lens _cbcLocationConstraint (\ s a -> s{_cbcLocationConstraint = a});
-
-instance Hashable CreateBucketConfiguration where
-
-instance NFData CreateBucketConfiguration where
-
-instance ToXML CreateBucketConfiguration where
-        toXML CreateBucketConfiguration'{..}
-          = mconcat
-              ["LocationConstraint" @= _cbcLocationConstraint]
-
--- | /See:/ 'delete'' smart constructor.
-data Delete = Delete'
-  { _dQuiet   :: !(Maybe Bool)
-  , _dObjects :: ![ObjectIdentifier]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Delete' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dQuiet' - Element to enable quiet mode for the request. When you add this element, you must set its value to true.
---
--- * 'dObjects' - Undocumented member.
-delete'
-    :: Delete
-delete' = Delete' {_dQuiet = Nothing, _dObjects = mempty}
-
-
--- | Element to enable quiet mode for the request. When you add this element, you must set its value to true.
-dQuiet :: Lens' Delete (Maybe Bool)
-dQuiet = lens _dQuiet (\ s a -> s{_dQuiet = a});
-
--- | Undocumented member.
-dObjects :: Lens' Delete [ObjectIdentifier]
-dObjects = lens _dObjects (\ s a -> s{_dObjects = a}) . _Coerce;
-
-instance Hashable Delete where
-
-instance NFData Delete where
-
-instance ToXML Delete where
-        toXML Delete'{..}
-          = mconcat
-              ["Quiet" @= _dQuiet, toXMLList "Object" _dObjects]
-
--- | /See:/ 'deleteMarkerEntry' smart constructor.
-data DeleteMarkerEntry = DeleteMarkerEntry'
-  { _dmeVersionId    :: !(Maybe ObjectVersionId)
-  , _dmeIsLatest     :: !(Maybe Bool)
-  , _dmeOwner        :: !(Maybe Owner)
-  , _dmeKey          :: !(Maybe ObjectKey)
-  , _dmeLastModified :: !(Maybe RFC822)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteMarkerEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmeVersionId' - Version ID of an object.
---
--- * 'dmeIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
---
--- * 'dmeOwner' - Undocumented member.
---
--- * 'dmeKey' - The object key.
---
--- * 'dmeLastModified' - Date and time the object was last modified.
-deleteMarkerEntry
-    :: DeleteMarkerEntry
-deleteMarkerEntry =
-  DeleteMarkerEntry'
-  { _dmeVersionId = Nothing
-  , _dmeIsLatest = Nothing
-  , _dmeOwner = Nothing
-  , _dmeKey = Nothing
-  , _dmeLastModified = Nothing
-  }
-
-
--- | Version ID of an object.
-dmeVersionId :: Lens' DeleteMarkerEntry (Maybe ObjectVersionId)
-dmeVersionId = lens _dmeVersionId (\ s a -> s{_dmeVersionId = a});
-
--- | Specifies whether the object is (true) or is not (false) the latest version of an object.
-dmeIsLatest :: Lens' DeleteMarkerEntry (Maybe Bool)
-dmeIsLatest = lens _dmeIsLatest (\ s a -> s{_dmeIsLatest = a});
-
--- | Undocumented member.
-dmeOwner :: Lens' DeleteMarkerEntry (Maybe Owner)
-dmeOwner = lens _dmeOwner (\ s a -> s{_dmeOwner = a});
-
--- | The object key.
-dmeKey :: Lens' DeleteMarkerEntry (Maybe ObjectKey)
-dmeKey = lens _dmeKey (\ s a -> s{_dmeKey = a});
-
--- | Date and time the object was last modified.
-dmeLastModified :: Lens' DeleteMarkerEntry (Maybe UTCTime)
-dmeLastModified = lens _dmeLastModified (\ s a -> s{_dmeLastModified = a}) . mapping _Time;
-
-instance FromXML DeleteMarkerEntry where
-        parseXML x
-          = DeleteMarkerEntry' <$>
-              (x .@? "VersionId") <*> (x .@? "IsLatest") <*>
-                (x .@? "Owner")
-                <*> (x .@? "Key")
-                <*> (x .@? "LastModified")
-
-instance Hashable DeleteMarkerEntry where
-
-instance NFData DeleteMarkerEntry where
-
--- | /See:/ 'deletedObject' smart constructor.
-data DeletedObject = DeletedObject'
-  { _dVersionId             :: !(Maybe ObjectVersionId)
-  , _dDeleteMarker          :: !(Maybe Bool)
-  , _dDeleteMarkerVersionId :: !(Maybe Text)
-  , _dKey                   :: !(Maybe ObjectKey)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeletedObject' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dVersionId' - Undocumented member.
---
--- * 'dDeleteMarker' - Undocumented member.
---
--- * 'dDeleteMarkerVersionId' - Undocumented member.
---
--- * 'dKey' - Undocumented member.
-deletedObject
-    :: DeletedObject
-deletedObject =
-  DeletedObject'
-  { _dVersionId = Nothing
-  , _dDeleteMarker = Nothing
-  , _dDeleteMarkerVersionId = Nothing
-  , _dKey = Nothing
-  }
-
-
--- | Undocumented member.
-dVersionId :: Lens' DeletedObject (Maybe ObjectVersionId)
-dVersionId = lens _dVersionId (\ s a -> s{_dVersionId = a});
-
--- | Undocumented member.
-dDeleteMarker :: Lens' DeletedObject (Maybe Bool)
-dDeleteMarker = lens _dDeleteMarker (\ s a -> s{_dDeleteMarker = a});
-
--- | Undocumented member.
-dDeleteMarkerVersionId :: Lens' DeletedObject (Maybe Text)
-dDeleteMarkerVersionId = lens _dDeleteMarkerVersionId (\ s a -> s{_dDeleteMarkerVersionId = a});
-
--- | Undocumented member.
-dKey :: Lens' DeletedObject (Maybe ObjectKey)
-dKey = lens _dKey (\ s a -> s{_dKey = a});
-
-instance FromXML DeletedObject where
-        parseXML x
-          = DeletedObject' <$>
-              (x .@? "VersionId") <*> (x .@? "DeleteMarker") <*>
-                (x .@? "DeleteMarkerVersionId")
-                <*> (x .@? "Key")
-
-instance Hashable DeletedObject where
-
-instance NFData DeletedObject where
-
--- | Container for replication destination information.
---
--- /See:/ 'destination' smart constructor.
-data Destination = Destination'
-  { _dAccessControlTranslation :: !(Maybe AccessControlTranslation)
-  , _dAccount                  :: !(Maybe Text)
-  , _dStorageClass             :: !(Maybe StorageClass)
-  , _dEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
-  , _dBucket                   :: !BucketName
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Destination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dAccessControlTranslation' - Container for information regarding the access control for replicas.
---
--- * 'dAccount' - Account ID of the destination bucket. Currently this is only being verified if Access Control Translation is enabled
---
--- * 'dStorageClass' - The class of storage used to store the object.
---
--- * 'dEncryptionConfiguration' - Container for information regarding encryption based configuration for replicas.
---
--- * 'dBucket' - Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
-destination
-    :: BucketName -- ^ 'dBucket'
-    -> Destination
-destination pBucket_ =
-  Destination'
-  { _dAccessControlTranslation = Nothing
-  , _dAccount = Nothing
-  , _dStorageClass = Nothing
-  , _dEncryptionConfiguration = Nothing
-  , _dBucket = pBucket_
-  }
-
-
--- | Container for information regarding the access control for replicas.
-dAccessControlTranslation :: Lens' Destination (Maybe AccessControlTranslation)
-dAccessControlTranslation = lens _dAccessControlTranslation (\ s a -> s{_dAccessControlTranslation = a});
-
--- | Account ID of the destination bucket. Currently this is only being verified if Access Control Translation is enabled
-dAccount :: Lens' Destination (Maybe Text)
-dAccount = lens _dAccount (\ s a -> s{_dAccount = a});
-
--- | The class of storage used to store the object.
-dStorageClass :: Lens' Destination (Maybe StorageClass)
-dStorageClass = lens _dStorageClass (\ s a -> s{_dStorageClass = a});
-
--- | Container for information regarding encryption based configuration for replicas.
-dEncryptionConfiguration :: Lens' Destination (Maybe EncryptionConfiguration)
-dEncryptionConfiguration = lens _dEncryptionConfiguration (\ s a -> s{_dEncryptionConfiguration = a});
-
--- | Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
-dBucket :: Lens' Destination BucketName
-dBucket = lens _dBucket (\ s a -> s{_dBucket = a});
-
-instance FromXML Destination where
-        parseXML x
-          = Destination' <$>
-              (x .@? "AccessControlTranslation") <*>
-                (x .@? "Account")
-                <*> (x .@? "StorageClass")
-                <*> (x .@? "EncryptionConfiguration")
-                <*> (x .@ "Bucket")
-
-instance Hashable Destination where
-
-instance NFData Destination where
-
-instance ToXML Destination where
-        toXML Destination'{..}
-          = mconcat
-              ["AccessControlTranslation" @=
-                 _dAccessControlTranslation,
-               "Account" @= _dAccount,
-               "StorageClass" @= _dStorageClass,
-               "EncryptionConfiguration" @=
-                 _dEncryptionConfiguration,
-               "Bucket" @= _dBucket]
-
--- | Container for information regarding encryption based configuration for replicas.
---
--- /See:/ 'encryptionConfiguration' smart constructor.
-newtype EncryptionConfiguration = EncryptionConfiguration'
-  { _ecReplicaKMSKeyId :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'EncryptionConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ecReplicaKMSKeyId' - The id of the KMS key used to encrypt the replica object.
-encryptionConfiguration
-    :: EncryptionConfiguration
-encryptionConfiguration =
-  EncryptionConfiguration' {_ecReplicaKMSKeyId = Nothing}
-
-
--- | The id of the KMS key used to encrypt the replica object.
-ecReplicaKMSKeyId :: Lens' EncryptionConfiguration (Maybe Text)
-ecReplicaKMSKeyId = lens _ecReplicaKMSKeyId (\ s a -> s{_ecReplicaKMSKeyId = a});
-
-instance FromXML EncryptionConfiguration where
-        parseXML x
-          = EncryptionConfiguration' <$>
-              (x .@? "ReplicaKmsKeyID")
-
-instance Hashable EncryptionConfiguration where
-
-instance NFData EncryptionConfiguration where
-
-instance ToXML EncryptionConfiguration where
-        toXML EncryptionConfiguration'{..}
-          = mconcat ["ReplicaKmsKeyID" @= _ecReplicaKMSKeyId]
-
--- | /See:/ 'errorDocument' smart constructor.
-newtype ErrorDocument = ErrorDocument'
-  { _edKey :: ObjectKey
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ErrorDocument' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'edKey' - The object key name to use when a 4XX class error occurs.
-errorDocument
-    :: ObjectKey -- ^ 'edKey'
-    -> ErrorDocument
-errorDocument pKey_ = ErrorDocument' {_edKey = pKey_}
-
-
--- | The object key name to use when a 4XX class error occurs.
-edKey :: Lens' ErrorDocument ObjectKey
-edKey = lens _edKey (\ s a -> s{_edKey = a});
-
-instance FromXML ErrorDocument where
-        parseXML x = ErrorDocument' <$> (x .@ "Key")
-
-instance Hashable ErrorDocument where
-
-instance NFData ErrorDocument where
-
-instance ToXML ErrorDocument where
-        toXML ErrorDocument'{..} = mconcat ["Key" @= _edKey]
-
--- | Container for key value pair that defines the criteria for the filter rule.
---
--- /See:/ 'filterRule' smart constructor.
-data FilterRule = FilterRule'
-  { _frValue :: !(Maybe Text)
-  , _frName  :: !(Maybe FilterRuleName)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FilterRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'frValue' - Undocumented member.
---
--- * 'frName' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
-filterRule
-    :: FilterRule
-filterRule = FilterRule' {_frValue = Nothing, _frName = Nothing}
-
-
--- | Undocumented member.
-frValue :: Lens' FilterRule (Maybe Text)
-frValue = lens _frValue (\ s a -> s{_frValue = a});
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
-frName :: Lens' FilterRule (Maybe FilterRuleName)
-frName = lens _frName (\ s a -> s{_frName = a});
-
-instance FromXML FilterRule where
-        parseXML x
-          = FilterRule' <$> (x .@? "Value") <*> (x .@? "Name")
-
-instance Hashable FilterRule where
-
-instance NFData FilterRule where
-
-instance ToXML FilterRule where
-        toXML FilterRule'{..}
-          = mconcat ["Value" @= _frValue, "Name" @= _frName]
-
--- | /See:/ 'glacierJobParameters' smart constructor.
-newtype GlacierJobParameters = GlacierJobParameters'
-  { _gjpTier :: Tier
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GlacierJobParameters' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gjpTier' - Glacier retrieval tier at which the restore will be processed.
-glacierJobParameters
-    :: Tier -- ^ 'gjpTier'
-    -> GlacierJobParameters
-glacierJobParameters pTier_ = GlacierJobParameters' {_gjpTier = pTier_}
-
-
--- | Glacier retrieval tier at which the restore will be processed.
-gjpTier :: Lens' GlacierJobParameters Tier
-gjpTier = lens _gjpTier (\ s a -> s{_gjpTier = a});
-
-instance Hashable GlacierJobParameters where
-
-instance NFData GlacierJobParameters where
-
-instance ToXML GlacierJobParameters where
-        toXML GlacierJobParameters'{..}
-          = mconcat ["Tier" @= _gjpTier]
-
--- | /See:/ 'grant' smart constructor.
-data Grant = Grant'
-  { _gPermission :: !(Maybe Permission)
-  , _gGrantee    :: !(Maybe Grantee)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Grant' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gPermission' - Specifies the permission given to the grantee.
---
--- * 'gGrantee' - Undocumented member.
-grant
-    :: Grant
-grant = Grant' {_gPermission = Nothing, _gGrantee = Nothing}
-
-
--- | Specifies the permission given to the grantee.
-gPermission :: Lens' Grant (Maybe Permission)
-gPermission = lens _gPermission (\ s a -> s{_gPermission = a});
-
--- | Undocumented member.
-gGrantee :: Lens' Grant (Maybe Grantee)
-gGrantee = lens _gGrantee (\ s a -> s{_gGrantee = a});
-
-instance FromXML Grant where
-        parseXML x
-          = Grant' <$>
-              (x .@? "Permission") <*> (x .@? "Grantee")
-
-instance Hashable Grant where
-
-instance NFData Grant where
-
-instance ToXML Grant where
-        toXML Grant'{..}
-          = mconcat
-              ["Permission" @= _gPermission,
-               "Grantee" @= _gGrantee]
-
--- | /See:/ 'grantee' smart constructor.
-data Grantee = Grantee'
-  { _gURI          :: !(Maybe Text)
-  , _gEmailAddress :: !(Maybe Text)
-  , _gDisplayName  :: !(Maybe Text)
-  , _gId           :: !(Maybe Text)
-  , _gType         :: !Type
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Grantee' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gURI' - URI of the grantee group.
---
--- * 'gEmailAddress' - Email address of the grantee.
---
--- * 'gDisplayName' - Screen name of the grantee.
---
--- * 'gId' - The canonical user ID of the grantee.
---
--- * 'gType' - Type of grantee
-grantee
-    :: Type -- ^ 'gType'
-    -> Grantee
-grantee pType_ =
-  Grantee'
-  { _gURI = Nothing
-  , _gEmailAddress = Nothing
-  , _gDisplayName = Nothing
-  , _gId = Nothing
-  , _gType = pType_
-  }
-
-
--- | URI of the grantee group.
-gURI :: Lens' Grantee (Maybe Text)
-gURI = lens _gURI (\ s a -> s{_gURI = a});
-
--- | Email address of the grantee.
-gEmailAddress :: Lens' Grantee (Maybe Text)
-gEmailAddress = lens _gEmailAddress (\ s a -> s{_gEmailAddress = a});
-
--- | Screen name of the grantee.
-gDisplayName :: Lens' Grantee (Maybe Text)
-gDisplayName = lens _gDisplayName (\ s a -> s{_gDisplayName = a});
-
--- | The canonical user ID of the grantee.
-gId :: Lens' Grantee (Maybe Text)
-gId = lens _gId (\ s a -> s{_gId = a});
-
--- | Type of grantee
-gType :: Lens' Grantee Type
-gType = lens _gType (\ s a -> s{_gType = a});
-
-instance FromXML Grantee where
-        parseXML x
-          = Grantee' <$>
-              (x .@? "URI") <*> (x .@? "EmailAddress") <*>
-                (x .@? "DisplayName")
-                <*> (x .@? "ID")
-                <*> (x .@ "xsi:type")
-
-instance Hashable Grantee where
-
-instance NFData Grantee where
-
-instance ToXML Grantee where
-        toXML Grantee'{..}
-          = mconcat
-              ["URI" @= _gURI, "EmailAddress" @= _gEmailAddress,
-               "DisplayName" @= _gDisplayName, "ID" @= _gId,
-               "xsi:type" @@= _gType]
-
--- | /See:/ 'indexDocument' smart constructor.
-newtype IndexDocument = IndexDocument'
-  { _idSuffix :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'IndexDocument' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'idSuffix' - A suffix that is appended to a request that is for a directory on the website endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ the data that is returned will be for the object with the key name images/index.html) The suffix must not be empty and must not include a slash character.
-indexDocument
-    :: Text -- ^ 'idSuffix'
-    -> IndexDocument
-indexDocument pSuffix_ = IndexDocument' {_idSuffix = pSuffix_}
-
-
--- | A suffix that is appended to a request that is for a directory on the website endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ the data that is returned will be for the object with the key name images/index.html) The suffix must not be empty and must not include a slash character.
-idSuffix :: Lens' IndexDocument Text
-idSuffix = lens _idSuffix (\ s a -> s{_idSuffix = a});
-
-instance FromXML IndexDocument where
-        parseXML x = IndexDocument' <$> (x .@ "Suffix")
-
-instance Hashable IndexDocument where
-
-instance NFData IndexDocument where
-
-instance ToXML IndexDocument where
-        toXML IndexDocument'{..}
-          = mconcat ["Suffix" @= _idSuffix]
-
--- | /See:/ 'initiator' smart constructor.
-data Initiator = Initiator'
-  { _iDisplayName :: !(Maybe Text)
-  , _iId          :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Initiator' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iDisplayName' - Name of the Principal.
---
--- * 'iId' - If the principal is an AWS account, it provides the Canonical User ID. If the principal is an IAM User, it provides a user ARN value.
-initiator
-    :: Initiator
-initiator = Initiator' {_iDisplayName = Nothing, _iId = Nothing}
-
-
--- | Name of the Principal.
-iDisplayName :: Lens' Initiator (Maybe Text)
-iDisplayName = lens _iDisplayName (\ s a -> s{_iDisplayName = a});
-
--- | If the principal is an AWS account, it provides the Canonical User ID. If the principal is an IAM User, it provides a user ARN value.
-iId :: Lens' Initiator (Maybe Text)
-iId = lens _iId (\ s a -> s{_iId = a});
-
-instance FromXML Initiator where
-        parseXML x
-          = Initiator' <$>
-              (x .@? "DisplayName") <*> (x .@? "ID")
-
-instance Hashable Initiator where
-
-instance NFData Initiator where
-
--- | /See:/ 'inventoryConfiguration' smart constructor.
-data InventoryConfiguration = InventoryConfiguration'
-  { _icOptionalFields         :: !(Maybe [InventoryOptionalField])
-  , _icFilter                 :: !(Maybe InventoryFilter)
-  , _icDestination            :: !InventoryDestination
-  , _icIsEnabled              :: !Bool
-  , _icId                     :: !Text
-  , _icIncludedObjectVersions :: !InventoryIncludedObjectVersions
-  , _icSchedule               :: !InventorySchedule
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'InventoryConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'icOptionalFields' - Contains the optional fields that are included in the inventory results.
---
--- * 'icFilter' - Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
---
--- * 'icDestination' - Contains information about where to publish the inventory results.
---
--- * 'icIsEnabled' - Specifies whether the inventory is enabled or disabled.
---
--- * 'icId' - The ID used to identify the inventory configuration.
---
--- * 'icIncludedObjectVersions' - Specifies which object version(s) to included in the inventory results.
---
--- * 'icSchedule' - Specifies the schedule for generating inventory results.
-inventoryConfiguration
-    :: InventoryDestination -- ^ 'icDestination'
-    -> Bool -- ^ 'icIsEnabled'
-    -> Text -- ^ 'icId'
-    -> InventoryIncludedObjectVersions -- ^ 'icIncludedObjectVersions'
-    -> InventorySchedule -- ^ 'icSchedule'
-    -> InventoryConfiguration
-inventoryConfiguration pDestination_ pIsEnabled_ pId_ pIncludedObjectVersions_ pSchedule_ =
-  InventoryConfiguration'
-  { _icOptionalFields = Nothing
-  , _icFilter = Nothing
-  , _icDestination = pDestination_
-  , _icIsEnabled = pIsEnabled_
-  , _icId = pId_
-  , _icIncludedObjectVersions = pIncludedObjectVersions_
-  , _icSchedule = pSchedule_
-  }
-
-
--- | Contains the optional fields that are included in the inventory results.
-icOptionalFields :: Lens' InventoryConfiguration [InventoryOptionalField]
-icOptionalFields = lens _icOptionalFields (\ s a -> s{_icOptionalFields = a}) . _Default . _Coerce;
-
--- | Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
-icFilter :: Lens' InventoryConfiguration (Maybe InventoryFilter)
-icFilter = lens _icFilter (\ s a -> s{_icFilter = a});
-
--- | Contains information about where to publish the inventory results.
-icDestination :: Lens' InventoryConfiguration InventoryDestination
-icDestination = lens _icDestination (\ s a -> s{_icDestination = a});
-
--- | Specifies whether the inventory is enabled or disabled.
-icIsEnabled :: Lens' InventoryConfiguration Bool
-icIsEnabled = lens _icIsEnabled (\ s a -> s{_icIsEnabled = a});
-
--- | The ID used to identify the inventory configuration.
-icId :: Lens' InventoryConfiguration Text
-icId = lens _icId (\ s a -> s{_icId = a});
-
--- | Specifies which object version(s) to included in the inventory results.
-icIncludedObjectVersions :: Lens' InventoryConfiguration InventoryIncludedObjectVersions
-icIncludedObjectVersions = lens _icIncludedObjectVersions (\ s a -> s{_icIncludedObjectVersions = a});
-
--- | Specifies the schedule for generating inventory results.
-icSchedule :: Lens' InventoryConfiguration InventorySchedule
-icSchedule = lens _icSchedule (\ s a -> s{_icSchedule = a});
-
-instance FromXML InventoryConfiguration where
-        parseXML x
-          = InventoryConfiguration' <$>
-              (x .@? "OptionalFields" .!@ mempty >>=
-                 may (parseXMLList "Field"))
-                <*> (x .@? "Filter")
-                <*> (x .@ "Destination")
-                <*> (x .@ "IsEnabled")
-                <*> (x .@ "Id")
-                <*> (x .@ "IncludedObjectVersions")
-                <*> (x .@ "Schedule")
-
-instance Hashable InventoryConfiguration where
-
-instance NFData InventoryConfiguration where
-
-instance ToXML InventoryConfiguration where
-        toXML InventoryConfiguration'{..}
-          = mconcat
-              ["OptionalFields" @=
-                 toXML (toXMLList "Field" <$> _icOptionalFields),
-               "Filter" @= _icFilter,
-               "Destination" @= _icDestination,
-               "IsEnabled" @= _icIsEnabled, "Id" @= _icId,
-               "IncludedObjectVersions" @=
-                 _icIncludedObjectVersions,
-               "Schedule" @= _icSchedule]
-
--- | /See:/ 'inventoryDestination' smart constructor.
-newtype InventoryDestination = InventoryDestination'
-  { _idS3BucketDestination :: InventoryS3BucketDestination
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'InventoryDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'idS3BucketDestination' - Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
-inventoryDestination
-    :: InventoryS3BucketDestination -- ^ 'idS3BucketDestination'
-    -> InventoryDestination
-inventoryDestination pS3BucketDestination_ =
-  InventoryDestination' {_idS3BucketDestination = pS3BucketDestination_}
-
-
--- | Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
-idS3BucketDestination :: Lens' InventoryDestination InventoryS3BucketDestination
-idS3BucketDestination = lens _idS3BucketDestination (\ s a -> s{_idS3BucketDestination = a});
-
-instance FromXML InventoryDestination where
-        parseXML x
-          = InventoryDestination' <$>
-              (x .@ "S3BucketDestination")
-
-instance Hashable InventoryDestination where
-
-instance NFData InventoryDestination where
-
-instance ToXML InventoryDestination where
-        toXML InventoryDestination'{..}
-          = mconcat
-              ["S3BucketDestination" @= _idS3BucketDestination]
-
--- | Contains the type of server-side encryption used to encrypt the inventory results.
---
--- /See:/ 'inventoryEncryption' smart constructor.
-data InventoryEncryption = InventoryEncryption'
-  { _ieSSES3  :: !(Maybe SSES3)
-  , _ieSSEKMS :: !(Maybe SSEKMS)
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'InventoryEncryption' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ieSSES3' - Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
---
--- * 'ieSSEKMS' - Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
-inventoryEncryption
-    :: InventoryEncryption
-inventoryEncryption =
-  InventoryEncryption' {_ieSSES3 = Nothing, _ieSSEKMS = Nothing}
-
-
--- | Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
-ieSSES3 :: Lens' InventoryEncryption (Maybe SSES3)
-ieSSES3 = lens _ieSSES3 (\ s a -> s{_ieSSES3 = a});
-
--- | Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
-ieSSEKMS :: Lens' InventoryEncryption (Maybe SSEKMS)
-ieSSEKMS = lens _ieSSEKMS (\ s a -> s{_ieSSEKMS = a});
-
-instance FromXML InventoryEncryption where
-        parseXML x
-          = InventoryEncryption' <$>
-              (x .@? "SSE-S3") <*> (x .@? "SSE-KMS")
-
-instance Hashable InventoryEncryption where
-
-instance NFData InventoryEncryption where
-
-instance ToXML InventoryEncryption where
-        toXML InventoryEncryption'{..}
-          = mconcat
-              ["SSE-S3" @= _ieSSES3, "SSE-KMS" @= _ieSSEKMS]
-
--- | /See:/ 'inventoryFilter' smart constructor.
-newtype InventoryFilter = InventoryFilter'
-  { _ifPrefix :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'InventoryFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ifPrefix' - The prefix that an object must have to be included in the inventory results.
-inventoryFilter
-    :: Text -- ^ 'ifPrefix'
-    -> InventoryFilter
-inventoryFilter pPrefix_ = InventoryFilter' {_ifPrefix = pPrefix_}
-
-
--- | The prefix that an object must have to be included in the inventory results.
-ifPrefix :: Lens' InventoryFilter Text
-ifPrefix = lens _ifPrefix (\ s a -> s{_ifPrefix = a});
-
-instance FromXML InventoryFilter where
-        parseXML x = InventoryFilter' <$> (x .@ "Prefix")
-
-instance Hashable InventoryFilter where
-
-instance NFData InventoryFilter where
-
-instance ToXML InventoryFilter where
-        toXML InventoryFilter'{..}
-          = mconcat ["Prefix" @= _ifPrefix]
-
--- | /See:/ 'inventoryS3BucketDestination' smart constructor.
-data InventoryS3BucketDestination = InventoryS3BucketDestination'
-  { _isbdPrefix     :: !(Maybe Text)
-  , _isbdAccountId  :: !(Maybe Text)
-  , _isbdEncryption :: !(Maybe InventoryEncryption)
-  , _isbdBucket     :: !BucketName
-  , _isbdFormat     :: !InventoryFormat
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'InventoryS3BucketDestination' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isbdPrefix' - The prefix that is prepended to all inventory results.
---
--- * 'isbdAccountId' - The ID of the account that owns the destination bucket.
---
--- * 'isbdEncryption' - Contains the type of server-side encryption used to encrypt the inventory results.
---
--- * 'isbdBucket' - The Amazon resource name (ARN) of the bucket where inventory results will be published.
---
--- * 'isbdFormat' - Specifies the output format of the inventory results.
-inventoryS3BucketDestination
-    :: BucketName -- ^ 'isbdBucket'
-    -> InventoryFormat -- ^ 'isbdFormat'
-    -> InventoryS3BucketDestination
-inventoryS3BucketDestination pBucket_ pFormat_ =
-  InventoryS3BucketDestination'
-  { _isbdPrefix = Nothing
-  , _isbdAccountId = Nothing
-  , _isbdEncryption = Nothing
-  , _isbdBucket = pBucket_
-  , _isbdFormat = pFormat_
-  }
-
-
--- | The prefix that is prepended to all inventory results.
-isbdPrefix :: Lens' InventoryS3BucketDestination (Maybe Text)
-isbdPrefix = lens _isbdPrefix (\ s a -> s{_isbdPrefix = a});
-
--- | The ID of the account that owns the destination bucket.
-isbdAccountId :: Lens' InventoryS3BucketDestination (Maybe Text)
-isbdAccountId = lens _isbdAccountId (\ s a -> s{_isbdAccountId = a});
-
--- | Contains the type of server-side encryption used to encrypt the inventory results.
-isbdEncryption :: Lens' InventoryS3BucketDestination (Maybe InventoryEncryption)
-isbdEncryption = lens _isbdEncryption (\ s a -> s{_isbdEncryption = a});
-
--- | The Amazon resource name (ARN) of the bucket where inventory results will be published.
-isbdBucket :: Lens' InventoryS3BucketDestination BucketName
-isbdBucket = lens _isbdBucket (\ s a -> s{_isbdBucket = a});
-
--- | Specifies the output format of the inventory results.
-isbdFormat :: Lens' InventoryS3BucketDestination InventoryFormat
-isbdFormat = lens _isbdFormat (\ s a -> s{_isbdFormat = a});
-
-instance FromXML InventoryS3BucketDestination where
-        parseXML x
-          = InventoryS3BucketDestination' <$>
-              (x .@? "Prefix") <*> (x .@? "AccountId") <*>
-                (x .@? "Encryption")
-                <*> (x .@ "Bucket")
-                <*> (x .@ "Format")
-
-instance Hashable InventoryS3BucketDestination where
-
-instance NFData InventoryS3BucketDestination where
-
-instance ToXML InventoryS3BucketDestination where
-        toXML InventoryS3BucketDestination'{..}
-          = mconcat
-              ["Prefix" @= _isbdPrefix,
-               "AccountId" @= _isbdAccountId,
-               "Encryption" @= _isbdEncryption,
-               "Bucket" @= _isbdBucket, "Format" @= _isbdFormat]
-
--- | /See:/ 'inventorySchedule' smart constructor.
-newtype InventorySchedule = InventorySchedule'
-  { _isFrequency :: InventoryFrequency
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'InventorySchedule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isFrequency' - Specifies how frequently inventory results are produced.
-inventorySchedule
-    :: InventoryFrequency -- ^ 'isFrequency'
-    -> InventorySchedule
-inventorySchedule pFrequency_ = InventorySchedule' {_isFrequency = pFrequency_}
-
-
--- | Specifies how frequently inventory results are produced.
-isFrequency :: Lens' InventorySchedule InventoryFrequency
-isFrequency = lens _isFrequency (\ s a -> s{_isFrequency = a});
-
-instance FromXML InventorySchedule where
-        parseXML x
-          = InventorySchedule' <$> (x .@ "Frequency")
-
-instance Hashable InventorySchedule where
-
-instance NFData InventorySchedule where
-
-instance ToXML InventorySchedule where
-        toXML InventorySchedule'{..}
-          = mconcat ["Frequency" @= _isFrequency]
-
--- | Container for specifying the AWS Lambda notification configuration.
---
--- /See:/ 'lambdaFunctionConfiguration' smart constructor.
-data LambdaFunctionConfiguration = LambdaFunctionConfiguration'
-  { _lfcId                :: !(Maybe Text)
-  , _lfcFilter            :: !(Maybe NotificationConfigurationFilter)
-  , _lfcLambdaFunctionARN :: !Text
-  , _lfcEvents            :: ![Event]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LambdaFunctionConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lfcId' - Undocumented member.
---
--- * 'lfcFilter' - Undocumented member.
---
--- * 'lfcLambdaFunctionARN' - Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
---
--- * 'lfcEvents' - Undocumented member.
-lambdaFunctionConfiguration
-    :: Text -- ^ 'lfcLambdaFunctionARN'
-    -> LambdaFunctionConfiguration
-lambdaFunctionConfiguration pLambdaFunctionARN_ =
-  LambdaFunctionConfiguration'
-  { _lfcId = Nothing
-  , _lfcFilter = Nothing
-  , _lfcLambdaFunctionARN = pLambdaFunctionARN_
-  , _lfcEvents = mempty
-  }
-
-
--- | Undocumented member.
-lfcId :: Lens' LambdaFunctionConfiguration (Maybe Text)
-lfcId = lens _lfcId (\ s a -> s{_lfcId = a});
-
--- | Undocumented member.
-lfcFilter :: Lens' LambdaFunctionConfiguration (Maybe NotificationConfigurationFilter)
-lfcFilter = lens _lfcFilter (\ s a -> s{_lfcFilter = a});
-
--- | Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
-lfcLambdaFunctionARN :: Lens' LambdaFunctionConfiguration Text
-lfcLambdaFunctionARN = lens _lfcLambdaFunctionARN (\ s a -> s{_lfcLambdaFunctionARN = a});
-
--- | Undocumented member.
-lfcEvents :: Lens' LambdaFunctionConfiguration [Event]
-lfcEvents = lens _lfcEvents (\ s a -> s{_lfcEvents = a}) . _Coerce;
-
-instance FromXML LambdaFunctionConfiguration where
-        parseXML x
-          = LambdaFunctionConfiguration' <$>
-              (x .@? "Id") <*> (x .@? "Filter") <*>
-                (x .@ "CloudFunction")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable LambdaFunctionConfiguration where
-
-instance NFData LambdaFunctionConfiguration where
-
-instance ToXML LambdaFunctionConfiguration where
-        toXML LambdaFunctionConfiguration'{..}
-          = mconcat
-              ["Id" @= _lfcId, "Filter" @= _lfcFilter,
-               "CloudFunction" @= _lfcLambdaFunctionARN,
-               toXMLList "Event" _lfcEvents]
-
--- | /See:/ 'lifecycleExpiration' smart constructor.
-data LifecycleExpiration = LifecycleExpiration'
-  { _leDays                      :: !(Maybe Int)
-  , _leDate                      :: !(Maybe RFC822)
-  , _leExpiredObjectDeleteMarker :: !(Maybe Bool)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LifecycleExpiration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'leDays' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
---
--- * 'leDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
---
--- * 'leExpiredObjectDeleteMarker' - Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
-lifecycleExpiration
-    :: LifecycleExpiration
-lifecycleExpiration =
-  LifecycleExpiration'
-  {_leDays = Nothing, _leDate = Nothing, _leExpiredObjectDeleteMarker = Nothing}
-
-
--- | Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
-leDays :: Lens' LifecycleExpiration (Maybe Int)
-leDays = lens _leDays (\ s a -> s{_leDays = a});
-
--- | Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
-leDate :: Lens' LifecycleExpiration (Maybe UTCTime)
-leDate = lens _leDate (\ s a -> s{_leDate = a}) . mapping _Time;
-
--- | Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
-leExpiredObjectDeleteMarker :: Lens' LifecycleExpiration (Maybe Bool)
-leExpiredObjectDeleteMarker = lens _leExpiredObjectDeleteMarker (\ s a -> s{_leExpiredObjectDeleteMarker = a});
-
-instance FromXML LifecycleExpiration where
-        parseXML x
-          = LifecycleExpiration' <$>
-              (x .@? "Days") <*> (x .@? "Date") <*>
-                (x .@? "ExpiredObjectDeleteMarker")
-
-instance Hashable LifecycleExpiration where
-
-instance NFData LifecycleExpiration where
-
-instance ToXML LifecycleExpiration where
-        toXML LifecycleExpiration'{..}
-          = mconcat
-              ["Days" @= _leDays, "Date" @= _leDate,
-               "ExpiredObjectDeleteMarker" @=
-                 _leExpiredObjectDeleteMarker]
-
--- | /See:/ 'lifecycleRule' smart constructor.
-data LifecycleRule = LifecycleRule'
-  { _lrTransitions                    :: !(Maybe [Transition])
-  , _lrNoncurrentVersionExpiration    :: !(Maybe NoncurrentVersionExpiration)
-  , _lrPrefix                         :: !(Maybe Text)
-  , _lrNoncurrentVersionTransitions   :: !(Maybe [NoncurrentVersionTransition])
-  , _lrExpiration                     :: !(Maybe LifecycleExpiration)
-  , _lrId                             :: !(Maybe Text)
-  , _lrFilter                         :: !(Maybe LifecycleRuleFilter)
-  , _lrAbortIncompleteMultipartUpload :: !(Maybe AbortIncompleteMultipartUpload)
-  , _lrStatus                         :: !ExpirationStatus
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LifecycleRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrTransitions' - Undocumented member.
---
--- * 'lrNoncurrentVersionExpiration' - Undocumented member.
---
--- * 'lrPrefix' - Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
---
--- * 'lrNoncurrentVersionTransitions' - Undocumented member.
---
--- * 'lrExpiration' - Undocumented member.
---
--- * 'lrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
---
--- * 'lrFilter' - Undocumented member.
---
--- * 'lrAbortIncompleteMultipartUpload' - Undocumented member.
---
--- * 'lrStatus' - If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
-lifecycleRule
-    :: ExpirationStatus -- ^ 'lrStatus'
-    -> LifecycleRule
-lifecycleRule pStatus_ =
-  LifecycleRule'
-  { _lrTransitions = Nothing
-  , _lrNoncurrentVersionExpiration = Nothing
-  , _lrPrefix = Nothing
-  , _lrNoncurrentVersionTransitions = Nothing
-  , _lrExpiration = Nothing
-  , _lrId = Nothing
-  , _lrFilter = Nothing
-  , _lrAbortIncompleteMultipartUpload = Nothing
-  , _lrStatus = pStatus_
-  }
-
-
--- | Undocumented member.
-lrTransitions :: Lens' LifecycleRule [Transition]
-lrTransitions = lens _lrTransitions (\ s a -> s{_lrTransitions = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-lrNoncurrentVersionExpiration :: Lens' LifecycleRule (Maybe NoncurrentVersionExpiration)
-lrNoncurrentVersionExpiration = lens _lrNoncurrentVersionExpiration (\ s a -> s{_lrNoncurrentVersionExpiration = a});
-
--- | Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
-lrPrefix :: Lens' LifecycleRule (Maybe Text)
-lrPrefix = lens _lrPrefix (\ s a -> s{_lrPrefix = a});
-
--- | Undocumented member.
-lrNoncurrentVersionTransitions :: Lens' LifecycleRule [NoncurrentVersionTransition]
-lrNoncurrentVersionTransitions = lens _lrNoncurrentVersionTransitions (\ s a -> s{_lrNoncurrentVersionTransitions = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-lrExpiration :: Lens' LifecycleRule (Maybe LifecycleExpiration)
-lrExpiration = lens _lrExpiration (\ s a -> s{_lrExpiration = a});
-
--- | Unique identifier for the rule. The value cannot be longer than 255 characters.
-lrId :: Lens' LifecycleRule (Maybe Text)
-lrId = lens _lrId (\ s a -> s{_lrId = a});
-
--- | Undocumented member.
-lrFilter :: Lens' LifecycleRule (Maybe LifecycleRuleFilter)
-lrFilter = lens _lrFilter (\ s a -> s{_lrFilter = a});
-
--- | Undocumented member.
-lrAbortIncompleteMultipartUpload :: Lens' LifecycleRule (Maybe AbortIncompleteMultipartUpload)
-lrAbortIncompleteMultipartUpload = lens _lrAbortIncompleteMultipartUpload (\ s a -> s{_lrAbortIncompleteMultipartUpload = a});
-
--- | If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
-lrStatus :: Lens' LifecycleRule ExpirationStatus
-lrStatus = lens _lrStatus (\ s a -> s{_lrStatus = a});
-
-instance FromXML LifecycleRule where
-        parseXML x
-          = LifecycleRule' <$>
-              (may (parseXMLList "Transition") x) <*>
-                (x .@? "NoncurrentVersionExpiration")
-                <*> (x .@? "Prefix")
-                <*>
-                (may (parseXMLList "NoncurrentVersionTransition") x)
-                <*> (x .@? "Expiration")
-                <*> (x .@? "ID")
-                <*> (x .@? "Filter")
-                <*> (x .@? "AbortIncompleteMultipartUpload")
-                <*> (x .@ "Status")
-
-instance Hashable LifecycleRule where
-
-instance NFData LifecycleRule where
-
-instance ToXML LifecycleRule where
-        toXML LifecycleRule'{..}
-          = mconcat
-              [toXML (toXMLList "Transition" <$> _lrTransitions),
-               "NoncurrentVersionExpiration" @=
-                 _lrNoncurrentVersionExpiration,
-               "Prefix" @= _lrPrefix,
-               toXML
-                 (toXMLList "NoncurrentVersionTransition" <$>
-                    _lrNoncurrentVersionTransitions),
-               "Expiration" @= _lrExpiration, "ID" @= _lrId,
-               "Filter" @= _lrFilter,
-               "AbortIncompleteMultipartUpload" @=
-                 _lrAbortIncompleteMultipartUpload,
-               "Status" @= _lrStatus]
-
--- | This is used in a Lifecycle Rule Filter to apply a logical AND to two or more predicates. The Lifecycle Rule will apply to any object matching all of the predicates configured inside the And operator.
---
--- /See:/ 'lifecycleRuleAndOperator' smart constructor.
-data LifecycleRuleAndOperator = LifecycleRuleAndOperator'
-  { _lraoPrefix :: !(Maybe Text)
-  , _lraoTags   :: !(Maybe [Tag])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LifecycleRuleAndOperator' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lraoPrefix' - Undocumented member.
---
--- * 'lraoTags' - All of these tags must exist in the object's tag set in order for the rule to apply.
-lifecycleRuleAndOperator
-    :: LifecycleRuleAndOperator
-lifecycleRuleAndOperator =
-  LifecycleRuleAndOperator' {_lraoPrefix = Nothing, _lraoTags = Nothing}
-
-
--- | Undocumented member.
-lraoPrefix :: Lens' LifecycleRuleAndOperator (Maybe Text)
-lraoPrefix = lens _lraoPrefix (\ s a -> s{_lraoPrefix = a});
-
--- | All of these tags must exist in the object's tag set in order for the rule to apply.
-lraoTags :: Lens' LifecycleRuleAndOperator [Tag]
-lraoTags = lens _lraoTags (\ s a -> s{_lraoTags = a}) . _Default . _Coerce;
-
-instance FromXML LifecycleRuleAndOperator where
-        parseXML x
-          = LifecycleRuleAndOperator' <$>
-              (x .@? "Prefix") <*>
-                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
-
-instance Hashable LifecycleRuleAndOperator where
-
-instance NFData LifecycleRuleAndOperator where
-
-instance ToXML LifecycleRuleAndOperator where
-        toXML LifecycleRuleAndOperator'{..}
-          = mconcat
-              ["Prefix" @= _lraoPrefix,
-               "Tag" @= toXML (toXMLList "Tag" <$> _lraoTags)]
-
--- | The Filter is used to identify objects that a Lifecycle Rule applies to. A Filter must have exactly one of Prefix, Tag, or And specified.
---
--- /See:/ 'lifecycleRuleFilter' smart constructor.
-data LifecycleRuleFilter = LifecycleRuleFilter'
-  { _lrfTag    :: !(Maybe Tag)
-  , _lrfPrefix :: !(Maybe Text)
-  , _lrfAnd    :: !(Maybe LifecycleRuleAndOperator)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LifecycleRuleFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrfTag' - This tag must exist in the object's tag set in order for the rule to apply.
---
--- * 'lrfPrefix' - Prefix identifying one or more objects to which the rule applies.
---
--- * 'lrfAnd' - Undocumented member.
-lifecycleRuleFilter
-    :: LifecycleRuleFilter
-lifecycleRuleFilter =
-  LifecycleRuleFilter'
-  {_lrfTag = Nothing, _lrfPrefix = Nothing, _lrfAnd = Nothing}
-
-
--- | This tag must exist in the object's tag set in order for the rule to apply.
-lrfTag :: Lens' LifecycleRuleFilter (Maybe Tag)
-lrfTag = lens _lrfTag (\ s a -> s{_lrfTag = a});
-
--- | Prefix identifying one or more objects to which the rule applies.
-lrfPrefix :: Lens' LifecycleRuleFilter (Maybe Text)
-lrfPrefix = lens _lrfPrefix (\ s a -> s{_lrfPrefix = a});
-
--- | Undocumented member.
-lrfAnd :: Lens' LifecycleRuleFilter (Maybe LifecycleRuleAndOperator)
-lrfAnd = lens _lrfAnd (\ s a -> s{_lrfAnd = a});
-
-instance FromXML LifecycleRuleFilter where
-        parseXML x
-          = LifecycleRuleFilter' <$>
-              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
-
-instance Hashable LifecycleRuleFilter where
-
-instance NFData LifecycleRuleFilter where
-
-instance ToXML LifecycleRuleFilter where
-        toXML LifecycleRuleFilter'{..}
-          = mconcat
-              ["Tag" @= _lrfTag, "Prefix" @= _lrfPrefix,
-               "And" @= _lrfAnd]
-
--- | /See:/ 'loggingEnabled' smart constructor.
-data LoggingEnabled = LoggingEnabled'
-  { _leTargetBucket :: !(Maybe Text)
-  , _leTargetGrants :: !(Maybe [TargetGrant])
-  , _leTargetPrefix :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LoggingEnabled' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'leTargetBucket' - Specifies the bucket where you want Amazon S3 to store server access logs. You can have your logs delivered to any bucket that you own, including the same bucket that is being logged. You can also configure multiple buckets to deliver their logs to the same target bucket. In this case you should choose a different TargetPrefix for each source bucket so that the delivered log files can be distinguished by key.
---
--- * 'leTargetGrants' - Undocumented member.
---
--- * 'leTargetPrefix' - This element lets you specify a prefix for the keys that the log files will be stored under.
-loggingEnabled
-    :: LoggingEnabled
-loggingEnabled =
-  LoggingEnabled'
-  { _leTargetBucket = Nothing
-  , _leTargetGrants = Nothing
-  , _leTargetPrefix = Nothing
-  }
-
-
--- | Specifies the bucket where you want Amazon S3 to store server access logs. You can have your logs delivered to any bucket that you own, including the same bucket that is being logged. You can also configure multiple buckets to deliver their logs to the same target bucket. In this case you should choose a different TargetPrefix for each source bucket so that the delivered log files can be distinguished by key.
-leTargetBucket :: Lens' LoggingEnabled (Maybe Text)
-leTargetBucket = lens _leTargetBucket (\ s a -> s{_leTargetBucket = a});
-
--- | Undocumented member.
-leTargetGrants :: Lens' LoggingEnabled [TargetGrant]
-leTargetGrants = lens _leTargetGrants (\ s a -> s{_leTargetGrants = a}) . _Default . _Coerce;
-
--- | This element lets you specify a prefix for the keys that the log files will be stored under.
-leTargetPrefix :: Lens' LoggingEnabled (Maybe Text)
-leTargetPrefix = lens _leTargetPrefix (\ s a -> s{_leTargetPrefix = a});
-
-instance FromXML LoggingEnabled where
-        parseXML x
-          = LoggingEnabled' <$>
-              (x .@? "TargetBucket") <*>
-                (x .@? "TargetGrants" .!@ mempty >>=
-                   may (parseXMLList "Grant"))
-                <*> (x .@? "TargetPrefix")
-
-instance Hashable LoggingEnabled where
-
-instance NFData LoggingEnabled where
-
-instance ToXML LoggingEnabled where
-        toXML LoggingEnabled'{..}
-          = mconcat
-              ["TargetBucket" @= _leTargetBucket,
-               "TargetGrants" @=
-                 toXML (toXMLList "Grant" <$> _leTargetGrants),
-               "TargetPrefix" @= _leTargetPrefix]
-
--- | /See:/ 'metricsAndOperator' smart constructor.
-data MetricsAndOperator = MetricsAndOperator'
-  { _maoPrefix :: !(Maybe Text)
-  , _maoTags   :: !(Maybe [Tag])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricsAndOperator' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'maoPrefix' - The prefix used when evaluating an AND predicate.
---
--- * 'maoTags' - The list of tags used when evaluating an AND predicate.
-metricsAndOperator
-    :: MetricsAndOperator
-metricsAndOperator =
-  MetricsAndOperator' {_maoPrefix = Nothing, _maoTags = Nothing}
-
-
--- | The prefix used when evaluating an AND predicate.
-maoPrefix :: Lens' MetricsAndOperator (Maybe Text)
-maoPrefix = lens _maoPrefix (\ s a -> s{_maoPrefix = a});
-
--- | The list of tags used when evaluating an AND predicate.
-maoTags :: Lens' MetricsAndOperator [Tag]
-maoTags = lens _maoTags (\ s a -> s{_maoTags = a}) . _Default . _Coerce;
-
-instance FromXML MetricsAndOperator where
-        parseXML x
-          = MetricsAndOperator' <$>
-              (x .@? "Prefix") <*>
-                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
-
-instance Hashable MetricsAndOperator where
-
-instance NFData MetricsAndOperator where
-
-instance ToXML MetricsAndOperator where
-        toXML MetricsAndOperator'{..}
-          = mconcat
-              ["Prefix" @= _maoPrefix,
-               "Tag" @= toXML (toXMLList "Tag" <$> _maoTags)]
-
--- | /See:/ 'metricsConfiguration' smart constructor.
-data MetricsConfiguration = MetricsConfiguration'
-  { _mcFilter :: !(Maybe MetricsFilter)
-  , _mcId     :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricsConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mcFilter' - Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
---
--- * 'mcId' - The ID used to identify the metrics configuration.
-metricsConfiguration
-    :: Text -- ^ 'mcId'
-    -> MetricsConfiguration
-metricsConfiguration pId_ =
-  MetricsConfiguration' {_mcFilter = Nothing, _mcId = pId_}
-
-
--- | Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
-mcFilter :: Lens' MetricsConfiguration (Maybe MetricsFilter)
-mcFilter = lens _mcFilter (\ s a -> s{_mcFilter = a});
-
--- | The ID used to identify the metrics configuration.
-mcId :: Lens' MetricsConfiguration Text
-mcId = lens _mcId (\ s a -> s{_mcId = a});
-
-instance FromXML MetricsConfiguration where
-        parseXML x
-          = MetricsConfiguration' <$>
-              (x .@? "Filter") <*> (x .@ "Id")
-
-instance Hashable MetricsConfiguration where
-
-instance NFData MetricsConfiguration where
-
-instance ToXML MetricsConfiguration where
-        toXML MetricsConfiguration'{..}
-          = mconcat ["Filter" @= _mcFilter, "Id" @= _mcId]
-
--- | /See:/ 'metricsFilter' smart constructor.
-data MetricsFilter = MetricsFilter'
-  { _mfTag    :: !(Maybe Tag)
-  , _mfPrefix :: !(Maybe Text)
-  , _mfAnd    :: !(Maybe MetricsAndOperator)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MetricsFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mfTag' - The tag used when evaluating a metrics filter.
---
--- * 'mfPrefix' - The prefix used when evaluating a metrics filter.
---
--- * 'mfAnd' - A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
-metricsFilter
-    :: MetricsFilter
-metricsFilter =
-  MetricsFilter' {_mfTag = Nothing, _mfPrefix = Nothing, _mfAnd = Nothing}
-
-
--- | The tag used when evaluating a metrics filter.
-mfTag :: Lens' MetricsFilter (Maybe Tag)
-mfTag = lens _mfTag (\ s a -> s{_mfTag = a});
-
--- | The prefix used when evaluating a metrics filter.
-mfPrefix :: Lens' MetricsFilter (Maybe Text)
-mfPrefix = lens _mfPrefix (\ s a -> s{_mfPrefix = a});
-
--- | A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
-mfAnd :: Lens' MetricsFilter (Maybe MetricsAndOperator)
-mfAnd = lens _mfAnd (\ s a -> s{_mfAnd = a});
-
-instance FromXML MetricsFilter where
-        parseXML x
-          = MetricsFilter' <$>
-              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
-
-instance Hashable MetricsFilter where
-
-instance NFData MetricsFilter where
-
-instance ToXML MetricsFilter where
-        toXML MetricsFilter'{..}
-          = mconcat
-              ["Tag" @= _mfTag, "Prefix" @= _mfPrefix,
-               "And" @= _mfAnd]
-
--- | /See:/ 'multipartUpload' smart constructor.
-data MultipartUpload = MultipartUpload'
-  { _muInitiated    :: !(Maybe RFC822)
-  , _muInitiator    :: !(Maybe Initiator)
-  , _muOwner        :: !(Maybe Owner)
-  , _muKey          :: !(Maybe ObjectKey)
-  , _muStorageClass :: !(Maybe StorageClass)
-  , _muUploadId     :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'MultipartUpload' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'muInitiated' - Date and time at which the multipart upload was initiated.
---
--- * 'muInitiator' - Identifies who initiated the multipart upload.
---
--- * 'muOwner' - Undocumented member.
---
--- * 'muKey' - Key of the object for which the multipart upload was initiated.
---
--- * 'muStorageClass' - The class of storage used to store the object.
---
--- * 'muUploadId' - Upload ID that identifies the multipart upload.
-multipartUpload
-    :: MultipartUpload
-multipartUpload =
-  MultipartUpload'
-  { _muInitiated = Nothing
-  , _muInitiator = Nothing
-  , _muOwner = Nothing
-  , _muKey = Nothing
-  , _muStorageClass = Nothing
-  , _muUploadId = Nothing
-  }
-
-
--- | Date and time at which the multipart upload was initiated.
-muInitiated :: Lens' MultipartUpload (Maybe UTCTime)
-muInitiated = lens _muInitiated (\ s a -> s{_muInitiated = a}) . mapping _Time;
-
--- | Identifies who initiated the multipart upload.
-muInitiator :: Lens' MultipartUpload (Maybe Initiator)
-muInitiator = lens _muInitiator (\ s a -> s{_muInitiator = a});
-
--- | Undocumented member.
-muOwner :: Lens' MultipartUpload (Maybe Owner)
-muOwner = lens _muOwner (\ s a -> s{_muOwner = a});
-
--- | Key of the object for which the multipart upload was initiated.
-muKey :: Lens' MultipartUpload (Maybe ObjectKey)
-muKey = lens _muKey (\ s a -> s{_muKey = a});
-
--- | The class of storage used to store the object.
-muStorageClass :: Lens' MultipartUpload (Maybe StorageClass)
-muStorageClass = lens _muStorageClass (\ s a -> s{_muStorageClass = a});
-
--- | Upload ID that identifies the multipart upload.
-muUploadId :: Lens' MultipartUpload (Maybe Text)
-muUploadId = lens _muUploadId (\ s a -> s{_muUploadId = a});
-
-instance FromXML MultipartUpload where
-        parseXML x
-          = MultipartUpload' <$>
-              (x .@? "Initiated") <*> (x .@? "Initiator") <*>
-                (x .@? "Owner")
-                <*> (x .@? "Key")
-                <*> (x .@? "StorageClass")
-                <*> (x .@? "UploadId")
-
-instance Hashable MultipartUpload where
-
-instance NFData MultipartUpload where
-
--- | Specifies when noncurrent object versions expire. Upon expiration, Amazon S3 permanently deletes the noncurrent object versions. You set this lifecycle configuration action on a bucket that has versioning enabled (or suspended) to request that Amazon S3 delete noncurrent object versions at a specific period in the object's lifetime.
---
--- /See:/ 'noncurrentVersionExpiration' smart constructor.
-newtype NoncurrentVersionExpiration = NoncurrentVersionExpiration'
-  { _nveNoncurrentDays :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'NoncurrentVersionExpiration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nveNoncurrentDays' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
-noncurrentVersionExpiration
-    :: Int -- ^ 'nveNoncurrentDays'
-    -> NoncurrentVersionExpiration
-noncurrentVersionExpiration pNoncurrentDays_ =
-  NoncurrentVersionExpiration' {_nveNoncurrentDays = pNoncurrentDays_}
-
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
-nveNoncurrentDays :: Lens' NoncurrentVersionExpiration Int
-nveNoncurrentDays = lens _nveNoncurrentDays (\ s a -> s{_nveNoncurrentDays = a});
-
-instance FromXML NoncurrentVersionExpiration where
-        parseXML x
-          = NoncurrentVersionExpiration' <$>
-              (x .@ "NoncurrentDays")
-
-instance Hashable NoncurrentVersionExpiration where
-
-instance NFData NoncurrentVersionExpiration where
-
-instance ToXML NoncurrentVersionExpiration where
-        toXML NoncurrentVersionExpiration'{..}
-          = mconcat ["NoncurrentDays" @= _nveNoncurrentDays]
-
--- | Container for the transition rule that describes when noncurrent objects transition to the STANDARD_IA or GLACIER storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to the STANDARD_IA or GLACIER storage class at a specific period in the object's lifetime.
---
--- /See:/ 'noncurrentVersionTransition' smart constructor.
-data NoncurrentVersionTransition = NoncurrentVersionTransition'
-  { _nvtNoncurrentDays :: !Int
-  , _nvtStorageClass   :: !TransitionStorageClass
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'NoncurrentVersionTransition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nvtNoncurrentDays' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
---
--- * 'nvtStorageClass' - The class of storage used to store the object.
-noncurrentVersionTransition
-    :: Int -- ^ 'nvtNoncurrentDays'
-    -> TransitionStorageClass -- ^ 'nvtStorageClass'
-    -> NoncurrentVersionTransition
-noncurrentVersionTransition pNoncurrentDays_ pStorageClass_ =
-  NoncurrentVersionTransition'
-  {_nvtNoncurrentDays = pNoncurrentDays_, _nvtStorageClass = pStorageClass_}
-
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
-nvtNoncurrentDays :: Lens' NoncurrentVersionTransition Int
-nvtNoncurrentDays = lens _nvtNoncurrentDays (\ s a -> s{_nvtNoncurrentDays = a});
-
--- | The class of storage used to store the object.
-nvtStorageClass :: Lens' NoncurrentVersionTransition TransitionStorageClass
-nvtStorageClass = lens _nvtStorageClass (\ s a -> s{_nvtStorageClass = a});
-
-instance FromXML NoncurrentVersionTransition where
-        parseXML x
-          = NoncurrentVersionTransition' <$>
-              (x .@ "NoncurrentDays") <*> (x .@ "StorageClass")
-
-instance Hashable NoncurrentVersionTransition where
-
-instance NFData NoncurrentVersionTransition where
-
-instance ToXML NoncurrentVersionTransition where
-        toXML NoncurrentVersionTransition'{..}
-          = mconcat
-              ["NoncurrentDays" @= _nvtNoncurrentDays,
-               "StorageClass" @= _nvtStorageClass]
-
--- | Container for specifying the notification configuration of the bucket. If this element is empty, notifications are turned off on the bucket.
---
--- /See:/ 'notificationConfiguration' smart constructor.
-data NotificationConfiguration = NotificationConfiguration'
-  { _ncQueueConfigurations          :: !(Maybe [QueueConfiguration])
-  , _ncTopicConfigurations          :: !(Maybe [TopicConfiguration])
-  , _ncLambdaFunctionConfigurations :: !(Maybe [LambdaFunctionConfiguration])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'NotificationConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ncQueueConfigurations' - Undocumented member.
---
--- * 'ncTopicConfigurations' - Undocumented member.
---
--- * 'ncLambdaFunctionConfigurations' - Undocumented member.
-notificationConfiguration
-    :: NotificationConfiguration
-notificationConfiguration =
-  NotificationConfiguration'
-  { _ncQueueConfigurations = Nothing
-  , _ncTopicConfigurations = Nothing
-  , _ncLambdaFunctionConfigurations = Nothing
-  }
-
-
--- | Undocumented member.
-ncQueueConfigurations :: Lens' NotificationConfiguration [QueueConfiguration]
-ncQueueConfigurations = lens _ncQueueConfigurations (\ s a -> s{_ncQueueConfigurations = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-ncTopicConfigurations :: Lens' NotificationConfiguration [TopicConfiguration]
-ncTopicConfigurations = lens _ncTopicConfigurations (\ s a -> s{_ncTopicConfigurations = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-ncLambdaFunctionConfigurations :: Lens' NotificationConfiguration [LambdaFunctionConfiguration]
-ncLambdaFunctionConfigurations = lens _ncLambdaFunctionConfigurations (\ s a -> s{_ncLambdaFunctionConfigurations = a}) . _Default . _Coerce;
-
-instance FromXML NotificationConfiguration where
-        parseXML x
-          = NotificationConfiguration' <$>
-              (may (parseXMLList "QueueConfiguration") x) <*>
-                (may (parseXMLList "TopicConfiguration") x)
-                <*>
-                (may (parseXMLList "CloudFunctionConfiguration") x)
-
-instance Hashable NotificationConfiguration where
-
-instance NFData NotificationConfiguration where
-
-instance ToXML NotificationConfiguration where
-        toXML NotificationConfiguration'{..}
-          = mconcat
-              [toXML
-                 (toXMLList "QueueConfiguration" <$>
-                    _ncQueueConfigurations),
-               toXML
-                 (toXMLList "TopicConfiguration" <$>
-                    _ncTopicConfigurations),
-               toXML
-                 (toXMLList "CloudFunctionConfiguration" <$>
-                    _ncLambdaFunctionConfigurations)]
-
--- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
---
--- /See:/ 'notificationConfigurationFilter' smart constructor.
-newtype NotificationConfigurationFilter = NotificationConfigurationFilter'
-  { _ncfKey :: Maybe S3KeyFilter
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'NotificationConfigurationFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ncfKey' - Undocumented member.
-notificationConfigurationFilter
-    :: NotificationConfigurationFilter
-notificationConfigurationFilter =
-  NotificationConfigurationFilter' {_ncfKey = Nothing}
-
-
--- | Undocumented member.
-ncfKey :: Lens' NotificationConfigurationFilter (Maybe S3KeyFilter)
-ncfKey = lens _ncfKey (\ s a -> s{_ncfKey = a});
-
-instance FromXML NotificationConfigurationFilter
-         where
-        parseXML x
-          = NotificationConfigurationFilter' <$>
-              (x .@? "S3Key")
-
-instance Hashable NotificationConfigurationFilter
-         where
-
-instance NFData NotificationConfigurationFilter where
-
-instance ToXML NotificationConfigurationFilter where
-        toXML NotificationConfigurationFilter'{..}
-          = mconcat ["S3Key" @= _ncfKey]
-
--- | /See:/ 'object'' smart constructor.
-data Object = Object'
-  { _oOwner        :: !(Maybe Owner)
-  , _oETag         :: !ETag
-  , _oSize         :: !Int
-  , _oKey          :: !ObjectKey
-  , _oStorageClass :: !ObjectStorageClass
-  , _oLastModified :: !RFC822
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Object' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oOwner' - Undocumented member.
---
--- * 'oETag' - Undocumented member.
---
--- * 'oSize' - Undocumented member.
---
--- * 'oKey' - Undocumented member.
---
--- * 'oStorageClass' - The class of storage used to store the object.
---
--- * 'oLastModified' - Undocumented member.
-object'
-    :: ETag -- ^ 'oETag'
-    -> Int -- ^ 'oSize'
-    -> ObjectKey -- ^ 'oKey'
-    -> ObjectStorageClass -- ^ 'oStorageClass'
-    -> UTCTime -- ^ 'oLastModified'
-    -> Object
-object' pETag_ pSize_ pKey_ pStorageClass_ pLastModified_ =
-  Object'
-  { _oOwner = Nothing
-  , _oETag = pETag_
-  , _oSize = pSize_
-  , _oKey = pKey_
-  , _oStorageClass = pStorageClass_
-  , _oLastModified = _Time # pLastModified_
-  }
-
-
--- | Undocumented member.
-oOwner :: Lens' Object (Maybe Owner)
-oOwner = lens _oOwner (\ s a -> s{_oOwner = a});
-
--- | Undocumented member.
-oETag :: Lens' Object ETag
-oETag = lens _oETag (\ s a -> s{_oETag = a});
-
--- | Undocumented member.
-oSize :: Lens' Object Int
-oSize = lens _oSize (\ s a -> s{_oSize = a});
-
--- | Undocumented member.
-oKey :: Lens' Object ObjectKey
-oKey = lens _oKey (\ s a -> s{_oKey = a});
-
--- | The class of storage used to store the object.
-oStorageClass :: Lens' Object ObjectStorageClass
-oStorageClass = lens _oStorageClass (\ s a -> s{_oStorageClass = a});
-
--- | Undocumented member.
-oLastModified :: Lens' Object UTCTime
-oLastModified = lens _oLastModified (\ s a -> s{_oLastModified = a}) . _Time;
-
-instance FromXML Object where
-        parseXML x
-          = Object' <$>
-              (x .@? "Owner") <*> (x .@ "ETag") <*> (x .@ "Size")
-                <*> (x .@ "Key")
-                <*> (x .@ "StorageClass")
-                <*> (x .@ "LastModified")
-
-instance Hashable Object where
-
-instance NFData Object where
-
--- | /See:/ 'objectIdentifier' smart constructor.
-data ObjectIdentifier = ObjectIdentifier'
-  { _oiVersionId :: !(Maybe ObjectVersionId)
-  , _oiKey       :: !ObjectKey
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ObjectIdentifier' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oiVersionId' - VersionId for the specific version of the object to delete.
---
--- * 'oiKey' - Key name of the object to delete.
-objectIdentifier
-    :: ObjectKey -- ^ 'oiKey'
-    -> ObjectIdentifier
-objectIdentifier pKey_ =
-  ObjectIdentifier' {_oiVersionId = Nothing, _oiKey = pKey_}
-
-
--- | VersionId for the specific version of the object to delete.
-oiVersionId :: Lens' ObjectIdentifier (Maybe ObjectVersionId)
-oiVersionId = lens _oiVersionId (\ s a -> s{_oiVersionId = a});
-
--- | Key name of the object to delete.
-oiKey :: Lens' ObjectIdentifier ObjectKey
-oiKey = lens _oiKey (\ s a -> s{_oiKey = a});
-
-instance Hashable ObjectIdentifier where
-
-instance NFData ObjectIdentifier where
-
-instance ToXML ObjectIdentifier where
-        toXML ObjectIdentifier'{..}
-          = mconcat
-              ["VersionId" @= _oiVersionId, "Key" @= _oiKey]
-
--- | /See:/ 'objectVersion' smart constructor.
-data ObjectVersion = ObjectVersion'
-  { _ovETag         :: !(Maybe ETag)
-  , _ovVersionId    :: !(Maybe ObjectVersionId)
-  , _ovSize         :: !(Maybe Int)
-  , _ovIsLatest     :: !(Maybe Bool)
-  , _ovOwner        :: !(Maybe Owner)
-  , _ovKey          :: !(Maybe ObjectKey)
-  , _ovStorageClass :: !(Maybe ObjectVersionStorageClass)
-  , _ovLastModified :: !(Maybe RFC822)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ObjectVersion' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ovETag' - Undocumented member.
---
--- * 'ovVersionId' - Version ID of an object.
---
--- * 'ovSize' - Size in bytes of the object.
---
--- * 'ovIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
---
--- * 'ovOwner' - Undocumented member.
---
--- * 'ovKey' - The object key.
---
--- * 'ovStorageClass' - The class of storage used to store the object.
---
--- * 'ovLastModified' - Date and time the object was last modified.
-objectVersion
-    :: ObjectVersion
-objectVersion =
-  ObjectVersion'
-  { _ovETag = Nothing
-  , _ovVersionId = Nothing
-  , _ovSize = Nothing
-  , _ovIsLatest = Nothing
-  , _ovOwner = Nothing
-  , _ovKey = Nothing
-  , _ovStorageClass = Nothing
-  , _ovLastModified = Nothing
-  }
-
-
--- | Undocumented member.
-ovETag :: Lens' ObjectVersion (Maybe ETag)
-ovETag = lens _ovETag (\ s a -> s{_ovETag = a});
-
--- | Version ID of an object.
-ovVersionId :: Lens' ObjectVersion (Maybe ObjectVersionId)
-ovVersionId = lens _ovVersionId (\ s a -> s{_ovVersionId = a});
-
--- | Size in bytes of the object.
-ovSize :: Lens' ObjectVersion (Maybe Int)
-ovSize = lens _ovSize (\ s a -> s{_ovSize = a});
-
--- | Specifies whether the object is (true) or is not (false) the latest version of an object.
-ovIsLatest :: Lens' ObjectVersion (Maybe Bool)
-ovIsLatest = lens _ovIsLatest (\ s a -> s{_ovIsLatest = a});
-
--- | Undocumented member.
-ovOwner :: Lens' ObjectVersion (Maybe Owner)
-ovOwner = lens _ovOwner (\ s a -> s{_ovOwner = a});
-
--- | The object key.
-ovKey :: Lens' ObjectVersion (Maybe ObjectKey)
-ovKey = lens _ovKey (\ s a -> s{_ovKey = a});
-
--- | The class of storage used to store the object.
-ovStorageClass :: Lens' ObjectVersion (Maybe ObjectVersionStorageClass)
-ovStorageClass = lens _ovStorageClass (\ s a -> s{_ovStorageClass = a});
-
--- | Date and time the object was last modified.
-ovLastModified :: Lens' ObjectVersion (Maybe UTCTime)
-ovLastModified = lens _ovLastModified (\ s a -> s{_ovLastModified = a}) . mapping _Time;
-
-instance FromXML ObjectVersion where
-        parseXML x
-          = ObjectVersion' <$>
-              (x .@? "ETag") <*> (x .@? "VersionId") <*>
-                (x .@? "Size")
-                <*> (x .@? "IsLatest")
-                <*> (x .@? "Owner")
-                <*> (x .@? "Key")
-                <*> (x .@? "StorageClass")
-                <*> (x .@? "LastModified")
-
-instance Hashable ObjectVersion where
-
-instance NFData ObjectVersion where
-
--- | /See:/ 'owner' smart constructor.
-data Owner = Owner'
-  { _oDisplayName :: !(Maybe Text)
-  , _oId          :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Owner' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'oDisplayName' - Undocumented member.
---
--- * 'oId' - Undocumented member.
-owner
-    :: Owner
-owner = Owner' {_oDisplayName = Nothing, _oId = Nothing}
-
-
--- | Undocumented member.
-oDisplayName :: Lens' Owner (Maybe Text)
-oDisplayName = lens _oDisplayName (\ s a -> s{_oDisplayName = a});
-
--- | Undocumented member.
-oId :: Lens' Owner (Maybe Text)
-oId = lens _oId (\ s a -> s{_oId = a});
-
-instance FromXML Owner where
-        parseXML x
-          = Owner' <$> (x .@? "DisplayName") <*> (x .@? "ID")
-
-instance Hashable Owner where
-
-instance NFData Owner where
-
-instance ToXML Owner where
-        toXML Owner'{..}
-          = mconcat
-              ["DisplayName" @= _oDisplayName, "ID" @= _oId]
-
--- | /See:/ 'part' smart constructor.
-data Part = Part'
-  { _pETag         :: !(Maybe ETag)
-  , _pSize         :: !(Maybe Int)
-  , _pPartNumber   :: !(Maybe Int)
-  , _pLastModified :: !(Maybe RFC822)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Part' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pETag' - Entity tag returned when the part was uploaded.
---
--- * 'pSize' - Size of the uploaded part data.
---
--- * 'pPartNumber' - Part number identifying the part. This is a positive integer between 1 and 10,000.
---
--- * 'pLastModified' - Date and time at which the part was uploaded.
-part
-    :: Part
-part =
-  Part'
-  { _pETag = Nothing
-  , _pSize = Nothing
-  , _pPartNumber = Nothing
-  , _pLastModified = Nothing
-  }
-
-
--- | Entity tag returned when the part was uploaded.
-pETag :: Lens' Part (Maybe ETag)
-pETag = lens _pETag (\ s a -> s{_pETag = a});
-
--- | Size of the uploaded part data.
-pSize :: Lens' Part (Maybe Int)
-pSize = lens _pSize (\ s a -> s{_pSize = a});
-
--- | Part number identifying the part. This is a positive integer between 1 and 10,000.
-pPartNumber :: Lens' Part (Maybe Int)
-pPartNumber = lens _pPartNumber (\ s a -> s{_pPartNumber = a});
-
--- | Date and time at which the part was uploaded.
-pLastModified :: Lens' Part (Maybe UTCTime)
-pLastModified = lens _pLastModified (\ s a -> s{_pLastModified = a}) . mapping _Time;
-
-instance FromXML Part where
-        parseXML x
-          = Part' <$>
-              (x .@? "ETag") <*> (x .@? "Size") <*>
-                (x .@? "PartNumber")
-                <*> (x .@? "LastModified")
-
-instance Hashable Part where
-
-instance NFData Part where
-
--- | Container for specifying an configuration when you want Amazon S3 to publish events to an Amazon Simple Queue Service (Amazon SQS) queue.
---
--- /See:/ 'queueConfiguration' smart constructor.
-data QueueConfiguration = QueueConfiguration'
-  { _qcId       :: !(Maybe Text)
-  , _qcFilter   :: !(Maybe NotificationConfigurationFilter)
-  , _qcQueueARN :: !Text
-  , _qcEvents   :: ![Event]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'QueueConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'qcId' - Undocumented member.
---
--- * 'qcFilter' - Undocumented member.
---
--- * 'qcQueueARN' - Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
---
--- * 'qcEvents' - Undocumented member.
-queueConfiguration
-    :: Text -- ^ 'qcQueueARN'
-    -> QueueConfiguration
-queueConfiguration pQueueARN_ =
-  QueueConfiguration'
-  { _qcId = Nothing
-  , _qcFilter = Nothing
-  , _qcQueueARN = pQueueARN_
-  , _qcEvents = mempty
-  }
-
-
--- | Undocumented member.
-qcId :: Lens' QueueConfiguration (Maybe Text)
-qcId = lens _qcId (\ s a -> s{_qcId = a});
-
--- | Undocumented member.
-qcFilter :: Lens' QueueConfiguration (Maybe NotificationConfigurationFilter)
-qcFilter = lens _qcFilter (\ s a -> s{_qcFilter = a});
-
--- | Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
-qcQueueARN :: Lens' QueueConfiguration Text
-qcQueueARN = lens _qcQueueARN (\ s a -> s{_qcQueueARN = a});
-
--- | Undocumented member.
-qcEvents :: Lens' QueueConfiguration [Event]
-qcEvents = lens _qcEvents (\ s a -> s{_qcEvents = a}) . _Coerce;
-
-instance FromXML QueueConfiguration where
-        parseXML x
-          = QueueConfiguration' <$>
-              (x .@? "Id") <*> (x .@? "Filter") <*> (x .@ "Queue")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable QueueConfiguration where
-
-instance NFData QueueConfiguration where
-
-instance ToXML QueueConfiguration where
-        toXML QueueConfiguration'{..}
-          = mconcat
-              ["Id" @= _qcId, "Filter" @= _qcFilter,
-               "Queue" @= _qcQueueARN, toXMLList "Event" _qcEvents]
-
--- | /See:/ 'redirect' smart constructor.
-data Redirect = Redirect'
-  { _rHostName             :: !(Maybe Text)
-  , _rProtocol             :: !(Maybe Protocol)
-  , _rHTTPRedirectCode     :: !(Maybe Text)
-  , _rReplaceKeyWith       :: !(Maybe Text)
-  , _rReplaceKeyPrefixWith :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Redirect' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rHostName' - The host name to use in the redirect request.
---
--- * 'rProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
---
--- * 'rHTTPRedirectCode' - The HTTP redirect code to use on the response. Not required if one of the siblings is present.
---
--- * 'rReplaceKeyWith' - The specific object key to use in the redirect request. For example, redirect request to error.html. Not required if one of the sibling is present. Can be present only if ReplaceKeyPrefixWith is not provided.
---
--- * 'rReplaceKeyPrefixWith' - The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix docs/ (objects in the docs/ folder) to documents/, you can set a condition block with KeyPrefixEquals set to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required if one of the siblings is present. Can be present only if ReplaceKeyWith is not provided.
-redirect
-    :: Redirect
-redirect =
-  Redirect'
-  { _rHostName = Nothing
-  , _rProtocol = Nothing
-  , _rHTTPRedirectCode = Nothing
-  , _rReplaceKeyWith = Nothing
-  , _rReplaceKeyPrefixWith = Nothing
-  }
-
-
--- | The host name to use in the redirect request.
-rHostName :: Lens' Redirect (Maybe Text)
-rHostName = lens _rHostName (\ s a -> s{_rHostName = a});
-
--- | Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
-rProtocol :: Lens' Redirect (Maybe Protocol)
-rProtocol = lens _rProtocol (\ s a -> s{_rProtocol = a});
-
--- | The HTTP redirect code to use on the response. Not required if one of the siblings is present.
-rHTTPRedirectCode :: Lens' Redirect (Maybe Text)
-rHTTPRedirectCode = lens _rHTTPRedirectCode (\ s a -> s{_rHTTPRedirectCode = a});
-
--- | The specific object key to use in the redirect request. For example, redirect request to error.html. Not required if one of the sibling is present. Can be present only if ReplaceKeyPrefixWith is not provided.
-rReplaceKeyWith :: Lens' Redirect (Maybe Text)
-rReplaceKeyWith = lens _rReplaceKeyWith (\ s a -> s{_rReplaceKeyWith = a});
-
--- | The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix docs/ (objects in the docs/ folder) to documents/, you can set a condition block with KeyPrefixEquals set to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required if one of the siblings is present. Can be present only if ReplaceKeyWith is not provided.
-rReplaceKeyPrefixWith :: Lens' Redirect (Maybe Text)
-rReplaceKeyPrefixWith = lens _rReplaceKeyPrefixWith (\ s a -> s{_rReplaceKeyPrefixWith = a});
-
-instance FromXML Redirect where
-        parseXML x
-          = Redirect' <$>
-              (x .@? "HostName") <*> (x .@? "Protocol") <*>
-                (x .@? "HttpRedirectCode")
-                <*> (x .@? "ReplaceKeyWith")
-                <*> (x .@? "ReplaceKeyPrefixWith")
-
-instance Hashable Redirect where
-
-instance NFData Redirect where
-
-instance ToXML Redirect where
-        toXML Redirect'{..}
-          = mconcat
-              ["HostName" @= _rHostName, "Protocol" @= _rProtocol,
-               "HttpRedirectCode" @= _rHTTPRedirectCode,
-               "ReplaceKeyWith" @= _rReplaceKeyWith,
-               "ReplaceKeyPrefixWith" @= _rReplaceKeyPrefixWith]
-
--- | /See:/ 'redirectAllRequestsTo' smart constructor.
-data RedirectAllRequestsTo = RedirectAllRequestsTo'
-  { _rartProtocol :: !(Maybe Protocol)
-  , _rartHostName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RedirectAllRequestsTo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rartProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
---
--- * 'rartHostName' - Name of the host where requests will be redirected.
-redirectAllRequestsTo
-    :: Text -- ^ 'rartHostName'
-    -> RedirectAllRequestsTo
-redirectAllRequestsTo pHostName_ =
-  RedirectAllRequestsTo' {_rartProtocol = Nothing, _rartHostName = pHostName_}
-
-
--- | Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
-rartProtocol :: Lens' RedirectAllRequestsTo (Maybe Protocol)
-rartProtocol = lens _rartProtocol (\ s a -> s{_rartProtocol = a});
-
--- | Name of the host where requests will be redirected.
-rartHostName :: Lens' RedirectAllRequestsTo Text
-rartHostName = lens _rartHostName (\ s a -> s{_rartHostName = a});
-
-instance FromXML RedirectAllRequestsTo where
-        parseXML x
-          = RedirectAllRequestsTo' <$>
-              (x .@? "Protocol") <*> (x .@ "HostName")
-
-instance Hashable RedirectAllRequestsTo where
-
-instance NFData RedirectAllRequestsTo where
-
-instance ToXML RedirectAllRequestsTo where
-        toXML RedirectAllRequestsTo'{..}
-          = mconcat
-              ["Protocol" @= _rartProtocol,
-               "HostName" @= _rartHostName]
-
--- | Container for replication rules. You can add as many as 1,000 rules. Total replication configuration size can be up to 2 MB.
---
--- /See:/ 'replicationConfiguration' smart constructor.
-data ReplicationConfiguration = ReplicationConfiguration'
-  { _rcRole  :: !Text
-  , _rcRules :: ![ReplicationRule]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReplicationConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rcRole' - Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
---
--- * 'rcRules' - Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
-replicationConfiguration
-    :: Text -- ^ 'rcRole'
-    -> ReplicationConfiguration
-replicationConfiguration pRole_ =
-  ReplicationConfiguration' {_rcRole = pRole_, _rcRules = mempty}
-
-
--- | Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
-rcRole :: Lens' ReplicationConfiguration Text
-rcRole = lens _rcRole (\ s a -> s{_rcRole = a});
-
--- | Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
-rcRules :: Lens' ReplicationConfiguration [ReplicationRule]
-rcRules = lens _rcRules (\ s a -> s{_rcRules = a}) . _Coerce;
-
-instance FromXML ReplicationConfiguration where
-        parseXML x
-          = ReplicationConfiguration' <$>
-              (x .@ "Role") <*> (parseXMLList "Rule" x)
-
-instance Hashable ReplicationConfiguration where
-
-instance NFData ReplicationConfiguration where
-
-instance ToXML ReplicationConfiguration where
-        toXML ReplicationConfiguration'{..}
-          = mconcat
-              ["Role" @= _rcRole, toXMLList "Rule" _rcRules]
-
--- | Container for information about a particular replication rule.
---
--- /See:/ 'replicationRule' smart constructor.
-data ReplicationRule = ReplicationRule'
-  { _rrId                      :: !(Maybe Text)
-  , _rrSourceSelectionCriteria :: !(Maybe SourceSelectionCriteria)
-  , _rrPrefix                  :: !Text
-  , _rrStatus                  :: !ReplicationRuleStatus
-  , _rrDestination             :: !Destination
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReplicationRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
---
--- * 'rrSourceSelectionCriteria' - Container for filters that define which source objects should be replicated.
---
--- * 'rrPrefix' - Object keyname prefix identifying one or more objects to which the rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes are not supported.
---
--- * 'rrStatus' - The rule is ignored if status is not Enabled.
---
--- * 'rrDestination' - Container for replication destination information.
-replicationRule
-    :: Text -- ^ 'rrPrefix'
-    -> ReplicationRuleStatus -- ^ 'rrStatus'
-    -> Destination -- ^ 'rrDestination'
-    -> ReplicationRule
-replicationRule pPrefix_ pStatus_ pDestination_ =
-  ReplicationRule'
-  { _rrId = Nothing
-  , _rrSourceSelectionCriteria = Nothing
-  , _rrPrefix = pPrefix_
-  , _rrStatus = pStatus_
-  , _rrDestination = pDestination_
-  }
-
-
--- | Unique identifier for the rule. The value cannot be longer than 255 characters.
-rrId :: Lens' ReplicationRule (Maybe Text)
-rrId = lens _rrId (\ s a -> s{_rrId = a});
-
--- | Container for filters that define which source objects should be replicated.
-rrSourceSelectionCriteria :: Lens' ReplicationRule (Maybe SourceSelectionCriteria)
-rrSourceSelectionCriteria = lens _rrSourceSelectionCriteria (\ s a -> s{_rrSourceSelectionCriteria = a});
-
--- | Object keyname prefix identifying one or more objects to which the rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes are not supported.
-rrPrefix :: Lens' ReplicationRule Text
-rrPrefix = lens _rrPrefix (\ s a -> s{_rrPrefix = a});
-
--- | The rule is ignored if status is not Enabled.
-rrStatus :: Lens' ReplicationRule ReplicationRuleStatus
-rrStatus = lens _rrStatus (\ s a -> s{_rrStatus = a});
-
--- | Container for replication destination information.
-rrDestination :: Lens' ReplicationRule Destination
-rrDestination = lens _rrDestination (\ s a -> s{_rrDestination = a});
-
-instance FromXML ReplicationRule where
-        parseXML x
-          = ReplicationRule' <$>
-              (x .@? "ID") <*> (x .@? "SourceSelectionCriteria")
-                <*> (x .@ "Prefix")
-                <*> (x .@ "Status")
-                <*> (x .@ "Destination")
-
-instance Hashable ReplicationRule where
-
-instance NFData ReplicationRule where
-
-instance ToXML ReplicationRule where
-        toXML ReplicationRule'{..}
-          = mconcat
-              ["ID" @= _rrId,
-               "SourceSelectionCriteria" @=
-                 _rrSourceSelectionCriteria,
-               "Prefix" @= _rrPrefix, "Status" @= _rrStatus,
-               "Destination" @= _rrDestination]
-
--- | /See:/ 'requestPaymentConfiguration' smart constructor.
-newtype RequestPaymentConfiguration = RequestPaymentConfiguration'
-  { _rpcPayer :: Payer
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RequestPaymentConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rpcPayer' - Specifies who pays for the download and request fees.
-requestPaymentConfiguration
-    :: Payer -- ^ 'rpcPayer'
-    -> RequestPaymentConfiguration
-requestPaymentConfiguration pPayer_ =
-  RequestPaymentConfiguration' {_rpcPayer = pPayer_}
-
-
--- | Specifies who pays for the download and request fees.
-rpcPayer :: Lens' RequestPaymentConfiguration Payer
-rpcPayer = lens _rpcPayer (\ s a -> s{_rpcPayer = a});
-
-instance Hashable RequestPaymentConfiguration where
-
-instance NFData RequestPaymentConfiguration where
-
-instance ToXML RequestPaymentConfiguration where
-        toXML RequestPaymentConfiguration'{..}
-          = mconcat ["Payer" @= _rpcPayer]
-
--- | /See:/ 'restoreRequest' smart constructor.
-data RestoreRequest = RestoreRequest'
-  { _rrGlacierJobParameters :: !(Maybe GlacierJobParameters)
-  , _rrDays                 :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RestoreRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrGlacierJobParameters' - Glacier related prameters pertaining to this job.
---
--- * 'rrDays' - Lifetime of the active copy in days
-restoreRequest
-    :: Int -- ^ 'rrDays'
-    -> RestoreRequest
-restoreRequest pDays_ =
-  RestoreRequest' {_rrGlacierJobParameters = Nothing, _rrDays = pDays_}
-
-
--- | Glacier related prameters pertaining to this job.
-rrGlacierJobParameters :: Lens' RestoreRequest (Maybe GlacierJobParameters)
-rrGlacierJobParameters = lens _rrGlacierJobParameters (\ s a -> s{_rrGlacierJobParameters = a});
-
--- | Lifetime of the active copy in days
-rrDays :: Lens' RestoreRequest Int
-rrDays = lens _rrDays (\ s a -> s{_rrDays = a});
-
-instance Hashable RestoreRequest where
-
-instance NFData RestoreRequest where
-
-instance ToXML RestoreRequest where
-        toXML RestoreRequest'{..}
-          = mconcat
-              ["GlacierJobParameters" @= _rrGlacierJobParameters,
-               "Days" @= _rrDays]
-
--- | /See:/ 'routingRule' smart constructor.
-data RoutingRule = RoutingRule'
-  { _rrCondition :: !(Maybe Condition)
-  , _rrRedirect  :: !Redirect
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'RoutingRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrCondition' - A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the /docs folder, redirect to the /documents folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.
---
--- * 'rrRedirect' - Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can can specify a different error code to return.
-routingRule
-    :: Redirect -- ^ 'rrRedirect'
-    -> RoutingRule
-routingRule pRedirect_ =
-  RoutingRule' {_rrCondition = Nothing, _rrRedirect = pRedirect_}
-
-
--- | A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the /docs folder, redirect to the /documents folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.
-rrCondition :: Lens' RoutingRule (Maybe Condition)
-rrCondition = lens _rrCondition (\ s a -> s{_rrCondition = a});
-
--- | Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can can specify a different error code to return.
-rrRedirect :: Lens' RoutingRule Redirect
-rrRedirect = lens _rrRedirect (\ s a -> s{_rrRedirect = a});
-
-instance FromXML RoutingRule where
-        parseXML x
-          = RoutingRule' <$>
-              (x .@? "Condition") <*> (x .@ "Redirect")
-
-instance Hashable RoutingRule where
-
-instance NFData RoutingRule where
-
-instance ToXML RoutingRule where
-        toXML RoutingRule'{..}
-          = mconcat
-              ["Condition" @= _rrCondition,
-               "Redirect" @= _rrRedirect]
-
--- | Container for object key name prefix and suffix filtering rules.
---
--- /See:/ 's3KeyFilter' smart constructor.
-newtype S3KeyFilter = S3KeyFilter'
-  { _skfFilterRules :: Maybe [FilterRule]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'S3KeyFilter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'skfFilterRules' - Undocumented member.
-s3KeyFilter
-    :: S3KeyFilter
-s3KeyFilter = S3KeyFilter' {_skfFilterRules = Nothing}
-
-
--- | Undocumented member.
-skfFilterRules :: Lens' S3KeyFilter [FilterRule]
-skfFilterRules = lens _skfFilterRules (\ s a -> s{_skfFilterRules = a}) . _Default . _Coerce;
-
-instance FromXML S3KeyFilter where
-        parseXML x
-          = S3KeyFilter' <$>
-              (may (parseXMLList "FilterRule") x)
-
-instance Hashable S3KeyFilter where
-
-instance NFData S3KeyFilter where
-
-instance ToXML S3KeyFilter where
-        toXML S3KeyFilter'{..}
-          = mconcat
-              [toXML (toXMLList "FilterRule" <$> _skfFilterRules)]
-
--- | /See:/ 's3ServiceError' smart constructor.
-data S3ServiceError = S3ServiceError'
-  { _sseVersionId :: !(Maybe ObjectVersionId)
-  , _sseKey       :: !(Maybe ObjectKey)
-  , _sseCode      :: !(Maybe Text)
-  , _sseMessage   :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'S3ServiceError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sseVersionId' - Undocumented member.
---
--- * 'sseKey' - Undocumented member.
---
--- * 'sseCode' - Undocumented member.
---
--- * 'sseMessage' - Undocumented member.
-s3ServiceError
-    :: S3ServiceError
-s3ServiceError =
-  S3ServiceError'
-  { _sseVersionId = Nothing
-  , _sseKey = Nothing
-  , _sseCode = Nothing
-  , _sseMessage = Nothing
-  }
-
-
--- | Undocumented member.
-sseVersionId :: Lens' S3ServiceError (Maybe ObjectVersionId)
-sseVersionId = lens _sseVersionId (\ s a -> s{_sseVersionId = a});
-
--- | Undocumented member.
-sseKey :: Lens' S3ServiceError (Maybe ObjectKey)
-sseKey = lens _sseKey (\ s a -> s{_sseKey = a});
-
--- | Undocumented member.
-sseCode :: Lens' S3ServiceError (Maybe Text)
-sseCode = lens _sseCode (\ s a -> s{_sseCode = a});
-
--- | Undocumented member.
-sseMessage :: Lens' S3ServiceError (Maybe Text)
-sseMessage = lens _sseMessage (\ s a -> s{_sseMessage = a});
-
-instance FromXML S3ServiceError where
-        parseXML x
-          = S3ServiceError' <$>
-              (x .@? "VersionId") <*> (x .@? "Key") <*>
-                (x .@? "Code")
-                <*> (x .@? "Message")
-
-instance Hashable S3ServiceError where
-
-instance NFData S3ServiceError where
-
--- | Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
---
--- /See:/ 'sSEKMS' smart constructor.
-newtype SSEKMS = SSEKMS'
-  { _ssekKeyId :: Sensitive Text
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SSEKMS' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssekKeyId' - Specifies the ID of the AWS Key Management Service (KMS) master encryption key to use for encrypting Inventory reports.
-sSEKMS
-    :: Text -- ^ 'ssekKeyId'
-    -> SSEKMS
-sSEKMS pKeyId_ = SSEKMS' {_ssekKeyId = _Sensitive # pKeyId_}
-
-
--- | Specifies the ID of the AWS Key Management Service (KMS) master encryption key to use for encrypting Inventory reports.
-ssekKeyId :: Lens' SSEKMS Text
-ssekKeyId = lens _ssekKeyId (\ s a -> s{_ssekKeyId = a}) . _Sensitive;
-
-instance FromXML SSEKMS where
-        parseXML x = SSEKMS' <$> (x .@ "KeyId")
-
-instance Hashable SSEKMS where
-
-instance NFData SSEKMS where
-
-instance ToXML SSEKMS where
-        toXML SSEKMS'{..} = mconcat ["KeyId" @= _ssekKeyId]
-
--- | Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
---
--- /See:/ 'sSES3' smart constructor.
-data SSES3 =
-  SSES3'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SSES3' with the minimum fields required to make a request.
---
-sSES3
-    :: SSES3
-sSES3 = SSES3'
-
-
-instance FromXML SSES3 where
-        parseXML = const (pure SSES3')
-
-instance Hashable SSES3 where
-
-instance NFData SSES3 where
-
-instance ToXML SSES3 where
-        toXML = const mempty
-
--- | Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
---
--- /See:/ 'serverSideEncryptionByDefault' smart constructor.
-data ServerSideEncryptionByDefault = ServerSideEncryptionByDefault'
-  { _ssebdKMSMasterKeyId :: !(Maybe (Sensitive Text))
-  , _ssebdSSEAlgorithm   :: !ServerSideEncryption
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ServerSideEncryptionByDefault' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssebdKMSMasterKeyId' - KMS master key ID to use for the default encryption. This parameter is allowed if SSEAlgorithm is aws:kms.
---
--- * 'ssebdSSEAlgorithm' - Server-side encryption algorithm to use for the default encryption.
-serverSideEncryptionByDefault
-    :: ServerSideEncryption -- ^ 'ssebdSSEAlgorithm'
-    -> ServerSideEncryptionByDefault
-serverSideEncryptionByDefault pSSEAlgorithm_ =
-  ServerSideEncryptionByDefault'
-  {_ssebdKMSMasterKeyId = Nothing, _ssebdSSEAlgorithm = pSSEAlgorithm_}
-
-
--- | KMS master key ID to use for the default encryption. This parameter is allowed if SSEAlgorithm is aws:kms.
-ssebdKMSMasterKeyId :: Lens' ServerSideEncryptionByDefault (Maybe Text)
-ssebdKMSMasterKeyId = lens _ssebdKMSMasterKeyId (\ s a -> s{_ssebdKMSMasterKeyId = a}) . mapping _Sensitive;
-
--- | Server-side encryption algorithm to use for the default encryption.
-ssebdSSEAlgorithm :: Lens' ServerSideEncryptionByDefault ServerSideEncryption
-ssebdSSEAlgorithm = lens _ssebdSSEAlgorithm (\ s a -> s{_ssebdSSEAlgorithm = a});
-
-instance FromXML ServerSideEncryptionByDefault where
-        parseXML x
-          = ServerSideEncryptionByDefault' <$>
-              (x .@? "KMSMasterKeyID") <*> (x .@ "SSEAlgorithm")
-
-instance Hashable ServerSideEncryptionByDefault where
-
-instance NFData ServerSideEncryptionByDefault where
-
-instance ToXML ServerSideEncryptionByDefault where
-        toXML ServerSideEncryptionByDefault'{..}
-          = mconcat
-              ["KMSMasterKeyID" @= _ssebdKMSMasterKeyId,
-               "SSEAlgorithm" @= _ssebdSSEAlgorithm]
-
--- | Container for server-side encryption configuration rules. Currently S3 supports one rule only.
---
--- /See:/ 'serverSideEncryptionConfiguration' smart constructor.
-newtype ServerSideEncryptionConfiguration = ServerSideEncryptionConfiguration'
-  { _ssecRules :: [ServerSideEncryptionRule]
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ServerSideEncryptionConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssecRules' - Container for information about a particular server-side encryption configuration rule.
-serverSideEncryptionConfiguration
-    :: ServerSideEncryptionConfiguration
-serverSideEncryptionConfiguration =
-  ServerSideEncryptionConfiguration' {_ssecRules = mempty}
-
-
--- | Container for information about a particular server-side encryption configuration rule.
-ssecRules :: Lens' ServerSideEncryptionConfiguration [ServerSideEncryptionRule]
-ssecRules = lens _ssecRules (\ s a -> s{_ssecRules = a}) . _Coerce;
-
-instance FromXML ServerSideEncryptionConfiguration
-         where
-        parseXML x
-          = ServerSideEncryptionConfiguration' <$>
-              (parseXMLList "Rule" x)
-
-instance Hashable ServerSideEncryptionConfiguration
-         where
-
-instance NFData ServerSideEncryptionConfiguration
-         where
-
-instance ToXML ServerSideEncryptionConfiguration
-         where
-        toXML ServerSideEncryptionConfiguration'{..}
-          = mconcat [toXMLList "Rule" _ssecRules]
-
--- | Container for information about a particular server-side encryption configuration rule.
---
--- /See:/ 'serverSideEncryptionRule' smart constructor.
-newtype ServerSideEncryptionRule = ServerSideEncryptionRule'
-  { _sserApplyServerSideEncryptionByDefault :: Maybe ServerSideEncryptionByDefault
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ServerSideEncryptionRule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sserApplyServerSideEncryptionByDefault' - Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
-serverSideEncryptionRule
-    :: ServerSideEncryptionRule
-serverSideEncryptionRule =
-  ServerSideEncryptionRule' {_sserApplyServerSideEncryptionByDefault = Nothing}
-
-
--- | Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
-sserApplyServerSideEncryptionByDefault :: Lens' ServerSideEncryptionRule (Maybe ServerSideEncryptionByDefault)
-sserApplyServerSideEncryptionByDefault = lens _sserApplyServerSideEncryptionByDefault (\ s a -> s{_sserApplyServerSideEncryptionByDefault = a});
-
-instance FromXML ServerSideEncryptionRule where
-        parseXML x
-          = ServerSideEncryptionRule' <$>
-              (x .@? "ApplyServerSideEncryptionByDefault")
-
-instance Hashable ServerSideEncryptionRule where
-
-instance NFData ServerSideEncryptionRule where
-
-instance ToXML ServerSideEncryptionRule where
-        toXML ServerSideEncryptionRule'{..}
-          = mconcat
-              ["ApplyServerSideEncryptionByDefault" @=
-                 _sserApplyServerSideEncryptionByDefault]
-
--- | Container for filters that define which source objects should be replicated.
---
--- /See:/ 'sourceSelectionCriteria' smart constructor.
-newtype SourceSelectionCriteria = SourceSelectionCriteria'
-  { _sscSseKMSEncryptedObjects :: Maybe SseKMSEncryptedObjects
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SourceSelectionCriteria' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sscSseKMSEncryptedObjects' - Container for filter information of selection of KMS Encrypted S3 objects.
-sourceSelectionCriteria
-    :: SourceSelectionCriteria
-sourceSelectionCriteria =
-  SourceSelectionCriteria' {_sscSseKMSEncryptedObjects = Nothing}
-
-
--- | Container for filter information of selection of KMS Encrypted S3 objects.
-sscSseKMSEncryptedObjects :: Lens' SourceSelectionCriteria (Maybe SseKMSEncryptedObjects)
-sscSseKMSEncryptedObjects = lens _sscSseKMSEncryptedObjects (\ s a -> s{_sscSseKMSEncryptedObjects = a});
-
-instance FromXML SourceSelectionCriteria where
-        parseXML x
-          = SourceSelectionCriteria' <$>
-              (x .@? "SseKmsEncryptedObjects")
-
-instance Hashable SourceSelectionCriteria where
-
-instance NFData SourceSelectionCriteria where
-
-instance ToXML SourceSelectionCriteria where
-        toXML SourceSelectionCriteria'{..}
-          = mconcat
-              ["SseKmsEncryptedObjects" @=
-                 _sscSseKMSEncryptedObjects]
-
--- | Container for filter information of selection of KMS Encrypted S3 objects.
---
--- /See:/ 'sseKMSEncryptedObjects' smart constructor.
-newtype SseKMSEncryptedObjects = SseKMSEncryptedObjects'
-  { _skeoStatus :: SseKMSEncryptedObjectsStatus
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SseKMSEncryptedObjects' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'skeoStatus' - The replication for KMS encrypted S3 objects is disabled if status is not Enabled.
-sseKMSEncryptedObjects
-    :: SseKMSEncryptedObjectsStatus -- ^ 'skeoStatus'
-    -> SseKMSEncryptedObjects
-sseKMSEncryptedObjects pStatus_ =
-  SseKMSEncryptedObjects' {_skeoStatus = pStatus_}
-
-
--- | The replication for KMS encrypted S3 objects is disabled if status is not Enabled.
-skeoStatus :: Lens' SseKMSEncryptedObjects SseKMSEncryptedObjectsStatus
-skeoStatus = lens _skeoStatus (\ s a -> s{_skeoStatus = a});
-
-instance FromXML SseKMSEncryptedObjects where
-        parseXML x
-          = SseKMSEncryptedObjects' <$> (x .@ "Status")
-
-instance Hashable SseKMSEncryptedObjects where
-
-instance NFData SseKMSEncryptedObjects where
-
-instance ToXML SseKMSEncryptedObjects where
-        toXML SseKMSEncryptedObjects'{..}
-          = mconcat ["Status" @= _skeoStatus]
-
--- | /See:/ 'storageClassAnalysis' smart constructor.
-newtype StorageClassAnalysis = StorageClassAnalysis'
-  { _scaDataExport :: Maybe StorageClassAnalysisDataExport
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StorageClassAnalysis' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scaDataExport' - A container used to describe how data related to the storage class analysis should be exported.
-storageClassAnalysis
-    :: StorageClassAnalysis
-storageClassAnalysis = StorageClassAnalysis' {_scaDataExport = Nothing}
-
-
--- | A container used to describe how data related to the storage class analysis should be exported.
-scaDataExport :: Lens' StorageClassAnalysis (Maybe StorageClassAnalysisDataExport)
-scaDataExport = lens _scaDataExport (\ s a -> s{_scaDataExport = a});
-
-instance FromXML StorageClassAnalysis where
-        parseXML x
-          = StorageClassAnalysis' <$> (x .@? "DataExport")
-
-instance Hashable StorageClassAnalysis where
-
-instance NFData StorageClassAnalysis where
-
-instance ToXML StorageClassAnalysis where
-        toXML StorageClassAnalysis'{..}
-          = mconcat ["DataExport" @= _scaDataExport]
-
--- | /See:/ 'storageClassAnalysisDataExport' smart constructor.
-data StorageClassAnalysisDataExport = StorageClassAnalysisDataExport'
-  { _scadeOutputSchemaVersion :: !StorageClassAnalysisSchemaVersion
-  , _scadeDestination         :: !AnalyticsExportDestination
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StorageClassAnalysisDataExport' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scadeOutputSchemaVersion' - The version of the output schema to use when exporting data. Must be V_1.
---
--- * 'scadeDestination' - The place to store the data for an analysis.
-storageClassAnalysisDataExport
-    :: StorageClassAnalysisSchemaVersion -- ^ 'scadeOutputSchemaVersion'
-    -> AnalyticsExportDestination -- ^ 'scadeDestination'
-    -> StorageClassAnalysisDataExport
-storageClassAnalysisDataExport pOutputSchemaVersion_ pDestination_ =
-  StorageClassAnalysisDataExport'
-  { _scadeOutputSchemaVersion = pOutputSchemaVersion_
-  , _scadeDestination = pDestination_
-  }
-
-
--- | The version of the output schema to use when exporting data. Must be V_1.
-scadeOutputSchemaVersion :: Lens' StorageClassAnalysisDataExport StorageClassAnalysisSchemaVersion
-scadeOutputSchemaVersion = lens _scadeOutputSchemaVersion (\ s a -> s{_scadeOutputSchemaVersion = a});
-
--- | The place to store the data for an analysis.
-scadeDestination :: Lens' StorageClassAnalysisDataExport AnalyticsExportDestination
-scadeDestination = lens _scadeDestination (\ s a -> s{_scadeDestination = a});
-
-instance FromXML StorageClassAnalysisDataExport where
-        parseXML x
-          = StorageClassAnalysisDataExport' <$>
-              (x .@ "OutputSchemaVersion") <*> (x .@ "Destination")
-
-instance Hashable StorageClassAnalysisDataExport
-         where
-
-instance NFData StorageClassAnalysisDataExport where
-
-instance ToXML StorageClassAnalysisDataExport where
-        toXML StorageClassAnalysisDataExport'{..}
-          = mconcat
-              ["OutputSchemaVersion" @= _scadeOutputSchemaVersion,
-               "Destination" @= _scadeDestination]
-
--- | /See:/ 'tag' smart constructor.
-data Tag = Tag'
-  { _tagKey   :: !ObjectKey
-  , _tagValue :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Tag' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tagKey' - Name of the tag.
---
--- * 'tagValue' - Value of the tag.
-tag
-    :: ObjectKey -- ^ 'tagKey'
-    -> Text -- ^ 'tagValue'
-    -> Tag
-tag pKey_ pValue_ = Tag' {_tagKey = pKey_, _tagValue = pValue_}
-
-
--- | Name of the tag.
-tagKey :: Lens' Tag ObjectKey
-tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
-
--- | Value of the tag.
-tagValue :: Lens' Tag Text
-tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
-
-instance FromXML Tag where
-        parseXML x = Tag' <$> (x .@ "Key") <*> (x .@ "Value")
-
-instance Hashable Tag where
-
-instance NFData Tag where
-
-instance ToXML Tag where
-        toXML Tag'{..}
-          = mconcat ["Key" @= _tagKey, "Value" @= _tagValue]
-
--- | /See:/ 'tagging' smart constructor.
-newtype Tagging = Tagging'
-  { _tTagSet :: [Tag]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Tagging' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tTagSet' - Undocumented member.
-tagging
-    :: Tagging
-tagging = Tagging' {_tTagSet = mempty}
-
-
--- | Undocumented member.
-tTagSet :: Lens' Tagging [Tag]
-tTagSet = lens _tTagSet (\ s a -> s{_tTagSet = a}) . _Coerce;
-
-instance Hashable Tagging where
-
-instance NFData Tagging where
-
-instance ToXML Tagging where
-        toXML Tagging'{..}
-          = mconcat ["TagSet" @= toXMLList "Tag" _tTagSet]
-
--- | /See:/ 'targetGrant' smart constructor.
-data TargetGrant = TargetGrant'
-  { _tgPermission :: !(Maybe BucketLogsPermission)
-  , _tgGrantee    :: !(Maybe Grantee)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TargetGrant' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tgPermission' - Logging permissions assigned to the Grantee for the bucket.
---
--- * 'tgGrantee' - Undocumented member.
-targetGrant
-    :: TargetGrant
-targetGrant = TargetGrant' {_tgPermission = Nothing, _tgGrantee = Nothing}
-
-
--- | Logging permissions assigned to the Grantee for the bucket.
-tgPermission :: Lens' TargetGrant (Maybe BucketLogsPermission)
-tgPermission = lens _tgPermission (\ s a -> s{_tgPermission = a});
-
--- | Undocumented member.
-tgGrantee :: Lens' TargetGrant (Maybe Grantee)
-tgGrantee = lens _tgGrantee (\ s a -> s{_tgGrantee = a});
-
-instance FromXML TargetGrant where
-        parseXML x
-          = TargetGrant' <$>
-              (x .@? "Permission") <*> (x .@? "Grantee")
-
-instance Hashable TargetGrant where
-
-instance NFData TargetGrant where
-
-instance ToXML TargetGrant where
-        toXML TargetGrant'{..}
-          = mconcat
-              ["Permission" @= _tgPermission,
-               "Grantee" @= _tgGrantee]
-
--- | Container for specifying the configuration when you want Amazon S3 to publish events to an Amazon Simple Notification Service (Amazon SNS) topic.
---
--- /See:/ 'topicConfiguration' smart constructor.
-data TopicConfiguration = TopicConfiguration'
-  { _tcId       :: !(Maybe Text)
-  , _tcFilter   :: !(Maybe NotificationConfigurationFilter)
-  , _tcTopicARN :: !Text
-  , _tcEvents   :: ![Event]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TopicConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tcId' - Undocumented member.
---
--- * 'tcFilter' - Undocumented member.
---
--- * 'tcTopicARN' - Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
---
--- * 'tcEvents' - Undocumented member.
-topicConfiguration
-    :: Text -- ^ 'tcTopicARN'
-    -> TopicConfiguration
-topicConfiguration pTopicARN_ =
-  TopicConfiguration'
-  { _tcId = Nothing
-  , _tcFilter = Nothing
-  , _tcTopicARN = pTopicARN_
-  , _tcEvents = mempty
-  }
-
-
--- | Undocumented member.
-tcId :: Lens' TopicConfiguration (Maybe Text)
-tcId = lens _tcId (\ s a -> s{_tcId = a});
-
--- | Undocumented member.
-tcFilter :: Lens' TopicConfiguration (Maybe NotificationConfigurationFilter)
-tcFilter = lens _tcFilter (\ s a -> s{_tcFilter = a});
-
--- | Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
-tcTopicARN :: Lens' TopicConfiguration Text
-tcTopicARN = lens _tcTopicARN (\ s a -> s{_tcTopicARN = a});
-
--- | Undocumented member.
-tcEvents :: Lens' TopicConfiguration [Event]
-tcEvents = lens _tcEvents (\ s a -> s{_tcEvents = a}) . _Coerce;
-
-instance FromXML TopicConfiguration where
-        parseXML x
-          = TopicConfiguration' <$>
-              (x .@? "Id") <*> (x .@? "Filter") <*> (x .@ "Topic")
-                <*> (parseXMLList "Event" x)
-
-instance Hashable TopicConfiguration where
-
-instance NFData TopicConfiguration where
-
-instance ToXML TopicConfiguration where
-        toXML TopicConfiguration'{..}
-          = mconcat
-              ["Id" @= _tcId, "Filter" @= _tcFilter,
-               "Topic" @= _tcTopicARN, toXMLList "Event" _tcEvents]
-
--- | /See:/ 'transition' smart constructor.
-data Transition = Transition'
-  { _tDays         :: !(Maybe Int)
-  , _tDate         :: !(Maybe RFC822)
-  , _tStorageClass :: !(Maybe TransitionStorageClass)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Transition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tDays' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
---
--- * 'tDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
---
--- * 'tStorageClass' - The class of storage used to store the object.
-transition
-    :: Transition
-transition =
-  Transition' {_tDays = Nothing, _tDate = Nothing, _tStorageClass = Nothing}
-
-
--- | Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
-tDays :: Lens' Transition (Maybe Int)
-tDays = lens _tDays (\ s a -> s{_tDays = a});
-
--- | Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
-tDate :: Lens' Transition (Maybe UTCTime)
-tDate = lens _tDate (\ s a -> s{_tDate = a}) . mapping _Time;
-
--- | The class of storage used to store the object.
-tStorageClass :: Lens' Transition (Maybe TransitionStorageClass)
-tStorageClass = lens _tStorageClass (\ s a -> s{_tStorageClass = a});
-
-instance FromXML Transition where
-        parseXML x
-          = Transition' <$>
-              (x .@? "Days") <*> (x .@? "Date") <*>
-                (x .@? "StorageClass")
-
-instance Hashable Transition where
-
-instance NFData Transition where
-
-instance ToXML Transition where
-        toXML Transition'{..}
-          = mconcat
-              ["Days" @= _tDays, "Date" @= _tDate,
-               "StorageClass" @= _tStorageClass]
-
--- | /See:/ 'versioningConfiguration' smart constructor.
-data VersioningConfiguration = VersioningConfiguration'
-  { _vcStatus    :: !(Maybe BucketVersioningStatus)
-  , _vcMFADelete :: !(Maybe MFADelete)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'VersioningConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcStatus' - The versioning state of the bucket.
---
--- * 'vcMFADelete' - Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
-versioningConfiguration
-    :: VersioningConfiguration
-versioningConfiguration =
-  VersioningConfiguration' {_vcStatus = Nothing, _vcMFADelete = Nothing}
-
-
--- | The versioning state of the bucket.
-vcStatus :: Lens' VersioningConfiguration (Maybe BucketVersioningStatus)
-vcStatus = lens _vcStatus (\ s a -> s{_vcStatus = a});
-
--- | Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
-vcMFADelete :: Lens' VersioningConfiguration (Maybe MFADelete)
-vcMFADelete = lens _vcMFADelete (\ s a -> s{_vcMFADelete = a});
-
-instance Hashable VersioningConfiguration where
-
-instance NFData VersioningConfiguration where
-
-instance ToXML VersioningConfiguration where
-        toXML VersioningConfiguration'{..}
-          = mconcat
-              ["Status" @= _vcStatus, "MfaDelete" @= _vcMFADelete]
-
--- | /See:/ 'websiteConfiguration' smart constructor.
-data WebsiteConfiguration = WebsiteConfiguration'
-  { _wcRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
-  , _wcErrorDocument         :: !(Maybe ErrorDocument)
-  , _wcIndexDocument         :: !(Maybe IndexDocument)
-  , _wcRoutingRules          :: !(Maybe [RoutingRule])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'WebsiteConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'wcRedirectAllRequestsTo' - Undocumented member.
---
--- * 'wcErrorDocument' - Undocumented member.
---
--- * 'wcIndexDocument' - Undocumented member.
---
--- * 'wcRoutingRules' - Undocumented member.
-websiteConfiguration
-    :: WebsiteConfiguration
-websiteConfiguration =
-  WebsiteConfiguration'
-  { _wcRedirectAllRequestsTo = Nothing
-  , _wcErrorDocument = Nothing
-  , _wcIndexDocument = Nothing
-  , _wcRoutingRules = Nothing
-  }
-
-
--- | Undocumented member.
-wcRedirectAllRequestsTo :: Lens' WebsiteConfiguration (Maybe RedirectAllRequestsTo)
-wcRedirectAllRequestsTo = lens _wcRedirectAllRequestsTo (\ s a -> s{_wcRedirectAllRequestsTo = a});
-
--- | Undocumented member.
-wcErrorDocument :: Lens' WebsiteConfiguration (Maybe ErrorDocument)
-wcErrorDocument = lens _wcErrorDocument (\ s a -> s{_wcErrorDocument = a});
-
--- | Undocumented member.
-wcIndexDocument :: Lens' WebsiteConfiguration (Maybe IndexDocument)
-wcIndexDocument = lens _wcIndexDocument (\ s a -> s{_wcIndexDocument = a});
-
--- | Undocumented member.
-wcRoutingRules :: Lens' WebsiteConfiguration [RoutingRule]
-wcRoutingRules = lens _wcRoutingRules (\ s a -> s{_wcRoutingRules = a}) . _Default . _Coerce;
+-- Copyright   : (c) 2013-2018 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.S3.Types.Product where
+
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.S3.Internal
+import Network.AWS.S3.Types.Sum
+
+-- | Specifies the days since the initiation of an Incomplete Multipart Upload that Lifecycle will wait before permanently removing all parts of the upload.
+--
+-- /See:/ 'abortIncompleteMultipartUpload' smart constructor.
+newtype AbortIncompleteMultipartUpload = AbortIncompleteMultipartUpload'
+  { _aimuDaysAfterInitiation :: Maybe Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AbortIncompleteMultipartUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aimuDaysAfterInitiation' - Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
+abortIncompleteMultipartUpload
+    :: AbortIncompleteMultipartUpload
+abortIncompleteMultipartUpload =
+  AbortIncompleteMultipartUpload' {_aimuDaysAfterInitiation = Nothing}
+
+
+-- | Indicates the number of days that must pass since initiation for Lifecycle to abort an Incomplete Multipart Upload.
+aimuDaysAfterInitiation :: Lens' AbortIncompleteMultipartUpload (Maybe Int)
+aimuDaysAfterInitiation = lens _aimuDaysAfterInitiation (\ s a -> s{_aimuDaysAfterInitiation = a})
+
+instance FromXML AbortIncompleteMultipartUpload where
+        parseXML x
+          = AbortIncompleteMultipartUpload' <$>
+              (x .@? "DaysAfterInitiation")
+
+instance Hashable AbortIncompleteMultipartUpload
+         where
+
+instance NFData AbortIncompleteMultipartUpload where
+
+instance ToXML AbortIncompleteMultipartUpload where
+        toXML AbortIncompleteMultipartUpload'{..}
+          = mconcat
+              ["DaysAfterInitiation" @= _aimuDaysAfterInitiation]
+
+-- | /See:/ 'accelerateConfiguration' smart constructor.
+newtype AccelerateConfiguration = AccelerateConfiguration'
+  { _acStatus :: Maybe BucketAccelerateStatus
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AccelerateConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acStatus' - The accelerate configuration of the bucket.
+accelerateConfiguration
+    :: AccelerateConfiguration
+accelerateConfiguration = AccelerateConfiguration' {_acStatus = Nothing}
+
+
+-- | The accelerate configuration of the bucket.
+acStatus :: Lens' AccelerateConfiguration (Maybe BucketAccelerateStatus)
+acStatus = lens _acStatus (\ s a -> s{_acStatus = a})
+
+instance Hashable AccelerateConfiguration where
+
+instance NFData AccelerateConfiguration where
+
+instance ToXML AccelerateConfiguration where
+        toXML AccelerateConfiguration'{..}
+          = mconcat ["Status" @= _acStatus]
+
+-- | /See:/ 'accessControlPolicy' smart constructor.
+data AccessControlPolicy = AccessControlPolicy'
+  { _acpGrants :: !(Maybe [Grant])
+  , _acpOwner  :: !(Maybe Owner)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AccessControlPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acpGrants' - A list of grants.
+--
+-- * 'acpOwner' - Undocumented member.
+accessControlPolicy
+    :: AccessControlPolicy
+accessControlPolicy =
+  AccessControlPolicy' {_acpGrants = Nothing, _acpOwner = Nothing}
+
+
+-- | A list of grants.
+acpGrants :: Lens' AccessControlPolicy [Grant]
+acpGrants = lens _acpGrants (\ s a -> s{_acpGrants = a}) . _Default . _Coerce
+
+-- | Undocumented member.
+acpOwner :: Lens' AccessControlPolicy (Maybe Owner)
+acpOwner = lens _acpOwner (\ s a -> s{_acpOwner = a})
+
+instance Hashable AccessControlPolicy where
+
+instance NFData AccessControlPolicy where
+
+instance ToXML AccessControlPolicy where
+        toXML AccessControlPolicy'{..}
+          = mconcat
+              ["AccessControlList" @=
+                 toXML (toXMLList "Grant" <$> _acpGrants),
+               "Owner" @= _acpOwner]
+
+-- | Container for information regarding the access control for replicas.
+--
+-- /See:/ 'accessControlTranslation' smart constructor.
+newtype AccessControlTranslation = AccessControlTranslation'
+  { _actOwner :: OwnerOverride
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AccessControlTranslation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'actOwner' - The override value for the owner of the replica object.
+accessControlTranslation
+    :: OwnerOverride -- ^ 'actOwner'
+    -> AccessControlTranslation
+accessControlTranslation pOwner_ =
+  AccessControlTranslation' {_actOwner = pOwner_}
+
+
+-- | The override value for the owner of the replica object.
+actOwner :: Lens' AccessControlTranslation OwnerOverride
+actOwner = lens _actOwner (\ s a -> s{_actOwner = a})
+
+instance FromXML AccessControlTranslation where
+        parseXML x
+          = AccessControlTranslation' <$> (x .@ "Owner")
+
+instance Hashable AccessControlTranslation where
+
+instance NFData AccessControlTranslation where
+
+instance ToXML AccessControlTranslation where
+        toXML AccessControlTranslation'{..}
+          = mconcat ["Owner" @= _actOwner]
+
+-- | /See:/ 'analyticsAndOperator' smart constructor.
+data AnalyticsAndOperator = AnalyticsAndOperator'
+  { _aaoPrefix :: !(Maybe Text)
+  , _aaoTags   :: !(Maybe [Tag])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaoPrefix' - The prefix to use when evaluating an AND predicate.
+--
+-- * 'aaoTags' - The list of tags to use when evaluating an AND predicate.
+analyticsAndOperator
+    :: AnalyticsAndOperator
+analyticsAndOperator =
+  AnalyticsAndOperator' {_aaoPrefix = Nothing, _aaoTags = Nothing}
+
+
+-- | The prefix to use when evaluating an AND predicate.
+aaoPrefix :: Lens' AnalyticsAndOperator (Maybe Text)
+aaoPrefix = lens _aaoPrefix (\ s a -> s{_aaoPrefix = a})
+
+-- | The list of tags to use when evaluating an AND predicate.
+aaoTags :: Lens' AnalyticsAndOperator [Tag]
+aaoTags = lens _aaoTags (\ s a -> s{_aaoTags = a}) . _Default . _Coerce
+
+instance FromXML AnalyticsAndOperator where
+        parseXML x
+          = AnalyticsAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable AnalyticsAndOperator where
+
+instance NFData AnalyticsAndOperator where
+
+instance ToXML AnalyticsAndOperator where
+        toXML AnalyticsAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _aaoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _aaoTags)]
+
+-- | /See:/ 'analyticsConfiguration' smart constructor.
+data AnalyticsConfiguration = AnalyticsConfiguration'
+  { _acFilter               :: !(Maybe AnalyticsFilter)
+  , _acId                   :: !Text
+  , _acStorageClassAnalysis :: !StorageClassAnalysis
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acFilter' - The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
+--
+-- * 'acId' - The identifier used to represent an analytics configuration.
+--
+-- * 'acStorageClassAnalysis' - If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
+analyticsConfiguration
+    :: Text -- ^ 'acId'
+    -> StorageClassAnalysis -- ^ 'acStorageClassAnalysis'
+    -> AnalyticsConfiguration
+analyticsConfiguration pId_ pStorageClassAnalysis_ =
+  AnalyticsConfiguration'
+    { _acFilter = Nothing
+    , _acId = pId_
+    , _acStorageClassAnalysis = pStorageClassAnalysis_
+    }
+
+
+-- | The filter used to describe a set of objects for analyses. A filter must have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator). If no filter is provided, all objects will be considered in any analysis.
+acFilter :: Lens' AnalyticsConfiguration (Maybe AnalyticsFilter)
+acFilter = lens _acFilter (\ s a -> s{_acFilter = a})
+
+-- | The identifier used to represent an analytics configuration.
+acId :: Lens' AnalyticsConfiguration Text
+acId = lens _acId (\ s a -> s{_acId = a})
+
+-- | If present, it indicates that data related to access patterns will be collected and made available to analyze the tradeoffs between different storage classes.
+acStorageClassAnalysis :: Lens' AnalyticsConfiguration StorageClassAnalysis
+acStorageClassAnalysis = lens _acStorageClassAnalysis (\ s a -> s{_acStorageClassAnalysis = a})
+
+instance FromXML AnalyticsConfiguration where
+        parseXML x
+          = AnalyticsConfiguration' <$>
+              (x .@? "Filter") <*> (x .@ "Id") <*>
+                (x .@ "StorageClassAnalysis")
+
+instance Hashable AnalyticsConfiguration where
+
+instance NFData AnalyticsConfiguration where
+
+instance ToXML AnalyticsConfiguration where
+        toXML AnalyticsConfiguration'{..}
+          = mconcat
+              ["Filter" @= _acFilter, "Id" @= _acId,
+               "StorageClassAnalysis" @= _acStorageClassAnalysis]
+
+-- | /See:/ 'analyticsExportDestination' smart constructor.
+newtype AnalyticsExportDestination = AnalyticsExportDestination'
+  { _aedS3BucketDestination :: AnalyticsS3BucketDestination
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsExportDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aedS3BucketDestination' - A destination signifying output to an S3 bucket.
+analyticsExportDestination
+    :: AnalyticsS3BucketDestination -- ^ 'aedS3BucketDestination'
+    -> AnalyticsExportDestination
+analyticsExportDestination pS3BucketDestination_ =
+  AnalyticsExportDestination' {_aedS3BucketDestination = pS3BucketDestination_}
+
+
+-- | A destination signifying output to an S3 bucket.
+aedS3BucketDestination :: Lens' AnalyticsExportDestination AnalyticsS3BucketDestination
+aedS3BucketDestination = lens _aedS3BucketDestination (\ s a -> s{_aedS3BucketDestination = a})
+
+instance FromXML AnalyticsExportDestination where
+        parseXML x
+          = AnalyticsExportDestination' <$>
+              (x .@ "S3BucketDestination")
+
+instance Hashable AnalyticsExportDestination where
+
+instance NFData AnalyticsExportDestination where
+
+instance ToXML AnalyticsExportDestination where
+        toXML AnalyticsExportDestination'{..}
+          = mconcat
+              ["S3BucketDestination" @= _aedS3BucketDestination]
+
+-- | /See:/ 'analyticsFilter' smart constructor.
+data AnalyticsFilter = AnalyticsFilter'
+  { _afTag    :: !(Maybe Tag)
+  , _afPrefix :: !(Maybe Text)
+  , _afAnd    :: !(Maybe AnalyticsAndOperator)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'afTag' - The tag to use when evaluating an analytics filter.
+--
+-- * 'afPrefix' - The prefix to use when evaluating an analytics filter.
+--
+-- * 'afAnd' - A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
+analyticsFilter
+    :: AnalyticsFilter
+analyticsFilter =
+  AnalyticsFilter' {_afTag = Nothing, _afPrefix = Nothing, _afAnd = Nothing}
+
+
+-- | The tag to use when evaluating an analytics filter.
+afTag :: Lens' AnalyticsFilter (Maybe Tag)
+afTag = lens _afTag (\ s a -> s{_afTag = a})
+
+-- | The prefix to use when evaluating an analytics filter.
+afPrefix :: Lens' AnalyticsFilter (Maybe Text)
+afPrefix = lens _afPrefix (\ s a -> s{_afPrefix = a})
+
+-- | A conjunction (logical AND) of predicates, which is used in evaluating an analytics filter. The operator must have at least two predicates.
+afAnd :: Lens' AnalyticsFilter (Maybe AnalyticsAndOperator)
+afAnd = lens _afAnd (\ s a -> s{_afAnd = a})
+
+instance FromXML AnalyticsFilter where
+        parseXML x
+          = AnalyticsFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable AnalyticsFilter where
+
+instance NFData AnalyticsFilter where
+
+instance ToXML AnalyticsFilter where
+        toXML AnalyticsFilter'{..}
+          = mconcat
+              ["Tag" @= _afTag, "Prefix" @= _afPrefix,
+               "And" @= _afAnd]
+
+-- | /See:/ 'analyticsS3BucketDestination' smart constructor.
+data AnalyticsS3BucketDestination = AnalyticsS3BucketDestination'
+  { _asbdBucketAccountId :: !(Maybe Text)
+  , _asbdPrefix          :: !(Maybe Text)
+  , _asbdFormat          :: !AnalyticsS3ExportFileFormat
+  , _asbdBucket          :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'AnalyticsS3BucketDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'asbdBucketAccountId' - The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
+--
+-- * 'asbdPrefix' - The prefix to use when exporting data. The exported data begins with this prefix.
+--
+-- * 'asbdFormat' - The file format used when exporting data to Amazon S3.
+--
+-- * 'asbdBucket' - The Amazon resource name (ARN) of the bucket to which data is exported.
+analyticsS3BucketDestination
+    :: AnalyticsS3ExportFileFormat -- ^ 'asbdFormat'
+    -> BucketName -- ^ 'asbdBucket'
+    -> AnalyticsS3BucketDestination
+analyticsS3BucketDestination pFormat_ pBucket_ =
+  AnalyticsS3BucketDestination'
+    { _asbdBucketAccountId = Nothing
+    , _asbdPrefix = Nothing
+    , _asbdFormat = pFormat_
+    , _asbdBucket = pBucket_
+    }
+
+
+-- | The account ID that owns the destination bucket. If no account ID is provided, the owner will not be validated prior to exporting data.
+asbdBucketAccountId :: Lens' AnalyticsS3BucketDestination (Maybe Text)
+asbdBucketAccountId = lens _asbdBucketAccountId (\ s a -> s{_asbdBucketAccountId = a})
+
+-- | The prefix to use when exporting data. The exported data begins with this prefix.
+asbdPrefix :: Lens' AnalyticsS3BucketDestination (Maybe Text)
+asbdPrefix = lens _asbdPrefix (\ s a -> s{_asbdPrefix = a})
+
+-- | The file format used when exporting data to Amazon S3.
+asbdFormat :: Lens' AnalyticsS3BucketDestination AnalyticsS3ExportFileFormat
+asbdFormat = lens _asbdFormat (\ s a -> s{_asbdFormat = a})
+
+-- | The Amazon resource name (ARN) of the bucket to which data is exported.
+asbdBucket :: Lens' AnalyticsS3BucketDestination BucketName
+asbdBucket = lens _asbdBucket (\ s a -> s{_asbdBucket = a})
+
+instance FromXML AnalyticsS3BucketDestination where
+        parseXML x
+          = AnalyticsS3BucketDestination' <$>
+              (x .@? "BucketAccountId") <*> (x .@? "Prefix") <*>
+                (x .@ "Format")
+                <*> (x .@ "Bucket")
+
+instance Hashable AnalyticsS3BucketDestination where
+
+instance NFData AnalyticsS3BucketDestination where
+
+instance ToXML AnalyticsS3BucketDestination where
+        toXML AnalyticsS3BucketDestination'{..}
+          = mconcat
+              ["BucketAccountId" @= _asbdBucketAccountId,
+               "Prefix" @= _asbdPrefix, "Format" @= _asbdFormat,
+               "Bucket" @= _asbdBucket]
+
+-- | /See:/ 'bucket' smart constructor.
+data Bucket = Bucket'
+  { _bCreationDate :: !RFC822
+  , _bName         :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Bucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bCreationDate' - Date the bucket was created.
+--
+-- * 'bName' - The name of the bucket.
+bucket
+    :: UTCTime -- ^ 'bCreationDate'
+    -> BucketName -- ^ 'bName'
+    -> Bucket
+bucket pCreationDate_ pName_ =
+  Bucket' {_bCreationDate = _Time # pCreationDate_, _bName = pName_}
+
+
+-- | Date the bucket was created.
+bCreationDate :: Lens' Bucket UTCTime
+bCreationDate = lens _bCreationDate (\ s a -> s{_bCreationDate = a}) . _Time
+
+-- | The name of the bucket.
+bName :: Lens' Bucket BucketName
+bName = lens _bName (\ s a -> s{_bName = a})
+
+instance FromXML Bucket where
+        parseXML x
+          = Bucket' <$> (x .@ "CreationDate") <*> (x .@ "Name")
+
+instance Hashable Bucket where
+
+instance NFData Bucket where
+
+-- | /See:/ 'bucketLifecycleConfiguration' smart constructor.
+newtype BucketLifecycleConfiguration = BucketLifecycleConfiguration'
+  { _blcRules :: [LifecycleRule]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BucketLifecycleConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blcRules' - Undocumented member.
+bucketLifecycleConfiguration
+    :: BucketLifecycleConfiguration
+bucketLifecycleConfiguration =
+  BucketLifecycleConfiguration' {_blcRules = mempty}
+
+
+-- | Undocumented member.
+blcRules :: Lens' BucketLifecycleConfiguration [LifecycleRule]
+blcRules = lens _blcRules (\ s a -> s{_blcRules = a}) . _Coerce
+
+instance Hashable BucketLifecycleConfiguration where
+
+instance NFData BucketLifecycleConfiguration where
+
+instance ToXML BucketLifecycleConfiguration where
+        toXML BucketLifecycleConfiguration'{..}
+          = mconcat [toXMLList "Rule" _blcRules]
+
+-- | /See:/ 'bucketLoggingStatus' smart constructor.
+newtype BucketLoggingStatus = BucketLoggingStatus'
+  { _blsLoggingEnabled :: Maybe LoggingEnabled
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BucketLoggingStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'blsLoggingEnabled' - Undocumented member.
+bucketLoggingStatus
+    :: BucketLoggingStatus
+bucketLoggingStatus = BucketLoggingStatus' {_blsLoggingEnabled = Nothing}
+
+
+-- | Undocumented member.
+blsLoggingEnabled :: Lens' BucketLoggingStatus (Maybe LoggingEnabled)
+blsLoggingEnabled = lens _blsLoggingEnabled (\ s a -> s{_blsLoggingEnabled = a})
+
+instance Hashable BucketLoggingStatus where
+
+instance NFData BucketLoggingStatus where
+
+instance ToXML BucketLoggingStatus where
+        toXML BucketLoggingStatus'{..}
+          = mconcat ["LoggingEnabled" @= _blsLoggingEnabled]
+
+-- | /See:/ 'corsConfiguration' smart constructor.
+newtype CORSConfiguration = CORSConfiguration'
+  { _ccCORSRules :: [CORSRule]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CORSConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccCORSRules' - Undocumented member.
+corsConfiguration
+    :: CORSConfiguration
+corsConfiguration = CORSConfiguration' {_ccCORSRules = mempty}
+
+
+-- | Undocumented member.
+ccCORSRules :: Lens' CORSConfiguration [CORSRule]
+ccCORSRules = lens _ccCORSRules (\ s a -> s{_ccCORSRules = a}) . _Coerce
+
+instance Hashable CORSConfiguration where
+
+instance NFData CORSConfiguration where
+
+instance ToXML CORSConfiguration where
+        toXML CORSConfiguration'{..}
+          = mconcat [toXMLList "CORSRule" _ccCORSRules]
+
+-- | /See:/ 'corsRule' smart constructor.
+data CORSRule = CORSRule'
+  { _crMaxAgeSeconds  :: !(Maybe Int)
+  , _crAllowedHeaders :: !(Maybe [Text])
+  , _crExposeHeaders  :: !(Maybe [Text])
+  , _crAllowedMethods :: ![Text]
+  , _crAllowedOrigins :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CORSRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crMaxAgeSeconds' - The time in seconds that your browser is to cache the preflight response for the specified resource.
+--
+-- * 'crAllowedHeaders' - Specifies which headers are allowed in a pre-flight OPTIONS request.
+--
+-- * 'crExposeHeaders' - One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
+--
+-- * 'crAllowedMethods' - Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
+--
+-- * 'crAllowedOrigins' - One or more origins you want customers to be able to access the bucket from.
+corsRule
+    :: CORSRule
+corsRule =
+  CORSRule'
+    { _crMaxAgeSeconds = Nothing
+    , _crAllowedHeaders = Nothing
+    , _crExposeHeaders = Nothing
+    , _crAllowedMethods = mempty
+    , _crAllowedOrigins = mempty
+    }
+
+
+-- | The time in seconds that your browser is to cache the preflight response for the specified resource.
+crMaxAgeSeconds :: Lens' CORSRule (Maybe Int)
+crMaxAgeSeconds = lens _crMaxAgeSeconds (\ s a -> s{_crMaxAgeSeconds = a})
+
+-- | Specifies which headers are allowed in a pre-flight OPTIONS request.
+crAllowedHeaders :: Lens' CORSRule [Text]
+crAllowedHeaders = lens _crAllowedHeaders (\ s a -> s{_crAllowedHeaders = a}) . _Default . _Coerce
+
+-- | One or more headers in the response that you want customers to be able to access from their applications (for example, from a JavaScript XMLHttpRequest object).
+crExposeHeaders :: Lens' CORSRule [Text]
+crExposeHeaders = lens _crExposeHeaders (\ s a -> s{_crExposeHeaders = a}) . _Default . _Coerce
+
+-- | Identifies HTTP methods that the domain/origin specified in the rule is allowed to execute.
+crAllowedMethods :: Lens' CORSRule [Text]
+crAllowedMethods = lens _crAllowedMethods (\ s a -> s{_crAllowedMethods = a}) . _Coerce
+
+-- | One or more origins you want customers to be able to access the bucket from.
+crAllowedOrigins :: Lens' CORSRule [Text]
+crAllowedOrigins = lens _crAllowedOrigins (\ s a -> s{_crAllowedOrigins = a}) . _Coerce
+
+instance FromXML CORSRule where
+        parseXML x
+          = CORSRule' <$>
+              (x .@? "MaxAgeSeconds") <*>
+                (may (parseXMLList "AllowedHeader") x)
+                <*> (may (parseXMLList "ExposeHeader") x)
+                <*> (parseXMLList "AllowedMethod" x)
+                <*> (parseXMLList "AllowedOrigin" x)
+
+instance Hashable CORSRule where
+
+instance NFData CORSRule where
+
+instance ToXML CORSRule where
+        toXML CORSRule'{..}
+          = mconcat
+              ["MaxAgeSeconds" @= _crMaxAgeSeconds,
+               toXML
+                 (toXMLList "AllowedHeader" <$> _crAllowedHeaders),
+               toXML
+                 (toXMLList "ExposeHeader" <$> _crExposeHeaders),
+               toXMLList "AllowedMethod" _crAllowedMethods,
+               toXMLList "AllowedOrigin" _crAllowedOrigins]
+
+-- | Describes how a CSV-formatted input object is formatted.
+--
+-- /See:/ 'csvInput' smart constructor.
+data CSVInput = CSVInput'
+  { _ciQuoteCharacter       :: !(Maybe Text)
+  , _ciRecordDelimiter      :: !(Maybe Text)
+  , _ciFileHeaderInfo       :: !(Maybe FileHeaderInfo)
+  , _ciQuoteEscapeCharacter :: !(Maybe Text)
+  , _ciComments             :: !(Maybe Text)
+  , _ciFieldDelimiter       :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CSVInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciQuoteCharacter' - Value used for escaping where the field delimiter is part of the value.
+--
+-- * 'ciRecordDelimiter' - Value used to separate individual records.
+--
+-- * 'ciFileHeaderInfo' - Describes the first line of input. Valid values: None, Ignore, Use.
+--
+-- * 'ciQuoteEscapeCharacter' - Single character used for escaping the quote character inside an already escaped value.
+--
+-- * 'ciComments' - Single character used to indicate a row should be ignored when present at the start of a row.
+--
+-- * 'ciFieldDelimiter' - Value used to separate individual fields in a record.
+csvInput
+    :: CSVInput
+csvInput =
+  CSVInput'
+    { _ciQuoteCharacter = Nothing
+    , _ciRecordDelimiter = Nothing
+    , _ciFileHeaderInfo = Nothing
+    , _ciQuoteEscapeCharacter = Nothing
+    , _ciComments = Nothing
+    , _ciFieldDelimiter = Nothing
+    }
+
+
+-- | Value used for escaping where the field delimiter is part of the value.
+ciQuoteCharacter :: Lens' CSVInput (Maybe Text)
+ciQuoteCharacter = lens _ciQuoteCharacter (\ s a -> s{_ciQuoteCharacter = a})
+
+-- | Value used to separate individual records.
+ciRecordDelimiter :: Lens' CSVInput (Maybe Text)
+ciRecordDelimiter = lens _ciRecordDelimiter (\ s a -> s{_ciRecordDelimiter = a})
+
+-- | Describes the first line of input. Valid values: None, Ignore, Use.
+ciFileHeaderInfo :: Lens' CSVInput (Maybe FileHeaderInfo)
+ciFileHeaderInfo = lens _ciFileHeaderInfo (\ s a -> s{_ciFileHeaderInfo = a})
+
+-- | Single character used for escaping the quote character inside an already escaped value.
+ciQuoteEscapeCharacter :: Lens' CSVInput (Maybe Text)
+ciQuoteEscapeCharacter = lens _ciQuoteEscapeCharacter (\ s a -> s{_ciQuoteEscapeCharacter = a})
+
+-- | Single character used to indicate a row should be ignored when present at the start of a row.
+ciComments :: Lens' CSVInput (Maybe Text)
+ciComments = lens _ciComments (\ s a -> s{_ciComments = a})
+
+-- | Value used to separate individual fields in a record.
+ciFieldDelimiter :: Lens' CSVInput (Maybe Text)
+ciFieldDelimiter = lens _ciFieldDelimiter (\ s a -> s{_ciFieldDelimiter = a})
+
+instance Hashable CSVInput where
+
+instance NFData CSVInput where
+
+instance ToXML CSVInput where
+        toXML CSVInput'{..}
+          = mconcat
+              ["QuoteCharacter" @= _ciQuoteCharacter,
+               "RecordDelimiter" @= _ciRecordDelimiter,
+               "FileHeaderInfo" @= _ciFileHeaderInfo,
+               "QuoteEscapeCharacter" @= _ciQuoteEscapeCharacter,
+               "Comments" @= _ciComments,
+               "FieldDelimiter" @= _ciFieldDelimiter]
+
+-- | Describes how CSV-formatted results are formatted.
+--
+-- /See:/ 'csvOutput' smart constructor.
+data CSVOutput = CSVOutput'
+  { _coQuoteCharacter       :: !(Maybe Text)
+  , _coQuoteFields          :: !(Maybe QuoteFields)
+  , _coRecordDelimiter      :: !(Maybe Text)
+  , _coQuoteEscapeCharacter :: !(Maybe Text)
+  , _coFieldDelimiter       :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CSVOutput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'coQuoteCharacter' - Value used for escaping where the field delimiter is part of the value.
+--
+-- * 'coQuoteFields' - Indicates whether or not all output fields should be quoted.
+--
+-- * 'coRecordDelimiter' - Value used to separate individual records.
+--
+-- * 'coQuoteEscapeCharacter' - Single character used for escaping the quote character inside an already escaped value.
+--
+-- * 'coFieldDelimiter' - Value used to separate individual fields in a record.
+csvOutput
+    :: CSVOutput
+csvOutput =
+  CSVOutput'
+    { _coQuoteCharacter = Nothing
+    , _coQuoteFields = Nothing
+    , _coRecordDelimiter = Nothing
+    , _coQuoteEscapeCharacter = Nothing
+    , _coFieldDelimiter = Nothing
+    }
+
+
+-- | Value used for escaping where the field delimiter is part of the value.
+coQuoteCharacter :: Lens' CSVOutput (Maybe Text)
+coQuoteCharacter = lens _coQuoteCharacter (\ s a -> s{_coQuoteCharacter = a})
+
+-- | Indicates whether or not all output fields should be quoted.
+coQuoteFields :: Lens' CSVOutput (Maybe QuoteFields)
+coQuoteFields = lens _coQuoteFields (\ s a -> s{_coQuoteFields = a})
+
+-- | Value used to separate individual records.
+coRecordDelimiter :: Lens' CSVOutput (Maybe Text)
+coRecordDelimiter = lens _coRecordDelimiter (\ s a -> s{_coRecordDelimiter = a})
+
+-- | Single character used for escaping the quote character inside an already escaped value.
+coQuoteEscapeCharacter :: Lens' CSVOutput (Maybe Text)
+coQuoteEscapeCharacter = lens _coQuoteEscapeCharacter (\ s a -> s{_coQuoteEscapeCharacter = a})
+
+-- | Value used to separate individual fields in a record.
+coFieldDelimiter :: Lens' CSVOutput (Maybe Text)
+coFieldDelimiter = lens _coFieldDelimiter (\ s a -> s{_coFieldDelimiter = a})
+
+instance Hashable CSVOutput where
+
+instance NFData CSVOutput where
+
+instance ToXML CSVOutput where
+        toXML CSVOutput'{..}
+          = mconcat
+              ["QuoteCharacter" @= _coQuoteCharacter,
+               "QuoteFields" @= _coQuoteFields,
+               "RecordDelimiter" @= _coRecordDelimiter,
+               "QuoteEscapeCharacter" @= _coQuoteEscapeCharacter,
+               "FieldDelimiter" @= _coFieldDelimiter]
+
+-- | /See:/ 'commonPrefix' smart constructor.
+newtype CommonPrefix = CommonPrefix'
+  { _cpPrefix :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CommonPrefix' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpPrefix' - Undocumented member.
+commonPrefix
+    :: CommonPrefix
+commonPrefix = CommonPrefix' {_cpPrefix = Nothing}
+
+
+-- | Undocumented member.
+cpPrefix :: Lens' CommonPrefix (Maybe Text)
+cpPrefix = lens _cpPrefix (\ s a -> s{_cpPrefix = a})
+
+instance FromXML CommonPrefix where
+        parseXML x = CommonPrefix' <$> (x .@? "Prefix")
+
+instance Hashable CommonPrefix where
+
+instance NFData CommonPrefix where
+
+-- | /See:/ 'completedMultipartUpload' smart constructor.
+newtype CompletedMultipartUpload = CompletedMultipartUpload'
+  { _cmuParts :: Maybe (List1 CompletedPart)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CompletedMultipartUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmuParts' - Undocumented member.
+completedMultipartUpload
+    :: CompletedMultipartUpload
+completedMultipartUpload = CompletedMultipartUpload' {_cmuParts = Nothing}
+
+
+-- | Undocumented member.
+cmuParts :: Lens' CompletedMultipartUpload (Maybe (NonEmpty CompletedPart))
+cmuParts = lens _cmuParts (\ s a -> s{_cmuParts = a}) . mapping _List1
+
+instance Hashable CompletedMultipartUpload where
+
+instance NFData CompletedMultipartUpload where
+
+instance ToXML CompletedMultipartUpload where
+        toXML CompletedMultipartUpload'{..}
+          = mconcat [toXML (toXMLList "Part" <$> _cmuParts)]
+
+-- | /See:/ 'completedPart' smart constructor.
+data CompletedPart = CompletedPart'
+  { _cpPartNumber :: !Int
+  , _cpETag       :: !ETag
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CompletedPart' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpPartNumber' - Part number that identifies the part. This is a positive integer between 1 and 10,000.
+--
+-- * 'cpETag' - Entity tag returned when the part was uploaded.
+completedPart
+    :: Int -- ^ 'cpPartNumber'
+    -> ETag -- ^ 'cpETag'
+    -> CompletedPart
+completedPart pPartNumber_ pETag_ =
+  CompletedPart' {_cpPartNumber = pPartNumber_, _cpETag = pETag_}
+
+
+-- | Part number that identifies the part. This is a positive integer between 1 and 10,000.
+cpPartNumber :: Lens' CompletedPart Int
+cpPartNumber = lens _cpPartNumber (\ s a -> s{_cpPartNumber = a})
+
+-- | Entity tag returned when the part was uploaded.
+cpETag :: Lens' CompletedPart ETag
+cpETag = lens _cpETag (\ s a -> s{_cpETag = a})
+
+instance Hashable CompletedPart where
+
+instance NFData CompletedPart where
+
+instance ToXML CompletedPart where
+        toXML CompletedPart'{..}
+          = mconcat
+              ["PartNumber" @= _cpPartNumber, "ETag" @= _cpETag]
+
+-- | /See:/ 'condition' smart constructor.
+data Condition = Condition'
+  { _cKeyPrefixEquals             :: !(Maybe Text)
+  , _cHTTPErrorCodeReturnedEquals :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Condition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cKeyPrefixEquals' - The object key name prefix when the redirect is applied. For example, to redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. To redirect request for all pages with the prefix docs/, the key prefix will be /docs, which identifies all objects in the docs/ folder. Required when the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals is not specified. If both conditions are specified, both must be true for the redirect to be applied.
+--
+-- * 'cHTTPErrorCodeReturnedEquals' - The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied. Required when parent element Condition is specified and sibling KeyPrefixEquals is not specified. If both are specified, then both must be true for the redirect to be applied.
+condition
+    :: Condition
+condition =
+  Condition'
+    {_cKeyPrefixEquals = Nothing, _cHTTPErrorCodeReturnedEquals = Nothing}
+
+
+-- | The object key name prefix when the redirect is applied. For example, to redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html. To redirect request for all pages with the prefix docs/, the key prefix will be /docs, which identifies all objects in the docs/ folder. Required when the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals is not specified. If both conditions are specified, both must be true for the redirect to be applied.
+cKeyPrefixEquals :: Lens' Condition (Maybe Text)
+cKeyPrefixEquals = lens _cKeyPrefixEquals (\ s a -> s{_cKeyPrefixEquals = a})
+
+-- | The HTTP error code when the redirect is applied. In the event of an error, if the error code equals this value, then the specified redirect is applied. Required when parent element Condition is specified and sibling KeyPrefixEquals is not specified. If both are specified, then both must be true for the redirect to be applied.
+cHTTPErrorCodeReturnedEquals :: Lens' Condition (Maybe Text)
+cHTTPErrorCodeReturnedEquals = lens _cHTTPErrorCodeReturnedEquals (\ s a -> s{_cHTTPErrorCodeReturnedEquals = a})
+
+instance FromXML Condition where
+        parseXML x
+          = Condition' <$>
+              (x .@? "KeyPrefixEquals") <*>
+                (x .@? "HttpErrorCodeReturnedEquals")
+
+instance Hashable Condition where
+
+instance NFData Condition where
+
+instance ToXML Condition where
+        toXML Condition'{..}
+          = mconcat
+              ["KeyPrefixEquals" @= _cKeyPrefixEquals,
+               "HttpErrorCodeReturnedEquals" @=
+                 _cHTTPErrorCodeReturnedEquals]
+
+-- | /See:/ 'continuationEvent' smart constructor.
+data ContinuationEvent =
+  ContinuationEvent'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ContinuationEvent' with the minimum fields required to make a request.
+--
+continuationEvent
+    :: ContinuationEvent
+continuationEvent = ContinuationEvent'
+
+
+instance FromXML ContinuationEvent where
+        parseXML = const (pure ContinuationEvent')
+
+instance Hashable ContinuationEvent where
+
+instance NFData ContinuationEvent where
+
+-- | /See:/ 'copyObjectResult' smart constructor.
+data CopyObjectResult = CopyObjectResult'
+  { _corETag         :: !(Maybe ETag)
+  , _corLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CopyObjectResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'corETag' - Undocumented member.
+--
+-- * 'corLastModified' - Undocumented member.
+copyObjectResult
+    :: CopyObjectResult
+copyObjectResult =
+  CopyObjectResult' {_corETag = Nothing, _corLastModified = Nothing}
+
+
+-- | Undocumented member.
+corETag :: Lens' CopyObjectResult (Maybe ETag)
+corETag = lens _corETag (\ s a -> s{_corETag = a})
+
+-- | Undocumented member.
+corLastModified :: Lens' CopyObjectResult (Maybe UTCTime)
+corLastModified = lens _corLastModified (\ s a -> s{_corLastModified = a}) . mapping _Time
+
+instance FromXML CopyObjectResult where
+        parseXML x
+          = CopyObjectResult' <$>
+              (x .@? "ETag") <*> (x .@? "LastModified")
+
+instance Hashable CopyObjectResult where
+
+instance NFData CopyObjectResult where
+
+-- | /See:/ 'copyPartResult' smart constructor.
+data CopyPartResult = CopyPartResult'
+  { _cprETag         :: !(Maybe ETag)
+  , _cprLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CopyPartResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cprETag' - Entity tag of the object.
+--
+-- * 'cprLastModified' - Date and time at which the object was uploaded.
+copyPartResult
+    :: CopyPartResult
+copyPartResult =
+  CopyPartResult' {_cprETag = Nothing, _cprLastModified = Nothing}
+
+
+-- | Entity tag of the object.
+cprETag :: Lens' CopyPartResult (Maybe ETag)
+cprETag = lens _cprETag (\ s a -> s{_cprETag = a})
+
+-- | Date and time at which the object was uploaded.
+cprLastModified :: Lens' CopyPartResult (Maybe UTCTime)
+cprLastModified = lens _cprLastModified (\ s a -> s{_cprLastModified = a}) . mapping _Time
+
+instance FromXML CopyPartResult where
+        parseXML x
+          = CopyPartResult' <$>
+              (x .@? "ETag") <*> (x .@? "LastModified")
+
+instance Hashable CopyPartResult where
+
+instance NFData CopyPartResult where
+
+-- | /See:/ 'createBucketConfiguration' smart constructor.
+newtype CreateBucketConfiguration = CreateBucketConfiguration'
+  { _cbcLocationConstraint :: Maybe LocationConstraint
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateBucketConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbcLocationConstraint' - Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
+createBucketConfiguration
+    :: CreateBucketConfiguration
+createBucketConfiguration =
+  CreateBucketConfiguration' {_cbcLocationConstraint = Nothing}
+
+
+-- | Specifies the region where the bucket will be created. If you don't specify a region, the bucket will be created in US Standard.
+cbcLocationConstraint :: Lens' CreateBucketConfiguration (Maybe LocationConstraint)
+cbcLocationConstraint = lens _cbcLocationConstraint (\ s a -> s{_cbcLocationConstraint = a})
+
+instance Hashable CreateBucketConfiguration where
+
+instance NFData CreateBucketConfiguration where
+
+instance ToXML CreateBucketConfiguration where
+        toXML CreateBucketConfiguration'{..}
+          = mconcat
+              ["LocationConstraint" @= _cbcLocationConstraint]
+
+-- | /See:/ 'delete'' smart constructor.
+data Delete = Delete'
+  { _dQuiet   :: !(Maybe Bool)
+  , _dObjects :: ![ObjectIdentifier]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Delete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dQuiet' - Element to enable quiet mode for the request. When you add this element, you must set its value to true.
+--
+-- * 'dObjects' - Undocumented member.
+delete'
+    :: Delete
+delete' = Delete' {_dQuiet = Nothing, _dObjects = mempty}
+
+
+-- | Element to enable quiet mode for the request. When you add this element, you must set its value to true.
+dQuiet :: Lens' Delete (Maybe Bool)
+dQuiet = lens _dQuiet (\ s a -> s{_dQuiet = a})
+
+-- | Undocumented member.
+dObjects :: Lens' Delete [ObjectIdentifier]
+dObjects = lens _dObjects (\ s a -> s{_dObjects = a}) . _Coerce
+
+instance Hashable Delete where
+
+instance NFData Delete where
+
+instance ToXML Delete where
+        toXML Delete'{..}
+          = mconcat
+              ["Quiet" @= _dQuiet, toXMLList "Object" _dObjects]
+
+-- | /See:/ 'deleteMarkerEntry' smart constructor.
+data DeleteMarkerEntry = DeleteMarkerEntry'
+  { _dmeVersionId    :: !(Maybe ObjectVersionId)
+  , _dmeIsLatest     :: !(Maybe Bool)
+  , _dmeOwner        :: !(Maybe Owner)
+  , _dmeKey          :: !(Maybe ObjectKey)
+  , _dmeLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteMarkerEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmeVersionId' - Version ID of an object.
+--
+-- * 'dmeIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
+--
+-- * 'dmeOwner' - Undocumented member.
+--
+-- * 'dmeKey' - The object key.
+--
+-- * 'dmeLastModified' - Date and time the object was last modified.
+deleteMarkerEntry
+    :: DeleteMarkerEntry
+deleteMarkerEntry =
+  DeleteMarkerEntry'
+    { _dmeVersionId = Nothing
+    , _dmeIsLatest = Nothing
+    , _dmeOwner = Nothing
+    , _dmeKey = Nothing
+    , _dmeLastModified = Nothing
+    }
+
+
+-- | Version ID of an object.
+dmeVersionId :: Lens' DeleteMarkerEntry (Maybe ObjectVersionId)
+dmeVersionId = lens _dmeVersionId (\ s a -> s{_dmeVersionId = a})
+
+-- | Specifies whether the object is (true) or is not (false) the latest version of an object.
+dmeIsLatest :: Lens' DeleteMarkerEntry (Maybe Bool)
+dmeIsLatest = lens _dmeIsLatest (\ s a -> s{_dmeIsLatest = a})
+
+-- | Undocumented member.
+dmeOwner :: Lens' DeleteMarkerEntry (Maybe Owner)
+dmeOwner = lens _dmeOwner (\ s a -> s{_dmeOwner = a})
+
+-- | The object key.
+dmeKey :: Lens' DeleteMarkerEntry (Maybe ObjectKey)
+dmeKey = lens _dmeKey (\ s a -> s{_dmeKey = a})
+
+-- | Date and time the object was last modified.
+dmeLastModified :: Lens' DeleteMarkerEntry (Maybe UTCTime)
+dmeLastModified = lens _dmeLastModified (\ s a -> s{_dmeLastModified = a}) . mapping _Time
+
+instance FromXML DeleteMarkerEntry where
+        parseXML x
+          = DeleteMarkerEntry' <$>
+              (x .@? "VersionId") <*> (x .@? "IsLatest") <*>
+                (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "LastModified")
+
+instance Hashable DeleteMarkerEntry where
+
+instance NFData DeleteMarkerEntry where
+
+-- | /See:/ 'deletedObject' smart constructor.
+data DeletedObject = DeletedObject'
+  { _dVersionId             :: !(Maybe ObjectVersionId)
+  , _dDeleteMarker          :: !(Maybe Bool)
+  , _dDeleteMarkerVersionId :: !(Maybe Text)
+  , _dKey                   :: !(Maybe ObjectKey)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeletedObject' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dVersionId' - Undocumented member.
+--
+-- * 'dDeleteMarker' - Undocumented member.
+--
+-- * 'dDeleteMarkerVersionId' - Undocumented member.
+--
+-- * 'dKey' - Undocumented member.
+deletedObject
+    :: DeletedObject
+deletedObject =
+  DeletedObject'
+    { _dVersionId = Nothing
+    , _dDeleteMarker = Nothing
+    , _dDeleteMarkerVersionId = Nothing
+    , _dKey = Nothing
+    }
+
+
+-- | Undocumented member.
+dVersionId :: Lens' DeletedObject (Maybe ObjectVersionId)
+dVersionId = lens _dVersionId (\ s a -> s{_dVersionId = a})
+
+-- | Undocumented member.
+dDeleteMarker :: Lens' DeletedObject (Maybe Bool)
+dDeleteMarker = lens _dDeleteMarker (\ s a -> s{_dDeleteMarker = a})
+
+-- | Undocumented member.
+dDeleteMarkerVersionId :: Lens' DeletedObject (Maybe Text)
+dDeleteMarkerVersionId = lens _dDeleteMarkerVersionId (\ s a -> s{_dDeleteMarkerVersionId = a})
+
+-- | Undocumented member.
+dKey :: Lens' DeletedObject (Maybe ObjectKey)
+dKey = lens _dKey (\ s a -> s{_dKey = a})
+
+instance FromXML DeletedObject where
+        parseXML x
+          = DeletedObject' <$>
+              (x .@? "VersionId") <*> (x .@? "DeleteMarker") <*>
+                (x .@? "DeleteMarkerVersionId")
+                <*> (x .@? "Key")
+
+instance Hashable DeletedObject where
+
+instance NFData DeletedObject where
+
+-- | Container for replication destination information.
+--
+-- /See:/ 'destination' smart constructor.
+data Destination = Destination'
+  { _dAccessControlTranslation :: !(Maybe AccessControlTranslation)
+  , _dAccount                  :: !(Maybe Text)
+  , _dStorageClass             :: !(Maybe StorageClass)
+  , _dEncryptionConfiguration  :: !(Maybe EncryptionConfiguration)
+  , _dBucket                   :: !BucketName
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Destination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dAccessControlTranslation' - Container for information regarding the access control for replicas.
+--
+-- * 'dAccount' - Account ID of the destination bucket. Currently this is only being verified if Access Control Translation is enabled
+--
+-- * 'dStorageClass' - The class of storage used to store the object.
+--
+-- * 'dEncryptionConfiguration' - Container for information regarding encryption based configuration for replicas.
+--
+-- * 'dBucket' - Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
+destination
+    :: BucketName -- ^ 'dBucket'
+    -> Destination
+destination pBucket_ =
+  Destination'
+    { _dAccessControlTranslation = Nothing
+    , _dAccount = Nothing
+    , _dStorageClass = Nothing
+    , _dEncryptionConfiguration = Nothing
+    , _dBucket = pBucket_
+    }
+
+
+-- | Container for information regarding the access control for replicas.
+dAccessControlTranslation :: Lens' Destination (Maybe AccessControlTranslation)
+dAccessControlTranslation = lens _dAccessControlTranslation (\ s a -> s{_dAccessControlTranslation = a})
+
+-- | Account ID of the destination bucket. Currently this is only being verified if Access Control Translation is enabled
+dAccount :: Lens' Destination (Maybe Text)
+dAccount = lens _dAccount (\ s a -> s{_dAccount = a})
+
+-- | The class of storage used to store the object.
+dStorageClass :: Lens' Destination (Maybe StorageClass)
+dStorageClass = lens _dStorageClass (\ s a -> s{_dStorageClass = a})
+
+-- | Container for information regarding encryption based configuration for replicas.
+dEncryptionConfiguration :: Lens' Destination (Maybe EncryptionConfiguration)
+dEncryptionConfiguration = lens _dEncryptionConfiguration (\ s a -> s{_dEncryptionConfiguration = a})
+
+-- | Amazon resource name (ARN) of the bucket where you want Amazon S3 to store replicas of the object identified by the rule.
+dBucket :: Lens' Destination BucketName
+dBucket = lens _dBucket (\ s a -> s{_dBucket = a})
+
+instance FromXML Destination where
+        parseXML x
+          = Destination' <$>
+              (x .@? "AccessControlTranslation") <*>
+                (x .@? "Account")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "EncryptionConfiguration")
+                <*> (x .@ "Bucket")
+
+instance Hashable Destination where
+
+instance NFData Destination where
+
+instance ToXML Destination where
+        toXML Destination'{..}
+          = mconcat
+              ["AccessControlTranslation" @=
+                 _dAccessControlTranslation,
+               "Account" @= _dAccount,
+               "StorageClass" @= _dStorageClass,
+               "EncryptionConfiguration" @=
+                 _dEncryptionConfiguration,
+               "Bucket" @= _dBucket]
+
+-- | Describes the server-side encryption that will be applied to the restore results.
+--
+-- /See:/ 'encryption' smart constructor.
+data Encryption = Encryption'
+  { _eKMSKeyId       :: !(Maybe (Sensitive Text))
+  , _eKMSContext     :: !(Maybe Text)
+  , _eEncryptionType :: !ServerSideEncryption
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Encryption' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eKMSKeyId' - If the encryption type is aws:kms, this optional value specifies the AWS KMS key ID to use for encryption of job results.
+--
+-- * 'eKMSContext' - If the encryption type is aws:kms, this optional value can be used to specify the encryption context for the restore results.
+--
+-- * 'eEncryptionType' - The server-side encryption algorithm used when storing job results in Amazon S3 (e.g., AES256, aws:kms).
+encryption
+    :: ServerSideEncryption -- ^ 'eEncryptionType'
+    -> Encryption
+encryption pEncryptionType_ =
+  Encryption'
+    { _eKMSKeyId = Nothing
+    , _eKMSContext = Nothing
+    , _eEncryptionType = pEncryptionType_
+    }
+
+
+-- | If the encryption type is aws:kms, this optional value specifies the AWS KMS key ID to use for encryption of job results.
+eKMSKeyId :: Lens' Encryption (Maybe Text)
+eKMSKeyId = lens _eKMSKeyId (\ s a -> s{_eKMSKeyId = a}) . mapping _Sensitive
+
+-- | If the encryption type is aws:kms, this optional value can be used to specify the encryption context for the restore results.
+eKMSContext :: Lens' Encryption (Maybe Text)
+eKMSContext = lens _eKMSContext (\ s a -> s{_eKMSContext = a})
+
+-- | The server-side encryption algorithm used when storing job results in Amazon S3 (e.g., AES256, aws:kms).
+eEncryptionType :: Lens' Encryption ServerSideEncryption
+eEncryptionType = lens _eEncryptionType (\ s a -> s{_eEncryptionType = a})
+
+instance Hashable Encryption where
+
+instance NFData Encryption where
+
+instance ToXML Encryption where
+        toXML Encryption'{..}
+          = mconcat
+              ["KMSKeyId" @= _eKMSKeyId,
+               "KMSContext" @= _eKMSContext,
+               "EncryptionType" @= _eEncryptionType]
+
+-- | Container for information regarding encryption based configuration for replicas.
+--
+-- /See:/ 'encryptionConfiguration' smart constructor.
+newtype EncryptionConfiguration = EncryptionConfiguration'
+  { _ecReplicaKMSKeyId :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EncryptionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ecReplicaKMSKeyId' - The id of the KMS key used to encrypt the replica object.
+encryptionConfiguration
+    :: EncryptionConfiguration
+encryptionConfiguration =
+  EncryptionConfiguration' {_ecReplicaKMSKeyId = Nothing}
+
+
+-- | The id of the KMS key used to encrypt the replica object.
+ecReplicaKMSKeyId :: Lens' EncryptionConfiguration (Maybe Text)
+ecReplicaKMSKeyId = lens _ecReplicaKMSKeyId (\ s a -> s{_ecReplicaKMSKeyId = a})
+
+instance FromXML EncryptionConfiguration where
+        parseXML x
+          = EncryptionConfiguration' <$>
+              (x .@? "ReplicaKmsKeyID")
+
+instance Hashable EncryptionConfiguration where
+
+instance NFData EncryptionConfiguration where
+
+instance ToXML EncryptionConfiguration where
+        toXML EncryptionConfiguration'{..}
+          = mconcat ["ReplicaKmsKeyID" @= _ecReplicaKMSKeyId]
+
+-- | /See:/ 'endEvent' smart constructor.
+data EndEvent =
+  EndEvent'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'EndEvent' with the minimum fields required to make a request.
+--
+endEvent
+    :: EndEvent
+endEvent = EndEvent'
+
+
+instance FromXML EndEvent where
+        parseXML = const (pure EndEvent')
+
+instance Hashable EndEvent where
+
+instance NFData EndEvent where
+
+-- | /See:/ 'errorDocument' smart constructor.
+newtype ErrorDocument = ErrorDocument'
+  { _edKey :: ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ErrorDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edKey' - The object key name to use when a 4XX class error occurs.
+errorDocument
+    :: ObjectKey -- ^ 'edKey'
+    -> ErrorDocument
+errorDocument pKey_ = ErrorDocument' {_edKey = pKey_}
+
+
+-- | The object key name to use when a 4XX class error occurs.
+edKey :: Lens' ErrorDocument ObjectKey
+edKey = lens _edKey (\ s a -> s{_edKey = a})
+
+instance FromXML ErrorDocument where
+        parseXML x = ErrorDocument' <$> (x .@ "Key")
+
+instance Hashable ErrorDocument where
+
+instance NFData ErrorDocument where
+
+instance ToXML ErrorDocument where
+        toXML ErrorDocument'{..} = mconcat ["Key" @= _edKey]
+
+-- | Container for key value pair that defines the criteria for the filter rule.
+--
+-- /See:/ 'filterRule' smart constructor.
+data FilterRule = FilterRule'
+  { _frValue :: !(Maybe Text)
+  , _frName  :: !(Maybe FilterRuleName)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'FilterRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'frValue' - Undocumented member.
+--
+-- * 'frName' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+filterRule
+    :: FilterRule
+filterRule = FilterRule' {_frValue = Nothing, _frName = Nothing}
+
+
+-- | Undocumented member.
+frValue :: Lens' FilterRule (Maybe Text)
+frValue = lens _frValue (\ s a -> s{_frValue = a})
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+frName :: Lens' FilterRule (Maybe FilterRuleName)
+frName = lens _frName (\ s a -> s{_frName = a})
+
+instance FromXML FilterRule where
+        parseXML x
+          = FilterRule' <$> (x .@? "Value") <*> (x .@? "Name")
+
+instance Hashable FilterRule where
+
+instance NFData FilterRule where
+
+instance ToXML FilterRule where
+        toXML FilterRule'{..}
+          = mconcat ["Value" @= _frValue, "Name" @= _frName]
+
+-- | /See:/ 'glacierJobParameters' smart constructor.
+newtype GlacierJobParameters = GlacierJobParameters'
+  { _gjpTier :: Tier
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GlacierJobParameters' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjpTier' - Glacier retrieval tier at which the restore will be processed.
+glacierJobParameters
+    :: Tier -- ^ 'gjpTier'
+    -> GlacierJobParameters
+glacierJobParameters pTier_ = GlacierJobParameters' {_gjpTier = pTier_}
+
+
+-- | Glacier retrieval tier at which the restore will be processed.
+gjpTier :: Lens' GlacierJobParameters Tier
+gjpTier = lens _gjpTier (\ s a -> s{_gjpTier = a})
+
+instance Hashable GlacierJobParameters where
+
+instance NFData GlacierJobParameters where
+
+instance ToXML GlacierJobParameters where
+        toXML GlacierJobParameters'{..}
+          = mconcat ["Tier" @= _gjpTier]
+
+-- | /See:/ 'grant' smart constructor.
+data Grant = Grant'
+  { _gPermission :: !(Maybe Permission)
+  , _gGrantee    :: !(Maybe Grantee)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Grant' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gPermission' - Specifies the permission given to the grantee.
+--
+-- * 'gGrantee' - Undocumented member.
+grant
+    :: Grant
+grant = Grant' {_gPermission = Nothing, _gGrantee = Nothing}
+
+
+-- | Specifies the permission given to the grantee.
+gPermission :: Lens' Grant (Maybe Permission)
+gPermission = lens _gPermission (\ s a -> s{_gPermission = a})
+
+-- | Undocumented member.
+gGrantee :: Lens' Grant (Maybe Grantee)
+gGrantee = lens _gGrantee (\ s a -> s{_gGrantee = a})
+
+instance FromXML Grant where
+        parseXML x
+          = Grant' <$>
+              (x .@? "Permission") <*> (x .@? "Grantee")
+
+instance Hashable Grant where
+
+instance NFData Grant where
+
+instance ToXML Grant where
+        toXML Grant'{..}
+          = mconcat
+              ["Permission" @= _gPermission,
+               "Grantee" @= _gGrantee]
+
+-- | /See:/ 'grantee' smart constructor.
+data Grantee = Grantee'
+  { _gURI          :: !(Maybe Text)
+  , _gEmailAddress :: !(Maybe Text)
+  , _gDisplayName  :: !(Maybe Text)
+  , _gId           :: !(Maybe Text)
+  , _gType         :: !Type
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Grantee' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gURI' - URI of the grantee group.
+--
+-- * 'gEmailAddress' - Email address of the grantee.
+--
+-- * 'gDisplayName' - Screen name of the grantee.
+--
+-- * 'gId' - The canonical user ID of the grantee.
+--
+-- * 'gType' - Type of grantee
+grantee
+    :: Type -- ^ 'gType'
+    -> Grantee
+grantee pType_ =
+  Grantee'
+    { _gURI = Nothing
+    , _gEmailAddress = Nothing
+    , _gDisplayName = Nothing
+    , _gId = Nothing
+    , _gType = pType_
+    }
+
+
+-- | URI of the grantee group.
+gURI :: Lens' Grantee (Maybe Text)
+gURI = lens _gURI (\ s a -> s{_gURI = a})
+
+-- | Email address of the grantee.
+gEmailAddress :: Lens' Grantee (Maybe Text)
+gEmailAddress = lens _gEmailAddress (\ s a -> s{_gEmailAddress = a})
+
+-- | Screen name of the grantee.
+gDisplayName :: Lens' Grantee (Maybe Text)
+gDisplayName = lens _gDisplayName (\ s a -> s{_gDisplayName = a})
+
+-- | The canonical user ID of the grantee.
+gId :: Lens' Grantee (Maybe Text)
+gId = lens _gId (\ s a -> s{_gId = a})
+
+-- | Type of grantee
+gType :: Lens' Grantee Type
+gType = lens _gType (\ s a -> s{_gType = a})
+
+instance FromXML Grantee where
+        parseXML x
+          = Grantee' <$>
+              (x .@? "URI") <*> (x .@? "EmailAddress") <*>
+                (x .@? "DisplayName")
+                <*> (x .@? "ID")
+                <*> (x .@ "xsi:type")
+
+instance Hashable Grantee where
+
+instance NFData Grantee where
+
+instance ToXML Grantee where
+        toXML Grantee'{..}
+          = mconcat
+              ["URI" @= _gURI, "EmailAddress" @= _gEmailAddress,
+               "DisplayName" @= _gDisplayName, "ID" @= _gId,
+               "xsi:type" @@= _gType]
+
+-- | /See:/ 'indexDocument' smart constructor.
+newtype IndexDocument = IndexDocument'
+  { _idSuffix :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'IndexDocument' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idSuffix' - A suffix that is appended to a request that is for a directory on the website endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ the data that is returned will be for the object with the key name images/index.html) The suffix must not be empty and must not include a slash character.
+indexDocument
+    :: Text -- ^ 'idSuffix'
+    -> IndexDocument
+indexDocument pSuffix_ = IndexDocument' {_idSuffix = pSuffix_}
+
+
+-- | A suffix that is appended to a request that is for a directory on the website endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/ the data that is returned will be for the object with the key name images/index.html) The suffix must not be empty and must not include a slash character.
+idSuffix :: Lens' IndexDocument Text
+idSuffix = lens _idSuffix (\ s a -> s{_idSuffix = a})
+
+instance FromXML IndexDocument where
+        parseXML x = IndexDocument' <$> (x .@ "Suffix")
+
+instance Hashable IndexDocument where
+
+instance NFData IndexDocument where
+
+instance ToXML IndexDocument where
+        toXML IndexDocument'{..}
+          = mconcat ["Suffix" @= _idSuffix]
+
+-- | /See:/ 'initiator' smart constructor.
+data Initiator = Initiator'
+  { _iDisplayName :: !(Maybe Text)
+  , _iId          :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Initiator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iDisplayName' - Name of the Principal.
+--
+-- * 'iId' - If the principal is an AWS account, it provides the Canonical User ID. If the principal is an IAM User, it provides a user ARN value.
+initiator
+    :: Initiator
+initiator = Initiator' {_iDisplayName = Nothing, _iId = Nothing}
+
+
+-- | Name of the Principal.
+iDisplayName :: Lens' Initiator (Maybe Text)
+iDisplayName = lens _iDisplayName (\ s a -> s{_iDisplayName = a})
+
+-- | If the principal is an AWS account, it provides the Canonical User ID. If the principal is an IAM User, it provides a user ARN value.
+iId :: Lens' Initiator (Maybe Text)
+iId = lens _iId (\ s a -> s{_iId = a})
+
+instance FromXML Initiator where
+        parseXML x
+          = Initiator' <$>
+              (x .@? "DisplayName") <*> (x .@? "ID")
+
+instance Hashable Initiator where
+
+instance NFData Initiator where
+
+-- | Describes the serialization format of the object.
+--
+-- /See:/ 'inputSerialization' smart constructor.
+data InputSerialization = InputSerialization'
+  { _isJSON            :: !(Maybe JSONInput)
+  , _isCSV             :: !(Maybe CSVInput)
+  , _isCompressionType :: !(Maybe CompressionType)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InputSerialization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isJSON' - Specifies JSON as object's input serialization format.
+--
+-- * 'isCSV' - Describes the serialization of a CSV-encoded object.
+--
+-- * 'isCompressionType' - Specifies object's compression format. Valid values: NONE, GZIP. Default Value: NONE.
+inputSerialization
+    :: InputSerialization
+inputSerialization =
+  InputSerialization'
+    {_isJSON = Nothing, _isCSV = Nothing, _isCompressionType = Nothing}
+
+
+-- | Specifies JSON as object's input serialization format.
+isJSON :: Lens' InputSerialization (Maybe JSONInput)
+isJSON = lens _isJSON (\ s a -> s{_isJSON = a})
+
+-- | Describes the serialization of a CSV-encoded object.
+isCSV :: Lens' InputSerialization (Maybe CSVInput)
+isCSV = lens _isCSV (\ s a -> s{_isCSV = a})
+
+-- | Specifies object's compression format. Valid values: NONE, GZIP. Default Value: NONE.
+isCompressionType :: Lens' InputSerialization (Maybe CompressionType)
+isCompressionType = lens _isCompressionType (\ s a -> s{_isCompressionType = a})
+
+instance Hashable InputSerialization where
+
+instance NFData InputSerialization where
+
+instance ToXML InputSerialization where
+        toXML InputSerialization'{..}
+          = mconcat
+              ["JSON" @= _isJSON, "CSV" @= _isCSV,
+               "CompressionType" @= _isCompressionType]
+
+-- | /See:/ 'inventoryConfiguration' smart constructor.
+data InventoryConfiguration = InventoryConfiguration'
+  { _icOptionalFields         :: !(Maybe [InventoryOptionalField])
+  , _icFilter                 :: !(Maybe InventoryFilter)
+  , _icDestination            :: !InventoryDestination
+  , _icIsEnabled              :: !Bool
+  , _icId                     :: !Text
+  , _icIncludedObjectVersions :: !InventoryIncludedObjectVersions
+  , _icSchedule               :: !InventorySchedule
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icOptionalFields' - Contains the optional fields that are included in the inventory results.
+--
+-- * 'icFilter' - Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
+--
+-- * 'icDestination' - Contains information about where to publish the inventory results.
+--
+-- * 'icIsEnabled' - Specifies whether the inventory is enabled or disabled.
+--
+-- * 'icId' - The ID used to identify the inventory configuration.
+--
+-- * 'icIncludedObjectVersions' - Specifies which object version(s) to included in the inventory results.
+--
+-- * 'icSchedule' - Specifies the schedule for generating inventory results.
+inventoryConfiguration
+    :: InventoryDestination -- ^ 'icDestination'
+    -> Bool -- ^ 'icIsEnabled'
+    -> Text -- ^ 'icId'
+    -> InventoryIncludedObjectVersions -- ^ 'icIncludedObjectVersions'
+    -> InventorySchedule -- ^ 'icSchedule'
+    -> InventoryConfiguration
+inventoryConfiguration pDestination_ pIsEnabled_ pId_ pIncludedObjectVersions_ pSchedule_ =
+  InventoryConfiguration'
+    { _icOptionalFields = Nothing
+    , _icFilter = Nothing
+    , _icDestination = pDestination_
+    , _icIsEnabled = pIsEnabled_
+    , _icId = pId_
+    , _icIncludedObjectVersions = pIncludedObjectVersions_
+    , _icSchedule = pSchedule_
+    }
+
+
+-- | Contains the optional fields that are included in the inventory results.
+icOptionalFields :: Lens' InventoryConfiguration [InventoryOptionalField]
+icOptionalFields = lens _icOptionalFields (\ s a -> s{_icOptionalFields = a}) . _Default . _Coerce
+
+-- | Specifies an inventory filter. The inventory only includes objects that meet the filter's criteria.
+icFilter :: Lens' InventoryConfiguration (Maybe InventoryFilter)
+icFilter = lens _icFilter (\ s a -> s{_icFilter = a})
+
+-- | Contains information about where to publish the inventory results.
+icDestination :: Lens' InventoryConfiguration InventoryDestination
+icDestination = lens _icDestination (\ s a -> s{_icDestination = a})
+
+-- | Specifies whether the inventory is enabled or disabled.
+icIsEnabled :: Lens' InventoryConfiguration Bool
+icIsEnabled = lens _icIsEnabled (\ s a -> s{_icIsEnabled = a})
+
+-- | The ID used to identify the inventory configuration.
+icId :: Lens' InventoryConfiguration Text
+icId = lens _icId (\ s a -> s{_icId = a})
+
+-- | Specifies which object version(s) to included in the inventory results.
+icIncludedObjectVersions :: Lens' InventoryConfiguration InventoryIncludedObjectVersions
+icIncludedObjectVersions = lens _icIncludedObjectVersions (\ s a -> s{_icIncludedObjectVersions = a})
+
+-- | Specifies the schedule for generating inventory results.
+icSchedule :: Lens' InventoryConfiguration InventorySchedule
+icSchedule = lens _icSchedule (\ s a -> s{_icSchedule = a})
+
+instance FromXML InventoryConfiguration where
+        parseXML x
+          = InventoryConfiguration' <$>
+              (x .@? "OptionalFields" .!@ mempty >>=
+                 may (parseXMLList "Field"))
+                <*> (x .@? "Filter")
+                <*> (x .@ "Destination")
+                <*> (x .@ "IsEnabled")
+                <*> (x .@ "Id")
+                <*> (x .@ "IncludedObjectVersions")
+                <*> (x .@ "Schedule")
+
+instance Hashable InventoryConfiguration where
+
+instance NFData InventoryConfiguration where
+
+instance ToXML InventoryConfiguration where
+        toXML InventoryConfiguration'{..}
+          = mconcat
+              ["OptionalFields" @=
+                 toXML (toXMLList "Field" <$> _icOptionalFields),
+               "Filter" @= _icFilter,
+               "Destination" @= _icDestination,
+               "IsEnabled" @= _icIsEnabled, "Id" @= _icId,
+               "IncludedObjectVersions" @=
+                 _icIncludedObjectVersions,
+               "Schedule" @= _icSchedule]
+
+-- | /See:/ 'inventoryDestination' smart constructor.
+newtype InventoryDestination = InventoryDestination'
+  { _idS3BucketDestination :: InventoryS3BucketDestination
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idS3BucketDestination' - Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
+inventoryDestination
+    :: InventoryS3BucketDestination -- ^ 'idS3BucketDestination'
+    -> InventoryDestination
+inventoryDestination pS3BucketDestination_ =
+  InventoryDestination' {_idS3BucketDestination = pS3BucketDestination_}
+
+
+-- | Contains the bucket name, file format, bucket owner (optional), and prefix (optional) where inventory results are published.
+idS3BucketDestination :: Lens' InventoryDestination InventoryS3BucketDestination
+idS3BucketDestination = lens _idS3BucketDestination (\ s a -> s{_idS3BucketDestination = a})
+
+instance FromXML InventoryDestination where
+        parseXML x
+          = InventoryDestination' <$>
+              (x .@ "S3BucketDestination")
+
+instance Hashable InventoryDestination where
+
+instance NFData InventoryDestination where
+
+instance ToXML InventoryDestination where
+        toXML InventoryDestination'{..}
+          = mconcat
+              ["S3BucketDestination" @= _idS3BucketDestination]
+
+-- | Contains the type of server-side encryption used to encrypt the inventory results.
+--
+-- /See:/ 'inventoryEncryption' smart constructor.
+data InventoryEncryption = InventoryEncryption'
+  { _ieSSES3  :: !(Maybe SSES3)
+  , _ieSSEKMS :: !(Maybe SSEKMS)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryEncryption' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ieSSES3' - Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
+--
+-- * 'ieSSEKMS' - Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
+inventoryEncryption
+    :: InventoryEncryption
+inventoryEncryption =
+  InventoryEncryption' {_ieSSES3 = Nothing, _ieSSEKMS = Nothing}
+
+
+-- | Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
+ieSSES3 :: Lens' InventoryEncryption (Maybe SSES3)
+ieSSES3 = lens _ieSSES3 (\ s a -> s{_ieSSES3 = a})
+
+-- | Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
+ieSSEKMS :: Lens' InventoryEncryption (Maybe SSEKMS)
+ieSSEKMS = lens _ieSSEKMS (\ s a -> s{_ieSSEKMS = a})
+
+instance FromXML InventoryEncryption where
+        parseXML x
+          = InventoryEncryption' <$>
+              (x .@? "SSE-S3") <*> (x .@? "SSE-KMS")
+
+instance Hashable InventoryEncryption where
+
+instance NFData InventoryEncryption where
+
+instance ToXML InventoryEncryption where
+        toXML InventoryEncryption'{..}
+          = mconcat
+              ["SSE-S3" @= _ieSSES3, "SSE-KMS" @= _ieSSEKMS]
+
+-- | /See:/ 'inventoryFilter' smart constructor.
+newtype InventoryFilter = InventoryFilter'
+  { _ifPrefix :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ifPrefix' - The prefix that an object must have to be included in the inventory results.
+inventoryFilter
+    :: Text -- ^ 'ifPrefix'
+    -> InventoryFilter
+inventoryFilter pPrefix_ = InventoryFilter' {_ifPrefix = pPrefix_}
+
+
+-- | The prefix that an object must have to be included in the inventory results.
+ifPrefix :: Lens' InventoryFilter Text
+ifPrefix = lens _ifPrefix (\ s a -> s{_ifPrefix = a})
+
+instance FromXML InventoryFilter where
+        parseXML x = InventoryFilter' <$> (x .@ "Prefix")
+
+instance Hashable InventoryFilter where
+
+instance NFData InventoryFilter where
+
+instance ToXML InventoryFilter where
+        toXML InventoryFilter'{..}
+          = mconcat ["Prefix" @= _ifPrefix]
+
+-- | /See:/ 'inventoryS3BucketDestination' smart constructor.
+data InventoryS3BucketDestination = InventoryS3BucketDestination'
+  { _isbdPrefix     :: !(Maybe Text)
+  , _isbdAccountId  :: !(Maybe Text)
+  , _isbdEncryption :: !(Maybe InventoryEncryption)
+  , _isbdBucket     :: !BucketName
+  , _isbdFormat     :: !InventoryFormat
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventoryS3BucketDestination' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isbdPrefix' - The prefix that is prepended to all inventory results.
+--
+-- * 'isbdAccountId' - The ID of the account that owns the destination bucket.
+--
+-- * 'isbdEncryption' - Contains the type of server-side encryption used to encrypt the inventory results.
+--
+-- * 'isbdBucket' - The Amazon resource name (ARN) of the bucket where inventory results will be published.
+--
+-- * 'isbdFormat' - Specifies the output format of the inventory results.
+inventoryS3BucketDestination
+    :: BucketName -- ^ 'isbdBucket'
+    -> InventoryFormat -- ^ 'isbdFormat'
+    -> InventoryS3BucketDestination
+inventoryS3BucketDestination pBucket_ pFormat_ =
+  InventoryS3BucketDestination'
+    { _isbdPrefix = Nothing
+    , _isbdAccountId = Nothing
+    , _isbdEncryption = Nothing
+    , _isbdBucket = pBucket_
+    , _isbdFormat = pFormat_
+    }
+
+
+-- | The prefix that is prepended to all inventory results.
+isbdPrefix :: Lens' InventoryS3BucketDestination (Maybe Text)
+isbdPrefix = lens _isbdPrefix (\ s a -> s{_isbdPrefix = a})
+
+-- | The ID of the account that owns the destination bucket.
+isbdAccountId :: Lens' InventoryS3BucketDestination (Maybe Text)
+isbdAccountId = lens _isbdAccountId (\ s a -> s{_isbdAccountId = a})
+
+-- | Contains the type of server-side encryption used to encrypt the inventory results.
+isbdEncryption :: Lens' InventoryS3BucketDestination (Maybe InventoryEncryption)
+isbdEncryption = lens _isbdEncryption (\ s a -> s{_isbdEncryption = a})
+
+-- | The Amazon resource name (ARN) of the bucket where inventory results will be published.
+isbdBucket :: Lens' InventoryS3BucketDestination BucketName
+isbdBucket = lens _isbdBucket (\ s a -> s{_isbdBucket = a})
+
+-- | Specifies the output format of the inventory results.
+isbdFormat :: Lens' InventoryS3BucketDestination InventoryFormat
+isbdFormat = lens _isbdFormat (\ s a -> s{_isbdFormat = a})
+
+instance FromXML InventoryS3BucketDestination where
+        parseXML x
+          = InventoryS3BucketDestination' <$>
+              (x .@? "Prefix") <*> (x .@? "AccountId") <*>
+                (x .@? "Encryption")
+                <*> (x .@ "Bucket")
+                <*> (x .@ "Format")
+
+instance Hashable InventoryS3BucketDestination where
+
+instance NFData InventoryS3BucketDestination where
+
+instance ToXML InventoryS3BucketDestination where
+        toXML InventoryS3BucketDestination'{..}
+          = mconcat
+              ["Prefix" @= _isbdPrefix,
+               "AccountId" @= _isbdAccountId,
+               "Encryption" @= _isbdEncryption,
+               "Bucket" @= _isbdBucket, "Format" @= _isbdFormat]
+
+-- | /See:/ 'inventorySchedule' smart constructor.
+newtype InventorySchedule = InventorySchedule'
+  { _isFrequency :: InventoryFrequency
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'InventorySchedule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isFrequency' - Specifies how frequently inventory results are produced.
+inventorySchedule
+    :: InventoryFrequency -- ^ 'isFrequency'
+    -> InventorySchedule
+inventorySchedule pFrequency_ = InventorySchedule' {_isFrequency = pFrequency_}
+
+
+-- | Specifies how frequently inventory results are produced.
+isFrequency :: Lens' InventorySchedule InventoryFrequency
+isFrequency = lens _isFrequency (\ s a -> s{_isFrequency = a})
+
+instance FromXML InventorySchedule where
+        parseXML x
+          = InventorySchedule' <$> (x .@ "Frequency")
+
+instance Hashable InventorySchedule where
+
+instance NFData InventorySchedule where
+
+instance ToXML InventorySchedule where
+        toXML InventorySchedule'{..}
+          = mconcat ["Frequency" @= _isFrequency]
+
+-- | /See:/ 'jsonInput' smart constructor.
+newtype JSONInput = JSONInput'
+  { _jiType :: Maybe JSONType
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'JSONInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jiType' - The type of JSON. Valid values: Document, Lines.
+jsonInput
+    :: JSONInput
+jsonInput = JSONInput' {_jiType = Nothing}
+
+
+-- | The type of JSON. Valid values: Document, Lines.
+jiType :: Lens' JSONInput (Maybe JSONType)
+jiType = lens _jiType (\ s a -> s{_jiType = a})
+
+instance Hashable JSONInput where
+
+instance NFData JSONInput where
+
+instance ToXML JSONInput where
+        toXML JSONInput'{..} = mconcat ["Type" @= _jiType]
+
+-- | /See:/ 'jsonOutput' smart constructor.
+newtype JSONOutput = JSONOutput'
+  { _joRecordDelimiter :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'JSONOutput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'joRecordDelimiter' - The value used to separate individual records in the output.
+jsonOutput
+    :: JSONOutput
+jsonOutput = JSONOutput' {_joRecordDelimiter = Nothing}
+
+
+-- | The value used to separate individual records in the output.
+joRecordDelimiter :: Lens' JSONOutput (Maybe Text)
+joRecordDelimiter = lens _joRecordDelimiter (\ s a -> s{_joRecordDelimiter = a})
+
+instance Hashable JSONOutput where
+
+instance NFData JSONOutput where
+
+instance ToXML JSONOutput where
+        toXML JSONOutput'{..}
+          = mconcat ["RecordDelimiter" @= _joRecordDelimiter]
+
+-- | Container for specifying the AWS Lambda notification configuration.
+--
+-- /See:/ 'lambdaFunctionConfiguration' smart constructor.
+data LambdaFunctionConfiguration = LambdaFunctionConfiguration'
+  { _lfcId                :: !(Maybe Text)
+  , _lfcFilter            :: !(Maybe NotificationConfigurationFilter)
+  , _lfcLambdaFunctionARN :: !Text
+  , _lfcEvents            :: ![Event]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LambdaFunctionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfcId' - Undocumented member.
+--
+-- * 'lfcFilter' - Undocumented member.
+--
+-- * 'lfcLambdaFunctionARN' - Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
+--
+-- * 'lfcEvents' - Undocumented member.
+lambdaFunctionConfiguration
+    :: Text -- ^ 'lfcLambdaFunctionARN'
+    -> LambdaFunctionConfiguration
+lambdaFunctionConfiguration pLambdaFunctionARN_ =
+  LambdaFunctionConfiguration'
+    { _lfcId = Nothing
+    , _lfcFilter = Nothing
+    , _lfcLambdaFunctionARN = pLambdaFunctionARN_
+    , _lfcEvents = mempty
+    }
+
+
+-- | Undocumented member.
+lfcId :: Lens' LambdaFunctionConfiguration (Maybe Text)
+lfcId = lens _lfcId (\ s a -> s{_lfcId = a})
+
+-- | Undocumented member.
+lfcFilter :: Lens' LambdaFunctionConfiguration (Maybe NotificationConfigurationFilter)
+lfcFilter = lens _lfcFilter (\ s a -> s{_lfcFilter = a})
+
+-- | Lambda cloud function ARN that Amazon S3 can invoke when it detects events of the specified type.
+lfcLambdaFunctionARN :: Lens' LambdaFunctionConfiguration Text
+lfcLambdaFunctionARN = lens _lfcLambdaFunctionARN (\ s a -> s{_lfcLambdaFunctionARN = a})
+
+-- | Undocumented member.
+lfcEvents :: Lens' LambdaFunctionConfiguration [Event]
+lfcEvents = lens _lfcEvents (\ s a -> s{_lfcEvents = a}) . _Coerce
+
+instance FromXML LambdaFunctionConfiguration where
+        parseXML x
+          = LambdaFunctionConfiguration' <$>
+              (x .@? "Id") <*> (x .@? "Filter") <*>
+                (x .@ "CloudFunction")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable LambdaFunctionConfiguration where
+
+instance NFData LambdaFunctionConfiguration where
+
+instance ToXML LambdaFunctionConfiguration where
+        toXML LambdaFunctionConfiguration'{..}
+          = mconcat
+              ["Id" @= _lfcId, "Filter" @= _lfcFilter,
+               "CloudFunction" @= _lfcLambdaFunctionARN,
+               toXMLList "Event" _lfcEvents]
+
+-- | /See:/ 'lifecycleExpiration' smart constructor.
+data LifecycleExpiration = LifecycleExpiration'
+  { _leDays                      :: !(Maybe Int)
+  , _leDate                      :: !(Maybe RFC822)
+  , _leExpiredObjectDeleteMarker :: !(Maybe Bool)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LifecycleExpiration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'leDays' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+--
+-- * 'leDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+--
+-- * 'leExpiredObjectDeleteMarker' - Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
+lifecycleExpiration
+    :: LifecycleExpiration
+lifecycleExpiration =
+  LifecycleExpiration'
+    { _leDays = Nothing
+    , _leDate = Nothing
+    , _leExpiredObjectDeleteMarker = Nothing
+    }
+
+
+-- | Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+leDays :: Lens' LifecycleExpiration (Maybe Int)
+leDays = lens _leDays (\ s a -> s{_leDays = a})
+
+-- | Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+leDate :: Lens' LifecycleExpiration (Maybe UTCTime)
+leDate = lens _leDate (\ s a -> s{_leDate = a}) . mapping _Time
+
+-- | Indicates whether Amazon S3 will remove a delete marker with no noncurrent versions. If set to true, the delete marker will be expired; if set to false the policy takes no action. This cannot be specified with Days or Date in a Lifecycle Expiration Policy.
+leExpiredObjectDeleteMarker :: Lens' LifecycleExpiration (Maybe Bool)
+leExpiredObjectDeleteMarker = lens _leExpiredObjectDeleteMarker (\ s a -> s{_leExpiredObjectDeleteMarker = a})
+
+instance FromXML LifecycleExpiration where
+        parseXML x
+          = LifecycleExpiration' <$>
+              (x .@? "Days") <*> (x .@? "Date") <*>
+                (x .@? "ExpiredObjectDeleteMarker")
+
+instance Hashable LifecycleExpiration where
+
+instance NFData LifecycleExpiration where
+
+instance ToXML LifecycleExpiration where
+        toXML LifecycleExpiration'{..}
+          = mconcat
+              ["Days" @= _leDays, "Date" @= _leDate,
+               "ExpiredObjectDeleteMarker" @=
+                 _leExpiredObjectDeleteMarker]
+
+-- | /See:/ 'lifecycleRule' smart constructor.
+data LifecycleRule = LifecycleRule'
+  { _lrTransitions                    :: !(Maybe [Transition])
+  , _lrNoncurrentVersionExpiration    :: !(Maybe NoncurrentVersionExpiration)
+  , _lrPrefix                         :: !(Maybe Text)
+  , _lrNoncurrentVersionTransitions   :: !(Maybe [NoncurrentVersionTransition])
+  , _lrExpiration                     :: !(Maybe LifecycleExpiration)
+  , _lrId                             :: !(Maybe Text)
+  , _lrFilter                         :: !(Maybe LifecycleRuleFilter)
+  , _lrAbortIncompleteMultipartUpload :: !(Maybe AbortIncompleteMultipartUpload)
+  , _lrStatus                         :: !ExpirationStatus
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LifecycleRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrTransitions' - Undocumented member.
+--
+-- * 'lrNoncurrentVersionExpiration' - Undocumented member.
+--
+-- * 'lrPrefix' - Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
+--
+-- * 'lrNoncurrentVersionTransitions' - Undocumented member.
+--
+-- * 'lrExpiration' - Undocumented member.
+--
+-- * 'lrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
+--
+-- * 'lrFilter' - Undocumented member.
+--
+-- * 'lrAbortIncompleteMultipartUpload' - Undocumented member.
+--
+-- * 'lrStatus' - If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
+lifecycleRule
+    :: ExpirationStatus -- ^ 'lrStatus'
+    -> LifecycleRule
+lifecycleRule pStatus_ =
+  LifecycleRule'
+    { _lrTransitions = Nothing
+    , _lrNoncurrentVersionExpiration = Nothing
+    , _lrPrefix = Nothing
+    , _lrNoncurrentVersionTransitions = Nothing
+    , _lrExpiration = Nothing
+    , _lrId = Nothing
+    , _lrFilter = Nothing
+    , _lrAbortIncompleteMultipartUpload = Nothing
+    , _lrStatus = pStatus_
+    }
+
+
+-- | Undocumented member.
+lrTransitions :: Lens' LifecycleRule [Transition]
+lrTransitions = lens _lrTransitions (\ s a -> s{_lrTransitions = a}) . _Default . _Coerce
+
+-- | Undocumented member.
+lrNoncurrentVersionExpiration :: Lens' LifecycleRule (Maybe NoncurrentVersionExpiration)
+lrNoncurrentVersionExpiration = lens _lrNoncurrentVersionExpiration (\ s a -> s{_lrNoncurrentVersionExpiration = a})
+
+-- | Prefix identifying one or more objects to which the rule applies. This is deprecated; use Filter instead.
+lrPrefix :: Lens' LifecycleRule (Maybe Text)
+lrPrefix = lens _lrPrefix (\ s a -> s{_lrPrefix = a})
+
+-- | Undocumented member.
+lrNoncurrentVersionTransitions :: Lens' LifecycleRule [NoncurrentVersionTransition]
+lrNoncurrentVersionTransitions = lens _lrNoncurrentVersionTransitions (\ s a -> s{_lrNoncurrentVersionTransitions = a}) . _Default . _Coerce
+
+-- | Undocumented member.
+lrExpiration :: Lens' LifecycleRule (Maybe LifecycleExpiration)
+lrExpiration = lens _lrExpiration (\ s a -> s{_lrExpiration = a})
+
+-- | Unique identifier for the rule. The value cannot be longer than 255 characters.
+lrId :: Lens' LifecycleRule (Maybe Text)
+lrId = lens _lrId (\ s a -> s{_lrId = a})
+
+-- | Undocumented member.
+lrFilter :: Lens' LifecycleRule (Maybe LifecycleRuleFilter)
+lrFilter = lens _lrFilter (\ s a -> s{_lrFilter = a})
+
+-- | Undocumented member.
+lrAbortIncompleteMultipartUpload :: Lens' LifecycleRule (Maybe AbortIncompleteMultipartUpload)
+lrAbortIncompleteMultipartUpload = lens _lrAbortIncompleteMultipartUpload (\ s a -> s{_lrAbortIncompleteMultipartUpload = a})
+
+-- | If 'Enabled', the rule is currently being applied. If 'Disabled', the rule is not currently being applied.
+lrStatus :: Lens' LifecycleRule ExpirationStatus
+lrStatus = lens _lrStatus (\ s a -> s{_lrStatus = a})
+
+instance FromXML LifecycleRule where
+        parseXML x
+          = LifecycleRule' <$>
+              (may (parseXMLList "Transition") x) <*>
+                (x .@? "NoncurrentVersionExpiration")
+                <*> (x .@? "Prefix")
+                <*>
+                (may (parseXMLList "NoncurrentVersionTransition") x)
+                <*> (x .@? "Expiration")
+                <*> (x .@? "ID")
+                <*> (x .@? "Filter")
+                <*> (x .@? "AbortIncompleteMultipartUpload")
+                <*> (x .@ "Status")
+
+instance Hashable LifecycleRule where
+
+instance NFData LifecycleRule where
+
+instance ToXML LifecycleRule where
+        toXML LifecycleRule'{..}
+          = mconcat
+              [toXML (toXMLList "Transition" <$> _lrTransitions),
+               "NoncurrentVersionExpiration" @=
+                 _lrNoncurrentVersionExpiration,
+               "Prefix" @= _lrPrefix,
+               toXML
+                 (toXMLList "NoncurrentVersionTransition" <$>
+                    _lrNoncurrentVersionTransitions),
+               "Expiration" @= _lrExpiration, "ID" @= _lrId,
+               "Filter" @= _lrFilter,
+               "AbortIncompleteMultipartUpload" @=
+                 _lrAbortIncompleteMultipartUpload,
+               "Status" @= _lrStatus]
+
+-- | This is used in a Lifecycle Rule Filter to apply a logical AND to two or more predicates. The Lifecycle Rule will apply to any object matching all of the predicates configured inside the And operator.
+--
+-- /See:/ 'lifecycleRuleAndOperator' smart constructor.
+data LifecycleRuleAndOperator = LifecycleRuleAndOperator'
+  { _lraoPrefix :: !(Maybe Text)
+  , _lraoTags   :: !(Maybe [Tag])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LifecycleRuleAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lraoPrefix' - Undocumented member.
+--
+-- * 'lraoTags' - All of these tags must exist in the object's tag set in order for the rule to apply.
+lifecycleRuleAndOperator
+    :: LifecycleRuleAndOperator
+lifecycleRuleAndOperator =
+  LifecycleRuleAndOperator' {_lraoPrefix = Nothing, _lraoTags = Nothing}
+
+
+-- | Undocumented member.
+lraoPrefix :: Lens' LifecycleRuleAndOperator (Maybe Text)
+lraoPrefix = lens _lraoPrefix (\ s a -> s{_lraoPrefix = a})
+
+-- | All of these tags must exist in the object's tag set in order for the rule to apply.
+lraoTags :: Lens' LifecycleRuleAndOperator [Tag]
+lraoTags = lens _lraoTags (\ s a -> s{_lraoTags = a}) . _Default . _Coerce
+
+instance FromXML LifecycleRuleAndOperator where
+        parseXML x
+          = LifecycleRuleAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable LifecycleRuleAndOperator where
+
+instance NFData LifecycleRuleAndOperator where
+
+instance ToXML LifecycleRuleAndOperator where
+        toXML LifecycleRuleAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _lraoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _lraoTags)]
+
+-- | The Filter is used to identify objects that a Lifecycle Rule applies to. A Filter must have exactly one of Prefix, Tag, or And specified.
+--
+-- /See:/ 'lifecycleRuleFilter' smart constructor.
+data LifecycleRuleFilter = LifecycleRuleFilter'
+  { _lrfTag    :: !(Maybe Tag)
+  , _lrfPrefix :: !(Maybe Text)
+  , _lrfAnd    :: !(Maybe LifecycleRuleAndOperator)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LifecycleRuleFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lrfTag' - This tag must exist in the object's tag set in order for the rule to apply.
+--
+-- * 'lrfPrefix' - Prefix identifying one or more objects to which the rule applies.
+--
+-- * 'lrfAnd' - Undocumented member.
+lifecycleRuleFilter
+    :: LifecycleRuleFilter
+lifecycleRuleFilter =
+  LifecycleRuleFilter'
+    {_lrfTag = Nothing, _lrfPrefix = Nothing, _lrfAnd = Nothing}
+
+
+-- | This tag must exist in the object's tag set in order for the rule to apply.
+lrfTag :: Lens' LifecycleRuleFilter (Maybe Tag)
+lrfTag = lens _lrfTag (\ s a -> s{_lrfTag = a})
+
+-- | Prefix identifying one or more objects to which the rule applies.
+lrfPrefix :: Lens' LifecycleRuleFilter (Maybe Text)
+lrfPrefix = lens _lrfPrefix (\ s a -> s{_lrfPrefix = a})
+
+-- | Undocumented member.
+lrfAnd :: Lens' LifecycleRuleFilter (Maybe LifecycleRuleAndOperator)
+lrfAnd = lens _lrfAnd (\ s a -> s{_lrfAnd = a})
+
+instance FromXML LifecycleRuleFilter where
+        parseXML x
+          = LifecycleRuleFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable LifecycleRuleFilter where
+
+instance NFData LifecycleRuleFilter where
+
+instance ToXML LifecycleRuleFilter where
+        toXML LifecycleRuleFilter'{..}
+          = mconcat
+              ["Tag" @= _lrfTag, "Prefix" @= _lrfPrefix,
+               "And" @= _lrfAnd]
+
+-- | Container for logging information. Presence of this element indicates that logging is enabled. Parameters TargetBucket and TargetPrefix are required in this case.
+--
+-- /See:/ 'loggingEnabled' smart constructor.
+data LoggingEnabled = LoggingEnabled'
+  { _leTargetGrants :: !(Maybe [TargetGrant])
+  , _leTargetBucket :: !Text
+  , _leTargetPrefix :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LoggingEnabled' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'leTargetGrants' - Undocumented member.
+--
+-- * 'leTargetBucket' - Specifies the bucket where you want Amazon S3 to store server access logs. You can have your logs delivered to any bucket that you own, including the same bucket that is being logged. You can also configure multiple buckets to deliver their logs to the same target bucket. In this case you should choose a different TargetPrefix for each source bucket so that the delivered log files can be distinguished by key.
+--
+-- * 'leTargetPrefix' - This element lets you specify a prefix for the keys that the log files will be stored under.
+loggingEnabled
+    :: Text -- ^ 'leTargetBucket'
+    -> Text -- ^ 'leTargetPrefix'
+    -> LoggingEnabled
+loggingEnabled pTargetBucket_ pTargetPrefix_ =
+  LoggingEnabled'
+    { _leTargetGrants = Nothing
+    , _leTargetBucket = pTargetBucket_
+    , _leTargetPrefix = pTargetPrefix_
+    }
+
+
+-- | Undocumented member.
+leTargetGrants :: Lens' LoggingEnabled [TargetGrant]
+leTargetGrants = lens _leTargetGrants (\ s a -> s{_leTargetGrants = a}) . _Default . _Coerce
+
+-- | Specifies the bucket where you want Amazon S3 to store server access logs. You can have your logs delivered to any bucket that you own, including the same bucket that is being logged. You can also configure multiple buckets to deliver their logs to the same target bucket. In this case you should choose a different TargetPrefix for each source bucket so that the delivered log files can be distinguished by key.
+leTargetBucket :: Lens' LoggingEnabled Text
+leTargetBucket = lens _leTargetBucket (\ s a -> s{_leTargetBucket = a})
+
+-- | This element lets you specify a prefix for the keys that the log files will be stored under.
+leTargetPrefix :: Lens' LoggingEnabled Text
+leTargetPrefix = lens _leTargetPrefix (\ s a -> s{_leTargetPrefix = a})
+
+instance FromXML LoggingEnabled where
+        parseXML x
+          = LoggingEnabled' <$>
+              (x .@? "TargetGrants" .!@ mempty >>=
+                 may (parseXMLList "Grant"))
+                <*> (x .@ "TargetBucket")
+                <*> (x .@ "TargetPrefix")
+
+instance Hashable LoggingEnabled where
+
+instance NFData LoggingEnabled where
+
+instance ToXML LoggingEnabled where
+        toXML LoggingEnabled'{..}
+          = mconcat
+              ["TargetGrants" @=
+                 toXML (toXMLList "Grant" <$> _leTargetGrants),
+               "TargetBucket" @= _leTargetBucket,
+               "TargetPrefix" @= _leTargetPrefix]
+
+-- | A metadata key-value pair to store with an object.
+--
+-- /See:/ 'metadataEntry' smart constructor.
+data MetadataEntry = MetadataEntry'
+  { _meValue :: !(Maybe Text)
+  , _meName  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MetadataEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'meValue' - Undocumented member.
+--
+-- * 'meName' - Undocumented member.
+metadataEntry
+    :: MetadataEntry
+metadataEntry = MetadataEntry' {_meValue = Nothing, _meName = Nothing}
+
+
+-- | Undocumented member.
+meValue :: Lens' MetadataEntry (Maybe Text)
+meValue = lens _meValue (\ s a -> s{_meValue = a})
+
+-- | Undocumented member.
+meName :: Lens' MetadataEntry (Maybe Text)
+meName = lens _meName (\ s a -> s{_meName = a})
+
+instance Hashable MetadataEntry where
+
+instance NFData MetadataEntry where
+
+instance ToXML MetadataEntry where
+        toXML MetadataEntry'{..}
+          = mconcat ["Value" @= _meValue, "Name" @= _meName]
+
+-- | /See:/ 'metricsAndOperator' smart constructor.
+data MetricsAndOperator = MetricsAndOperator'
+  { _maoPrefix :: !(Maybe Text)
+  , _maoTags   :: !(Maybe [Tag])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MetricsAndOperator' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'maoPrefix' - The prefix used when evaluating an AND predicate.
+--
+-- * 'maoTags' - The list of tags used when evaluating an AND predicate.
+metricsAndOperator
+    :: MetricsAndOperator
+metricsAndOperator =
+  MetricsAndOperator' {_maoPrefix = Nothing, _maoTags = Nothing}
+
+
+-- | The prefix used when evaluating an AND predicate.
+maoPrefix :: Lens' MetricsAndOperator (Maybe Text)
+maoPrefix = lens _maoPrefix (\ s a -> s{_maoPrefix = a})
+
+-- | The list of tags used when evaluating an AND predicate.
+maoTags :: Lens' MetricsAndOperator [Tag]
+maoTags = lens _maoTags (\ s a -> s{_maoTags = a}) . _Default . _Coerce
+
+instance FromXML MetricsAndOperator where
+        parseXML x
+          = MetricsAndOperator' <$>
+              (x .@? "Prefix") <*>
+                (x .@? "Tag" .!@ mempty >>= may (parseXMLList "Tag"))
+
+instance Hashable MetricsAndOperator where
+
+instance NFData MetricsAndOperator where
+
+instance ToXML MetricsAndOperator where
+        toXML MetricsAndOperator'{..}
+          = mconcat
+              ["Prefix" @= _maoPrefix,
+               "Tag" @= toXML (toXMLList "Tag" <$> _maoTags)]
+
+-- | /See:/ 'metricsConfiguration' smart constructor.
+data MetricsConfiguration = MetricsConfiguration'
+  { _mcFilter :: !(Maybe MetricsFilter)
+  , _mcId     :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MetricsConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mcFilter' - Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
+--
+-- * 'mcId' - The ID used to identify the metrics configuration.
+metricsConfiguration
+    :: Text -- ^ 'mcId'
+    -> MetricsConfiguration
+metricsConfiguration pId_ =
+  MetricsConfiguration' {_mcFilter = Nothing, _mcId = pId_}
+
+
+-- | Specifies a metrics configuration filter. The metrics configuration will only include objects that meet the filter's criteria. A filter must be a prefix, a tag, or a conjunction (MetricsAndOperator).
+mcFilter :: Lens' MetricsConfiguration (Maybe MetricsFilter)
+mcFilter = lens _mcFilter (\ s a -> s{_mcFilter = a})
+
+-- | The ID used to identify the metrics configuration.
+mcId :: Lens' MetricsConfiguration Text
+mcId = lens _mcId (\ s a -> s{_mcId = a})
+
+instance FromXML MetricsConfiguration where
+        parseXML x
+          = MetricsConfiguration' <$>
+              (x .@? "Filter") <*> (x .@ "Id")
+
+instance Hashable MetricsConfiguration where
+
+instance NFData MetricsConfiguration where
+
+instance ToXML MetricsConfiguration where
+        toXML MetricsConfiguration'{..}
+          = mconcat ["Filter" @= _mcFilter, "Id" @= _mcId]
+
+-- | /See:/ 'metricsFilter' smart constructor.
+data MetricsFilter = MetricsFilter'
+  { _mfTag    :: !(Maybe Tag)
+  , _mfPrefix :: !(Maybe Text)
+  , _mfAnd    :: !(Maybe MetricsAndOperator)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MetricsFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mfTag' - The tag used when evaluating a metrics filter.
+--
+-- * 'mfPrefix' - The prefix used when evaluating a metrics filter.
+--
+-- * 'mfAnd' - A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
+metricsFilter
+    :: MetricsFilter
+metricsFilter =
+  MetricsFilter' {_mfTag = Nothing, _mfPrefix = Nothing, _mfAnd = Nothing}
+
+
+-- | The tag used when evaluating a metrics filter.
+mfTag :: Lens' MetricsFilter (Maybe Tag)
+mfTag = lens _mfTag (\ s a -> s{_mfTag = a})
+
+-- | The prefix used when evaluating a metrics filter.
+mfPrefix :: Lens' MetricsFilter (Maybe Text)
+mfPrefix = lens _mfPrefix (\ s a -> s{_mfPrefix = a})
+
+-- | A conjunction (logical AND) of predicates, which is used in evaluating a metrics filter. The operator must have at least two predicates, and an object must match all of the predicates in order for the filter to apply.
+mfAnd :: Lens' MetricsFilter (Maybe MetricsAndOperator)
+mfAnd = lens _mfAnd (\ s a -> s{_mfAnd = a})
+
+instance FromXML MetricsFilter where
+        parseXML x
+          = MetricsFilter' <$>
+              (x .@? "Tag") <*> (x .@? "Prefix") <*> (x .@? "And")
+
+instance Hashable MetricsFilter where
+
+instance NFData MetricsFilter where
+
+instance ToXML MetricsFilter where
+        toXML MetricsFilter'{..}
+          = mconcat
+              ["Tag" @= _mfTag, "Prefix" @= _mfPrefix,
+               "And" @= _mfAnd]
+
+-- | /See:/ 'multipartUpload' smart constructor.
+data MultipartUpload = MultipartUpload'
+  { _muInitiated    :: !(Maybe RFC822)
+  , _muInitiator    :: !(Maybe Initiator)
+  , _muOwner        :: !(Maybe Owner)
+  , _muKey          :: !(Maybe ObjectKey)
+  , _muStorageClass :: !(Maybe StorageClass)
+  , _muUploadId     :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MultipartUpload' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'muInitiated' - Date and time at which the multipart upload was initiated.
+--
+-- * 'muInitiator' - Identifies who initiated the multipart upload.
+--
+-- * 'muOwner' - Undocumented member.
+--
+-- * 'muKey' - Key of the object for which the multipart upload was initiated.
+--
+-- * 'muStorageClass' - The class of storage used to store the object.
+--
+-- * 'muUploadId' - Upload ID that identifies the multipart upload.
+multipartUpload
+    :: MultipartUpload
+multipartUpload =
+  MultipartUpload'
+    { _muInitiated = Nothing
+    , _muInitiator = Nothing
+    , _muOwner = Nothing
+    , _muKey = Nothing
+    , _muStorageClass = Nothing
+    , _muUploadId = Nothing
+    }
+
+
+-- | Date and time at which the multipart upload was initiated.
+muInitiated :: Lens' MultipartUpload (Maybe UTCTime)
+muInitiated = lens _muInitiated (\ s a -> s{_muInitiated = a}) . mapping _Time
+
+-- | Identifies who initiated the multipart upload.
+muInitiator :: Lens' MultipartUpload (Maybe Initiator)
+muInitiator = lens _muInitiator (\ s a -> s{_muInitiator = a})
+
+-- | Undocumented member.
+muOwner :: Lens' MultipartUpload (Maybe Owner)
+muOwner = lens _muOwner (\ s a -> s{_muOwner = a})
+
+-- | Key of the object for which the multipart upload was initiated.
+muKey :: Lens' MultipartUpload (Maybe ObjectKey)
+muKey = lens _muKey (\ s a -> s{_muKey = a})
+
+-- | The class of storage used to store the object.
+muStorageClass :: Lens' MultipartUpload (Maybe StorageClass)
+muStorageClass = lens _muStorageClass (\ s a -> s{_muStorageClass = a})
+
+-- | Upload ID that identifies the multipart upload.
+muUploadId :: Lens' MultipartUpload (Maybe Text)
+muUploadId = lens _muUploadId (\ s a -> s{_muUploadId = a})
+
+instance FromXML MultipartUpload where
+        parseXML x
+          = MultipartUpload' <$>
+              (x .@? "Initiated") <*> (x .@? "Initiator") <*>
+                (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "UploadId")
+
+instance Hashable MultipartUpload where
+
+instance NFData MultipartUpload where
+
+-- | Specifies when noncurrent object versions expire. Upon expiration, Amazon S3 permanently deletes the noncurrent object versions. You set this lifecycle configuration action on a bucket that has versioning enabled (or suspended) to request that Amazon S3 delete noncurrent object versions at a specific period in the object's lifetime.
+--
+-- /See:/ 'noncurrentVersionExpiration' smart constructor.
+newtype NoncurrentVersionExpiration = NoncurrentVersionExpiration'
+  { _nveNoncurrentDays :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'NoncurrentVersionExpiration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nveNoncurrentDays' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+noncurrentVersionExpiration
+    :: Int -- ^ 'nveNoncurrentDays'
+    -> NoncurrentVersionExpiration
+noncurrentVersionExpiration pNoncurrentDays_ =
+  NoncurrentVersionExpiration' {_nveNoncurrentDays = pNoncurrentDays_}
+
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+nveNoncurrentDays :: Lens' NoncurrentVersionExpiration Int
+nveNoncurrentDays = lens _nveNoncurrentDays (\ s a -> s{_nveNoncurrentDays = a})
+
+instance FromXML NoncurrentVersionExpiration where
+        parseXML x
+          = NoncurrentVersionExpiration' <$>
+              (x .@ "NoncurrentDays")
+
+instance Hashable NoncurrentVersionExpiration where
+
+instance NFData NoncurrentVersionExpiration where
+
+instance ToXML NoncurrentVersionExpiration where
+        toXML NoncurrentVersionExpiration'{..}
+          = mconcat ["NoncurrentDays" @= _nveNoncurrentDays]
+
+-- | Container for the transition rule that describes when noncurrent objects transition to the STANDARD_IA, ONEZONE_IA or GLACIER storage class. If your bucket is versioning-enabled (or versioning is suspended), you can set this action to request that Amazon S3 transition noncurrent object versions to the STANDARD_IA, ONEZONE_IA or GLACIER storage class at a specific period in the object's lifetime.
+--
+-- /See:/ 'noncurrentVersionTransition' smart constructor.
+data NoncurrentVersionTransition = NoncurrentVersionTransition'
+  { _nvtNoncurrentDays :: !Int
+  , _nvtStorageClass   :: !TransitionStorageClass
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'NoncurrentVersionTransition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nvtNoncurrentDays' - <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+--
+-- * 'nvtStorageClass' - The class of storage used to store the object.
+noncurrentVersionTransition
+    :: Int -- ^ 'nvtNoncurrentDays'
+    -> TransitionStorageClass -- ^ 'nvtStorageClass'
+    -> NoncurrentVersionTransition
+noncurrentVersionTransition pNoncurrentDays_ pStorageClass_ =
+  NoncurrentVersionTransition'
+    {_nvtNoncurrentDays = pNoncurrentDays_, _nvtStorageClass = pStorageClass_}
+
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html How Amazon S3 Calculates When an Object Became Noncurrent>
+nvtNoncurrentDays :: Lens' NoncurrentVersionTransition Int
+nvtNoncurrentDays = lens _nvtNoncurrentDays (\ s a -> s{_nvtNoncurrentDays = a})
+
+-- | The class of storage used to store the object.
+nvtStorageClass :: Lens' NoncurrentVersionTransition TransitionStorageClass
+nvtStorageClass = lens _nvtStorageClass (\ s a -> s{_nvtStorageClass = a})
+
+instance FromXML NoncurrentVersionTransition where
+        parseXML x
+          = NoncurrentVersionTransition' <$>
+              (x .@ "NoncurrentDays") <*> (x .@ "StorageClass")
+
+instance Hashable NoncurrentVersionTransition where
+
+instance NFData NoncurrentVersionTransition where
+
+instance ToXML NoncurrentVersionTransition where
+        toXML NoncurrentVersionTransition'{..}
+          = mconcat
+              ["NoncurrentDays" @= _nvtNoncurrentDays,
+               "StorageClass" @= _nvtStorageClass]
+
+-- | Container for specifying the notification configuration of the bucket. If this element is empty, notifications are turned off on the bucket.
+--
+-- /See:/ 'notificationConfiguration' smart constructor.
+data NotificationConfiguration = NotificationConfiguration'
+  { _ncQueueConfigurations          :: !(Maybe [QueueConfiguration])
+  , _ncTopicConfigurations          :: !(Maybe [TopicConfiguration])
+  , _ncLambdaFunctionConfigurations :: !(Maybe [LambdaFunctionConfiguration])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'NotificationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ncQueueConfigurations' - Undocumented member.
+--
+-- * 'ncTopicConfigurations' - Undocumented member.
+--
+-- * 'ncLambdaFunctionConfigurations' - Undocumented member.
+notificationConfiguration
+    :: NotificationConfiguration
+notificationConfiguration =
+  NotificationConfiguration'
+    { _ncQueueConfigurations = Nothing
+    , _ncTopicConfigurations = Nothing
+    , _ncLambdaFunctionConfigurations = Nothing
+    }
+
+
+-- | Undocumented member.
+ncQueueConfigurations :: Lens' NotificationConfiguration [QueueConfiguration]
+ncQueueConfigurations = lens _ncQueueConfigurations (\ s a -> s{_ncQueueConfigurations = a}) . _Default . _Coerce
+
+-- | Undocumented member.
+ncTopicConfigurations :: Lens' NotificationConfiguration [TopicConfiguration]
+ncTopicConfigurations = lens _ncTopicConfigurations (\ s a -> s{_ncTopicConfigurations = a}) . _Default . _Coerce
+
+-- | Undocumented member.
+ncLambdaFunctionConfigurations :: Lens' NotificationConfiguration [LambdaFunctionConfiguration]
+ncLambdaFunctionConfigurations = lens _ncLambdaFunctionConfigurations (\ s a -> s{_ncLambdaFunctionConfigurations = a}) . _Default . _Coerce
+
+instance FromXML NotificationConfiguration where
+        parseXML x
+          = NotificationConfiguration' <$>
+              (may (parseXMLList "QueueConfiguration") x) <*>
+                (may (parseXMLList "TopicConfiguration") x)
+                <*>
+                (may (parseXMLList "CloudFunctionConfiguration") x)
+
+instance Hashable NotificationConfiguration where
+
+instance NFData NotificationConfiguration where
+
+instance ToXML NotificationConfiguration where
+        toXML NotificationConfiguration'{..}
+          = mconcat
+              [toXML
+                 (toXMLList "QueueConfiguration" <$>
+                    _ncQueueConfigurations),
+               toXML
+                 (toXMLList "TopicConfiguration" <$>
+                    _ncTopicConfigurations),
+               toXML
+                 (toXMLList "CloudFunctionConfiguration" <$>
+                    _ncLambdaFunctionConfigurations)]
+
+-- | <http://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html Configuring Event Notifications>
+--
+-- /See:/ 'notificationConfigurationFilter' smart constructor.
+newtype NotificationConfigurationFilter = NotificationConfigurationFilter'
+  { _ncfKey :: Maybe S3KeyFilter
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'NotificationConfigurationFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ncfKey' - Undocumented member.
+notificationConfigurationFilter
+    :: NotificationConfigurationFilter
+notificationConfigurationFilter =
+  NotificationConfigurationFilter' {_ncfKey = Nothing}
+
+
+-- | Undocumented member.
+ncfKey :: Lens' NotificationConfigurationFilter (Maybe S3KeyFilter)
+ncfKey = lens _ncfKey (\ s a -> s{_ncfKey = a})
+
+instance FromXML NotificationConfigurationFilter
+         where
+        parseXML x
+          = NotificationConfigurationFilter' <$>
+              (x .@? "S3Key")
+
+instance Hashable NotificationConfigurationFilter
+         where
+
+instance NFData NotificationConfigurationFilter where
+
+instance ToXML NotificationConfigurationFilter where
+        toXML NotificationConfigurationFilter'{..}
+          = mconcat ["S3Key" @= _ncfKey]
+
+-- | /See:/ 'object'' smart constructor.
+data Object = Object'
+  { _oOwner        :: !(Maybe Owner)
+  , _oETag         :: !ETag
+  , _oSize         :: !Int
+  , _oKey          :: !ObjectKey
+  , _oStorageClass :: !ObjectStorageClass
+  , _oLastModified :: !RFC822
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Object' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oOwner' - Undocumented member.
+--
+-- * 'oETag' - Undocumented member.
+--
+-- * 'oSize' - Undocumented member.
+--
+-- * 'oKey' - Undocumented member.
+--
+-- * 'oStorageClass' - The class of storage used to store the object.
+--
+-- * 'oLastModified' - Undocumented member.
+object'
+    :: ETag -- ^ 'oETag'
+    -> Int -- ^ 'oSize'
+    -> ObjectKey -- ^ 'oKey'
+    -> ObjectStorageClass -- ^ 'oStorageClass'
+    -> UTCTime -- ^ 'oLastModified'
+    -> Object
+object' pETag_ pSize_ pKey_ pStorageClass_ pLastModified_ =
+  Object'
+    { _oOwner = Nothing
+    , _oETag = pETag_
+    , _oSize = pSize_
+    , _oKey = pKey_
+    , _oStorageClass = pStorageClass_
+    , _oLastModified = _Time # pLastModified_
+    }
+
+
+-- | Undocumented member.
+oOwner :: Lens' Object (Maybe Owner)
+oOwner = lens _oOwner (\ s a -> s{_oOwner = a})
+
+-- | Undocumented member.
+oETag :: Lens' Object ETag
+oETag = lens _oETag (\ s a -> s{_oETag = a})
+
+-- | Undocumented member.
+oSize :: Lens' Object Int
+oSize = lens _oSize (\ s a -> s{_oSize = a})
+
+-- | Undocumented member.
+oKey :: Lens' Object ObjectKey
+oKey = lens _oKey (\ s a -> s{_oKey = a})
+
+-- | The class of storage used to store the object.
+oStorageClass :: Lens' Object ObjectStorageClass
+oStorageClass = lens _oStorageClass (\ s a -> s{_oStorageClass = a})
+
+-- | Undocumented member.
+oLastModified :: Lens' Object UTCTime
+oLastModified = lens _oLastModified (\ s a -> s{_oLastModified = a}) . _Time
+
+instance FromXML Object where
+        parseXML x
+          = Object' <$>
+              (x .@? "Owner") <*> (x .@ "ETag") <*> (x .@ "Size")
+                <*> (x .@ "Key")
+                <*> (x .@ "StorageClass")
+                <*> (x .@ "LastModified")
+
+instance Hashable Object where
+
+instance NFData Object where
+
+-- | /See:/ 'objectIdentifier' smart constructor.
+data ObjectIdentifier = ObjectIdentifier'
+  { _oiVersionId :: !(Maybe ObjectVersionId)
+  , _oiKey       :: !ObjectKey
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ObjectIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oiVersionId' - VersionId for the specific version of the object to delete.
+--
+-- * 'oiKey' - Key name of the object to delete.
+objectIdentifier
+    :: ObjectKey -- ^ 'oiKey'
+    -> ObjectIdentifier
+objectIdentifier pKey_ =
+  ObjectIdentifier' {_oiVersionId = Nothing, _oiKey = pKey_}
+
+
+-- | VersionId for the specific version of the object to delete.
+oiVersionId :: Lens' ObjectIdentifier (Maybe ObjectVersionId)
+oiVersionId = lens _oiVersionId (\ s a -> s{_oiVersionId = a})
+
+-- | Key name of the object to delete.
+oiKey :: Lens' ObjectIdentifier ObjectKey
+oiKey = lens _oiKey (\ s a -> s{_oiKey = a})
+
+instance Hashable ObjectIdentifier where
+
+instance NFData ObjectIdentifier where
+
+instance ToXML ObjectIdentifier where
+        toXML ObjectIdentifier'{..}
+          = mconcat
+              ["VersionId" @= _oiVersionId, "Key" @= _oiKey]
+
+-- | /See:/ 'objectVersion' smart constructor.
+data ObjectVersion = ObjectVersion'
+  { _ovETag         :: !(Maybe ETag)
+  , _ovVersionId    :: !(Maybe ObjectVersionId)
+  , _ovSize         :: !(Maybe Int)
+  , _ovIsLatest     :: !(Maybe Bool)
+  , _ovOwner        :: !(Maybe Owner)
+  , _ovKey          :: !(Maybe ObjectKey)
+  , _ovStorageClass :: !(Maybe ObjectVersionStorageClass)
+  , _ovLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ObjectVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ovETag' - Undocumented member.
+--
+-- * 'ovVersionId' - Version ID of an object.
+--
+-- * 'ovSize' - Size in bytes of the object.
+--
+-- * 'ovIsLatest' - Specifies whether the object is (true) or is not (false) the latest version of an object.
+--
+-- * 'ovOwner' - Undocumented member.
+--
+-- * 'ovKey' - The object key.
+--
+-- * 'ovStorageClass' - The class of storage used to store the object.
+--
+-- * 'ovLastModified' - Date and time the object was last modified.
+objectVersion
+    :: ObjectVersion
+objectVersion =
+  ObjectVersion'
+    { _ovETag = Nothing
+    , _ovVersionId = Nothing
+    , _ovSize = Nothing
+    , _ovIsLatest = Nothing
+    , _ovOwner = Nothing
+    , _ovKey = Nothing
+    , _ovStorageClass = Nothing
+    , _ovLastModified = Nothing
+    }
+
+
+-- | Undocumented member.
+ovETag :: Lens' ObjectVersion (Maybe ETag)
+ovETag = lens _ovETag (\ s a -> s{_ovETag = a})
+
+-- | Version ID of an object.
+ovVersionId :: Lens' ObjectVersion (Maybe ObjectVersionId)
+ovVersionId = lens _ovVersionId (\ s a -> s{_ovVersionId = a})
+
+-- | Size in bytes of the object.
+ovSize :: Lens' ObjectVersion (Maybe Int)
+ovSize = lens _ovSize (\ s a -> s{_ovSize = a})
+
+-- | Specifies whether the object is (true) or is not (false) the latest version of an object.
+ovIsLatest :: Lens' ObjectVersion (Maybe Bool)
+ovIsLatest = lens _ovIsLatest (\ s a -> s{_ovIsLatest = a})
+
+-- | Undocumented member.
+ovOwner :: Lens' ObjectVersion (Maybe Owner)
+ovOwner = lens _ovOwner (\ s a -> s{_ovOwner = a})
+
+-- | The object key.
+ovKey :: Lens' ObjectVersion (Maybe ObjectKey)
+ovKey = lens _ovKey (\ s a -> s{_ovKey = a})
+
+-- | The class of storage used to store the object.
+ovStorageClass :: Lens' ObjectVersion (Maybe ObjectVersionStorageClass)
+ovStorageClass = lens _ovStorageClass (\ s a -> s{_ovStorageClass = a})
+
+-- | Date and time the object was last modified.
+ovLastModified :: Lens' ObjectVersion (Maybe UTCTime)
+ovLastModified = lens _ovLastModified (\ s a -> s{_ovLastModified = a}) . mapping _Time
+
+instance FromXML ObjectVersion where
+        parseXML x
+          = ObjectVersion' <$>
+              (x .@? "ETag") <*> (x .@? "VersionId") <*>
+                (x .@? "Size")
+                <*> (x .@? "IsLatest")
+                <*> (x .@? "Owner")
+                <*> (x .@? "Key")
+                <*> (x .@? "StorageClass")
+                <*> (x .@? "LastModified")
+
+instance Hashable ObjectVersion where
+
+instance NFData ObjectVersion where
+
+-- | Describes the location where the restore job's output is stored.
+--
+-- /See:/ 'outputLocation' smart constructor.
+newtype OutputLocation = OutputLocation'
+  { _olS3 :: Maybe S3Location
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OutputLocation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'olS3' - Describes an S3 location that will receive the results of the restore request.
+outputLocation
+    :: OutputLocation
+outputLocation = OutputLocation' {_olS3 = Nothing}
+
+
+-- | Describes an S3 location that will receive the results of the restore request.
+olS3 :: Lens' OutputLocation (Maybe S3Location)
+olS3 = lens _olS3 (\ s a -> s{_olS3 = a})
+
+instance Hashable OutputLocation where
+
+instance NFData OutputLocation where
+
+instance ToXML OutputLocation where
+        toXML OutputLocation'{..} = mconcat ["S3" @= _olS3]
+
+-- | Describes how results of the Select job are serialized.
+--
+-- /See:/ 'outputSerialization' smart constructor.
+data OutputSerialization = OutputSerialization'
+  { _osJSON :: !(Maybe JSONOutput)
+  , _osCSV  :: !(Maybe CSVOutput)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'OutputSerialization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'osJSON' - Specifies JSON as request's output serialization format.
+--
+-- * 'osCSV' - Describes the serialization of CSV-encoded Select results.
+outputSerialization
+    :: OutputSerialization
+outputSerialization = OutputSerialization' {_osJSON = Nothing, _osCSV = Nothing}
+
+
+-- | Specifies JSON as request's output serialization format.
+osJSON :: Lens' OutputSerialization (Maybe JSONOutput)
+osJSON = lens _osJSON (\ s a -> s{_osJSON = a})
+
+-- | Describes the serialization of CSV-encoded Select results.
+osCSV :: Lens' OutputSerialization (Maybe CSVOutput)
+osCSV = lens _osCSV (\ s a -> s{_osCSV = a})
+
+instance Hashable OutputSerialization where
+
+instance NFData OutputSerialization where
+
+instance ToXML OutputSerialization where
+        toXML OutputSerialization'{..}
+          = mconcat ["JSON" @= _osJSON, "CSV" @= _osCSV]
+
+-- | /See:/ 'owner' smart constructor.
+data Owner = Owner'
+  { _oDisplayName :: !(Maybe Text)
+  , _oId          :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Owner' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oDisplayName' - Undocumented member.
+--
+-- * 'oId' - Undocumented member.
+owner
+    :: Owner
+owner = Owner' {_oDisplayName = Nothing, _oId = Nothing}
+
+
+-- | Undocumented member.
+oDisplayName :: Lens' Owner (Maybe Text)
+oDisplayName = lens _oDisplayName (\ s a -> s{_oDisplayName = a})
+
+-- | Undocumented member.
+oId :: Lens' Owner (Maybe Text)
+oId = lens _oId (\ s a -> s{_oId = a})
+
+instance FromXML Owner where
+        parseXML x
+          = Owner' <$> (x .@? "DisplayName") <*> (x .@? "ID")
+
+instance Hashable Owner where
+
+instance NFData Owner where
+
+instance ToXML Owner where
+        toXML Owner'{..}
+          = mconcat
+              ["DisplayName" @= _oDisplayName, "ID" @= _oId]
+
+-- | /See:/ 'part' smart constructor.
+data Part = Part'
+  { _pETag         :: !(Maybe ETag)
+  , _pSize         :: !(Maybe Int)
+  , _pPartNumber   :: !(Maybe Int)
+  , _pLastModified :: !(Maybe RFC822)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Part' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pETag' - Entity tag returned when the part was uploaded.
+--
+-- * 'pSize' - Size of the uploaded part data.
+--
+-- * 'pPartNumber' - Part number identifying the part. This is a positive integer between 1 and 10,000.
+--
+-- * 'pLastModified' - Date and time at which the part was uploaded.
+part
+    :: Part
+part =
+  Part'
+    { _pETag = Nothing
+    , _pSize = Nothing
+    , _pPartNumber = Nothing
+    , _pLastModified = Nothing
+    }
+
+
+-- | Entity tag returned when the part was uploaded.
+pETag :: Lens' Part (Maybe ETag)
+pETag = lens _pETag (\ s a -> s{_pETag = a})
+
+-- | Size of the uploaded part data.
+pSize :: Lens' Part (Maybe Int)
+pSize = lens _pSize (\ s a -> s{_pSize = a})
+
+-- | Part number identifying the part. This is a positive integer between 1 and 10,000.
+pPartNumber :: Lens' Part (Maybe Int)
+pPartNumber = lens _pPartNumber (\ s a -> s{_pPartNumber = a})
+
+-- | Date and time at which the part was uploaded.
+pLastModified :: Lens' Part (Maybe UTCTime)
+pLastModified = lens _pLastModified (\ s a -> s{_pLastModified = a}) . mapping _Time
+
+instance FromXML Part where
+        parseXML x
+          = Part' <$>
+              (x .@? "ETag") <*> (x .@? "Size") <*>
+                (x .@? "PartNumber")
+                <*> (x .@? "LastModified")
+
+instance Hashable Part where
+
+instance NFData Part where
+
+-- | /See:/ 'progress' smart constructor.
+data Progress = Progress'
+  { _pBytesReturned  :: !(Maybe Integer)
+  , _pBytesScanned   :: !(Maybe Integer)
+  , _pBytesProcessed :: !(Maybe Integer)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Progress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pBytesReturned' - Current number of bytes of records payload data returned.
+--
+-- * 'pBytesScanned' - Current number of object bytes scanned.
+--
+-- * 'pBytesProcessed' - Current number of uncompressed object bytes processed.
+progress
+    :: Progress
+progress =
+  Progress'
+    { _pBytesReturned = Nothing
+    , _pBytesScanned = Nothing
+    , _pBytesProcessed = Nothing
+    }
+
+
+-- | Current number of bytes of records payload data returned.
+pBytesReturned :: Lens' Progress (Maybe Integer)
+pBytesReturned = lens _pBytesReturned (\ s a -> s{_pBytesReturned = a})
+
+-- | Current number of object bytes scanned.
+pBytesScanned :: Lens' Progress (Maybe Integer)
+pBytesScanned = lens _pBytesScanned (\ s a -> s{_pBytesScanned = a})
+
+-- | Current number of uncompressed object bytes processed.
+pBytesProcessed :: Lens' Progress (Maybe Integer)
+pBytesProcessed = lens _pBytesProcessed (\ s a -> s{_pBytesProcessed = a})
+
+instance FromXML Progress where
+        parseXML x
+          = Progress' <$>
+              (x .@? "BytesReturned") <*> (x .@? "BytesScanned")
+                <*> (x .@? "BytesProcessed")
+
+instance Hashable Progress where
+
+instance NFData Progress where
+
+-- | /See:/ 'progressEvent' smart constructor.
+newtype ProgressEvent = ProgressEvent'
+  { _peDetails :: Maybe Progress
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ProgressEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'peDetails' - The Progress event details.
+progressEvent
+    :: ProgressEvent
+progressEvent = ProgressEvent' {_peDetails = Nothing}
+
+
+-- | The Progress event details.
+peDetails :: Lens' ProgressEvent (Maybe Progress)
+peDetails = lens _peDetails (\ s a -> s{_peDetails = a})
+
+instance FromXML ProgressEvent where
+        parseXML x = ProgressEvent' <$> (x .@? "Details")
+
+instance Hashable ProgressEvent where
+
+instance NFData ProgressEvent where
+
+-- | Container for specifying an configuration when you want Amazon S3 to publish events to an Amazon Simple Queue Service (Amazon SQS) queue.
+--
+-- /See:/ 'queueConfiguration' smart constructor.
+data QueueConfiguration = QueueConfiguration'
+  { _qcId       :: !(Maybe Text)
+  , _qcFilter   :: !(Maybe NotificationConfigurationFilter)
+  , _qcQueueARN :: !Text
+  , _qcEvents   :: ![Event]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'QueueConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'qcId' - Undocumented member.
+--
+-- * 'qcFilter' - Undocumented member.
+--
+-- * 'qcQueueARN' - Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
+--
+-- * 'qcEvents' - Undocumented member.
+queueConfiguration
+    :: Text -- ^ 'qcQueueARN'
+    -> QueueConfiguration
+queueConfiguration pQueueARN_ =
+  QueueConfiguration'
+    { _qcId = Nothing
+    , _qcFilter = Nothing
+    , _qcQueueARN = pQueueARN_
+    , _qcEvents = mempty
+    }
+
+
+-- | Undocumented member.
+qcId :: Lens' QueueConfiguration (Maybe Text)
+qcId = lens _qcId (\ s a -> s{_qcId = a})
+
+-- | Undocumented member.
+qcFilter :: Lens' QueueConfiguration (Maybe NotificationConfigurationFilter)
+qcFilter = lens _qcFilter (\ s a -> s{_qcFilter = a})
+
+-- | Amazon SQS queue ARN to which Amazon S3 will publish a message when it detects events of specified type.
+qcQueueARN :: Lens' QueueConfiguration Text
+qcQueueARN = lens _qcQueueARN (\ s a -> s{_qcQueueARN = a})
+
+-- | Undocumented member.
+qcEvents :: Lens' QueueConfiguration [Event]
+qcEvents = lens _qcEvents (\ s a -> s{_qcEvents = a}) . _Coerce
+
+instance FromXML QueueConfiguration where
+        parseXML x
+          = QueueConfiguration' <$>
+              (x .@? "Id") <*> (x .@? "Filter") <*> (x .@ "Queue")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable QueueConfiguration where
+
+instance NFData QueueConfiguration where
+
+instance ToXML QueueConfiguration where
+        toXML QueueConfiguration'{..}
+          = mconcat
+              ["Id" @= _qcId, "Filter" @= _qcFilter,
+               "Queue" @= _qcQueueARN, toXMLList "Event" _qcEvents]
+
+-- | /See:/ 'recordsEvent' smart constructor.
+newtype RecordsEvent = RecordsEvent'
+  { _rePayload :: Maybe Base64
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RecordsEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rePayload' - The byte array of partial, one or more result records.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
+recordsEvent
+    :: RecordsEvent
+recordsEvent = RecordsEvent' {_rePayload = Nothing}
+
+
+-- | The byte array of partial, one or more result records.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
+rePayload :: Lens' RecordsEvent (Maybe ByteString)
+rePayload = lens _rePayload (\ s a -> s{_rePayload = a}) . mapping _Base64
+
+instance FromXML RecordsEvent where
+        parseXML x = RecordsEvent' <$> (x .@? "Payload")
+
+instance Hashable RecordsEvent where
+
+instance NFData RecordsEvent where
+
+-- | /See:/ 'redirect' smart constructor.
+data Redirect = Redirect'
+  { _rHostName             :: !(Maybe Text)
+  , _rProtocol             :: !(Maybe Protocol)
+  , _rHTTPRedirectCode     :: !(Maybe Text)
+  , _rReplaceKeyWith       :: !(Maybe Text)
+  , _rReplaceKeyPrefixWith :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Redirect' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rHostName' - The host name to use in the redirect request.
+--
+-- * 'rProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+--
+-- * 'rHTTPRedirectCode' - The HTTP redirect code to use on the response. Not required if one of the siblings is present.
+--
+-- * 'rReplaceKeyWith' - The specific object key to use in the redirect request. For example, redirect request to error.html. Not required if one of the sibling is present. Can be present only if ReplaceKeyPrefixWith is not provided.
+--
+-- * 'rReplaceKeyPrefixWith' - The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix docs/ (objects in the docs/ folder) to documents/, you can set a condition block with KeyPrefixEquals set to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required if one of the siblings is present. Can be present only if ReplaceKeyWith is not provided.
+redirect
+    :: Redirect
+redirect =
+  Redirect'
+    { _rHostName = Nothing
+    , _rProtocol = Nothing
+    , _rHTTPRedirectCode = Nothing
+    , _rReplaceKeyWith = Nothing
+    , _rReplaceKeyPrefixWith = Nothing
+    }
+
+
+-- | The host name to use in the redirect request.
+rHostName :: Lens' Redirect (Maybe Text)
+rHostName = lens _rHostName (\ s a -> s{_rHostName = a})
+
+-- | Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+rProtocol :: Lens' Redirect (Maybe Protocol)
+rProtocol = lens _rProtocol (\ s a -> s{_rProtocol = a})
+
+-- | The HTTP redirect code to use on the response. Not required if one of the siblings is present.
+rHTTPRedirectCode :: Lens' Redirect (Maybe Text)
+rHTTPRedirectCode = lens _rHTTPRedirectCode (\ s a -> s{_rHTTPRedirectCode = a})
+
+-- | The specific object key to use in the redirect request. For example, redirect request to error.html. Not required if one of the sibling is present. Can be present only if ReplaceKeyPrefixWith is not provided.
+rReplaceKeyWith :: Lens' Redirect (Maybe Text)
+rReplaceKeyWith = lens _rReplaceKeyWith (\ s a -> s{_rReplaceKeyWith = a})
+
+-- | The object key prefix to use in the redirect request. For example, to redirect requests for all pages with prefix docs/ (objects in the docs/ folder) to documents/, you can set a condition block with KeyPrefixEquals set to docs/ and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required if one of the siblings is present. Can be present only if ReplaceKeyWith is not provided.
+rReplaceKeyPrefixWith :: Lens' Redirect (Maybe Text)
+rReplaceKeyPrefixWith = lens _rReplaceKeyPrefixWith (\ s a -> s{_rReplaceKeyPrefixWith = a})
+
+instance FromXML Redirect where
+        parseXML x
+          = Redirect' <$>
+              (x .@? "HostName") <*> (x .@? "Protocol") <*>
+                (x .@? "HttpRedirectCode")
+                <*> (x .@? "ReplaceKeyWith")
+                <*> (x .@? "ReplaceKeyPrefixWith")
+
+instance Hashable Redirect where
+
+instance NFData Redirect where
+
+instance ToXML Redirect where
+        toXML Redirect'{..}
+          = mconcat
+              ["HostName" @= _rHostName, "Protocol" @= _rProtocol,
+               "HttpRedirectCode" @= _rHTTPRedirectCode,
+               "ReplaceKeyWith" @= _rReplaceKeyWith,
+               "ReplaceKeyPrefixWith" @= _rReplaceKeyPrefixWith]
+
+-- | /See:/ 'redirectAllRequestsTo' smart constructor.
+data RedirectAllRequestsTo = RedirectAllRequestsTo'
+  { _rartProtocol :: !(Maybe Protocol)
+  , _rartHostName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RedirectAllRequestsTo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rartProtocol' - Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+--
+-- * 'rartHostName' - Name of the host where requests will be redirected.
+redirectAllRequestsTo
+    :: Text -- ^ 'rartHostName'
+    -> RedirectAllRequestsTo
+redirectAllRequestsTo pHostName_ =
+  RedirectAllRequestsTo' {_rartProtocol = Nothing, _rartHostName = pHostName_}
+
+
+-- | Protocol to use (http, https) when redirecting requests. The default is the protocol that is used in the original request.
+rartProtocol :: Lens' RedirectAllRequestsTo (Maybe Protocol)
+rartProtocol = lens _rartProtocol (\ s a -> s{_rartProtocol = a})
+
+-- | Name of the host where requests will be redirected.
+rartHostName :: Lens' RedirectAllRequestsTo Text
+rartHostName = lens _rartHostName (\ s a -> s{_rartHostName = a})
+
+instance FromXML RedirectAllRequestsTo where
+        parseXML x
+          = RedirectAllRequestsTo' <$>
+              (x .@? "Protocol") <*> (x .@ "HostName")
+
+instance Hashable RedirectAllRequestsTo where
+
+instance NFData RedirectAllRequestsTo where
+
+instance ToXML RedirectAllRequestsTo where
+        toXML RedirectAllRequestsTo'{..}
+          = mconcat
+              ["Protocol" @= _rartProtocol,
+               "HostName" @= _rartHostName]
+
+-- | Container for replication rules. You can add as many as 1,000 rules. Total replication configuration size can be up to 2 MB.
+--
+-- /See:/ 'replicationConfiguration' smart constructor.
+data ReplicationConfiguration = ReplicationConfiguration'
+  { _rcRole  :: !Text
+  , _rcRules :: ![ReplicationRule]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ReplicationConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcRole' - Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
+--
+-- * 'rcRules' - Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
+replicationConfiguration
+    :: Text -- ^ 'rcRole'
+    -> ReplicationConfiguration
+replicationConfiguration pRole_ =
+  ReplicationConfiguration' {_rcRole = pRole_, _rcRules = mempty}
+
+
+-- | Amazon Resource Name (ARN) of an IAM role for Amazon S3 to assume when replicating the objects.
+rcRole :: Lens' ReplicationConfiguration Text
+rcRole = lens _rcRole (\ s a -> s{_rcRole = a})
+
+-- | Container for information about a particular replication rule. Replication configuration must have at least one rule and can contain up to 1,000 rules.
+rcRules :: Lens' ReplicationConfiguration [ReplicationRule]
+rcRules = lens _rcRules (\ s a -> s{_rcRules = a}) . _Coerce
+
+instance FromXML ReplicationConfiguration where
+        parseXML x
+          = ReplicationConfiguration' <$>
+              (x .@ "Role") <*> (parseXMLList "Rule" x)
+
+instance Hashable ReplicationConfiguration where
+
+instance NFData ReplicationConfiguration where
+
+instance ToXML ReplicationConfiguration where
+        toXML ReplicationConfiguration'{..}
+          = mconcat
+              ["Role" @= _rcRole, toXMLList "Rule" _rcRules]
+
+-- | Container for information about a particular replication rule.
+--
+-- /See:/ 'replicationRule' smart constructor.
+data ReplicationRule = ReplicationRule'
+  { _rrId                      :: !(Maybe Text)
+  , _rrSourceSelectionCriteria :: !(Maybe SourceSelectionCriteria)
+  , _rrPrefix                  :: !Text
+  , _rrStatus                  :: !ReplicationRuleStatus
+  , _rrDestination             :: !Destination
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ReplicationRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrId' - Unique identifier for the rule. The value cannot be longer than 255 characters.
+--
+-- * 'rrSourceSelectionCriteria' - Container for filters that define which source objects should be replicated.
+--
+-- * 'rrPrefix' - Object keyname prefix identifying one or more objects to which the rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes are not supported.
+--
+-- * 'rrStatus' - The rule is ignored if status is not Enabled.
+--
+-- * 'rrDestination' - Container for replication destination information.
+replicationRule
+    :: Text -- ^ 'rrPrefix'
+    -> ReplicationRuleStatus -- ^ 'rrStatus'
+    -> Destination -- ^ 'rrDestination'
+    -> ReplicationRule
+replicationRule pPrefix_ pStatus_ pDestination_ =
+  ReplicationRule'
+    { _rrId = Nothing
+    , _rrSourceSelectionCriteria = Nothing
+    , _rrPrefix = pPrefix_
+    , _rrStatus = pStatus_
+    , _rrDestination = pDestination_
+    }
+
+
+-- | Unique identifier for the rule. The value cannot be longer than 255 characters.
+rrId :: Lens' ReplicationRule (Maybe Text)
+rrId = lens _rrId (\ s a -> s{_rrId = a})
+
+-- | Container for filters that define which source objects should be replicated.
+rrSourceSelectionCriteria :: Lens' ReplicationRule (Maybe SourceSelectionCriteria)
+rrSourceSelectionCriteria = lens _rrSourceSelectionCriteria (\ s a -> s{_rrSourceSelectionCriteria = a})
+
+-- | Object keyname prefix identifying one or more objects to which the rule applies. Maximum prefix length can be up to 1,024 characters. Overlapping prefixes are not supported.
+rrPrefix :: Lens' ReplicationRule Text
+rrPrefix = lens _rrPrefix (\ s a -> s{_rrPrefix = a})
+
+-- | The rule is ignored if status is not Enabled.
+rrStatus :: Lens' ReplicationRule ReplicationRuleStatus
+rrStatus = lens _rrStatus (\ s a -> s{_rrStatus = a})
+
+-- | Container for replication destination information.
+rrDestination :: Lens' ReplicationRule Destination
+rrDestination = lens _rrDestination (\ s a -> s{_rrDestination = a})
+
+instance FromXML ReplicationRule where
+        parseXML x
+          = ReplicationRule' <$>
+              (x .@? "ID") <*> (x .@? "SourceSelectionCriteria")
+                <*> (x .@ "Prefix")
+                <*> (x .@ "Status")
+                <*> (x .@ "Destination")
+
+instance Hashable ReplicationRule where
+
+instance NFData ReplicationRule where
+
+instance ToXML ReplicationRule where
+        toXML ReplicationRule'{..}
+          = mconcat
+              ["ID" @= _rrId,
+               "SourceSelectionCriteria" @=
+                 _rrSourceSelectionCriteria,
+               "Prefix" @= _rrPrefix, "Status" @= _rrStatus,
+               "Destination" @= _rrDestination]
+
+-- | /See:/ 'requestPaymentConfiguration' smart constructor.
+newtype RequestPaymentConfiguration = RequestPaymentConfiguration'
+  { _rpcPayer :: Payer
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RequestPaymentConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpcPayer' - Specifies who pays for the download and request fees.
+requestPaymentConfiguration
+    :: Payer -- ^ 'rpcPayer'
+    -> RequestPaymentConfiguration
+requestPaymentConfiguration pPayer_ =
+  RequestPaymentConfiguration' {_rpcPayer = pPayer_}
+
+
+-- | Specifies who pays for the download and request fees.
+rpcPayer :: Lens' RequestPaymentConfiguration Payer
+rpcPayer = lens _rpcPayer (\ s a -> s{_rpcPayer = a})
+
+instance Hashable RequestPaymentConfiguration where
+
+instance NFData RequestPaymentConfiguration where
+
+instance ToXML RequestPaymentConfiguration where
+        toXML RequestPaymentConfiguration'{..}
+          = mconcat ["Payer" @= _rpcPayer]
+
+-- | /See:/ 'requestProgress' smart constructor.
+newtype RequestProgress = RequestProgress'
+  { _rpEnabled :: Maybe Bool
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RequestProgress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpEnabled' - Specifies whether periodic QueryProgress frames should be sent. Valid values: TRUE, FALSE. Default value: FALSE.
+requestProgress
+    :: RequestProgress
+requestProgress = RequestProgress' {_rpEnabled = Nothing}
+
+
+-- | Specifies whether periodic QueryProgress frames should be sent. Valid values: TRUE, FALSE. Default value: FALSE.
+rpEnabled :: Lens' RequestProgress (Maybe Bool)
+rpEnabled = lens _rpEnabled (\ s a -> s{_rpEnabled = a})
+
+instance Hashable RequestProgress where
+
+instance NFData RequestProgress where
+
+instance ToXML RequestProgress where
+        toXML RequestProgress'{..}
+          = mconcat ["Enabled" @= _rpEnabled]
+
+-- | Container for restore job parameters.
+--
+-- /See:/ 'restoreRequest' smart constructor.
+data RestoreRequest = RestoreRequest'
+  { _rrDays                 :: !(Maybe Int)
+  , _rrSelectParameters     :: !(Maybe SelectParameters)
+  , _rrOutputLocation       :: !(Maybe OutputLocation)
+  , _rrTier                 :: !(Maybe Tier)
+  , _rrGlacierJobParameters :: !(Maybe GlacierJobParameters)
+  , _rrType                 :: !(Maybe RestoreRequestType)
+  , _rrDescription          :: !(Maybe Text)
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RestoreRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrDays' - Lifetime of the active copy in days. Do not use with restores that specify OutputLocation.
+--
+-- * 'rrSelectParameters' - Describes the parameters for Select job types.
+--
+-- * 'rrOutputLocation' - Describes the location where the restore job's output is stored.
+--
+-- * 'rrTier' - Glacier retrieval tier at which the restore will be processed.
+--
+-- * 'rrGlacierJobParameters' - Glacier related parameters pertaining to this job. Do not use with restores that specify OutputLocation.
+--
+-- * 'rrType' - Type of restore request.
+--
+-- * 'rrDescription' - The optional description for the job.
+restoreRequest
+    :: RestoreRequest
+restoreRequest =
+  RestoreRequest'
+    { _rrDays = Nothing
+    , _rrSelectParameters = Nothing
+    , _rrOutputLocation = Nothing
+    , _rrTier = Nothing
+    , _rrGlacierJobParameters = Nothing
+    , _rrType = Nothing
+    , _rrDescription = Nothing
+    }
+
+
+-- | Lifetime of the active copy in days. Do not use with restores that specify OutputLocation.
+rrDays :: Lens' RestoreRequest (Maybe Int)
+rrDays = lens _rrDays (\ s a -> s{_rrDays = a})
+
+-- | Describes the parameters for Select job types.
+rrSelectParameters :: Lens' RestoreRequest (Maybe SelectParameters)
+rrSelectParameters = lens _rrSelectParameters (\ s a -> s{_rrSelectParameters = a})
+
+-- | Describes the location where the restore job's output is stored.
+rrOutputLocation :: Lens' RestoreRequest (Maybe OutputLocation)
+rrOutputLocation = lens _rrOutputLocation (\ s a -> s{_rrOutputLocation = a})
+
+-- | Glacier retrieval tier at which the restore will be processed.
+rrTier :: Lens' RestoreRequest (Maybe Tier)
+rrTier = lens _rrTier (\ s a -> s{_rrTier = a})
+
+-- | Glacier related parameters pertaining to this job. Do not use with restores that specify OutputLocation.
+rrGlacierJobParameters :: Lens' RestoreRequest (Maybe GlacierJobParameters)
+rrGlacierJobParameters = lens _rrGlacierJobParameters (\ s a -> s{_rrGlacierJobParameters = a})
+
+-- | Type of restore request.
+rrType :: Lens' RestoreRequest (Maybe RestoreRequestType)
+rrType = lens _rrType (\ s a -> s{_rrType = a})
+
+-- | The optional description for the job.
+rrDescription :: Lens' RestoreRequest (Maybe Text)
+rrDescription = lens _rrDescription (\ s a -> s{_rrDescription = a})
+
+instance Hashable RestoreRequest where
+
+instance NFData RestoreRequest where
+
+instance ToXML RestoreRequest where
+        toXML RestoreRequest'{..}
+          = mconcat
+              ["Days" @= _rrDays,
+               "SelectParameters" @= _rrSelectParameters,
+               "OutputLocation" @= _rrOutputLocation,
+               "Tier" @= _rrTier,
+               "GlacierJobParameters" @= _rrGlacierJobParameters,
+               "Type" @= _rrType, "Description" @= _rrDescription]
+
+-- | /See:/ 'routingRule' smart constructor.
+data RoutingRule = RoutingRule'
+  { _rrCondition :: !(Maybe Condition)
+  , _rrRedirect  :: !Redirect
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'RoutingRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrCondition' - A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the /docs folder, redirect to the /documents folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.
+--
+-- * 'rrRedirect' - Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can can specify a different error code to return.
+routingRule
+    :: Redirect -- ^ 'rrRedirect'
+    -> RoutingRule
+routingRule pRedirect_ =
+  RoutingRule' {_rrCondition = Nothing, _rrRedirect = pRedirect_}
+
+
+-- | A container for describing a condition that must be met for the specified redirect to apply. For example, 1. If request is for pages in the /docs folder, redirect to the /documents folder. 2. If request results in HTTP error 4xx, redirect request to another host where you might process the error.
+rrCondition :: Lens' RoutingRule (Maybe Condition)
+rrCondition = lens _rrCondition (\ s a -> s{_rrCondition = a})
+
+-- | Container for redirect information. You can redirect requests to another host, to another page, or with another protocol. In the event of an error, you can can specify a different error code to return.
+rrRedirect :: Lens' RoutingRule Redirect
+rrRedirect = lens _rrRedirect (\ s a -> s{_rrRedirect = a})
+
+instance FromXML RoutingRule where
+        parseXML x
+          = RoutingRule' <$>
+              (x .@? "Condition") <*> (x .@ "Redirect")
+
+instance Hashable RoutingRule where
+
+instance NFData RoutingRule where
+
+instance ToXML RoutingRule where
+        toXML RoutingRule'{..}
+          = mconcat
+              ["Condition" @= _rrCondition,
+               "Redirect" @= _rrRedirect]
+
+-- | Container for object key name prefix and suffix filtering rules.
+--
+-- /See:/ 's3KeyFilter' smart constructor.
+newtype S3KeyFilter = S3KeyFilter'
+  { _skfFilterRules :: Maybe [FilterRule]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3KeyFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'skfFilterRules' - Undocumented member.
+s3KeyFilter
+    :: S3KeyFilter
+s3KeyFilter = S3KeyFilter' {_skfFilterRules = Nothing}
+
+
+-- | Undocumented member.
+skfFilterRules :: Lens' S3KeyFilter [FilterRule]
+skfFilterRules = lens _skfFilterRules (\ s a -> s{_skfFilterRules = a}) . _Default . _Coerce
+
+instance FromXML S3KeyFilter where
+        parseXML x
+          = S3KeyFilter' <$>
+              (may (parseXMLList "FilterRule") x)
+
+instance Hashable S3KeyFilter where
+
+instance NFData S3KeyFilter where
+
+instance ToXML S3KeyFilter where
+        toXML S3KeyFilter'{..}
+          = mconcat
+              [toXML (toXMLList "FilterRule" <$> _skfFilterRules)]
+
+-- | Describes an S3 location that will receive the results of the restore request.
+--
+-- /See:/ 's3Location' smart constructor.
+data S3Location = S3Location'
+  { _slCannedACL         :: !(Maybe ObjectCannedACL)
+  , _slAccessControlList :: !(Maybe [Grant])
+  , _slUserMetadata      :: !(Maybe [MetadataEntry])
+  , _slEncryption        :: !(Maybe Encryption)
+  , _slStorageClass      :: !(Maybe StorageClass)
+  , _slTagging           :: !(Maybe Tagging)
+  , _slBucketName        :: !BucketName
+  , _slPrefix            :: !Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3Location' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slCannedACL' - The canned ACL to apply to the restore results.
+--
+-- * 'slAccessControlList' - A list of grants that control access to the staged results.
+--
+-- * 'slUserMetadata' - A list of metadata to store with the restore results in S3.
+--
+-- * 'slEncryption' - Undocumented member.
+--
+-- * 'slStorageClass' - The class of storage used to store the restore results.
+--
+-- * 'slTagging' - The tag-set that is applied to the restore results.
+--
+-- * 'slBucketName' - The name of the bucket where the restore results will be placed.
+--
+-- * 'slPrefix' - The prefix that is prepended to the restore results for this request.
+s3Location
+    :: BucketName -- ^ 'slBucketName'
+    -> Text -- ^ 'slPrefix'
+    -> S3Location
+s3Location pBucketName_ pPrefix_ =
+  S3Location'
+    { _slCannedACL = Nothing
+    , _slAccessControlList = Nothing
+    , _slUserMetadata = Nothing
+    , _slEncryption = Nothing
+    , _slStorageClass = Nothing
+    , _slTagging = Nothing
+    , _slBucketName = pBucketName_
+    , _slPrefix = pPrefix_
+    }
+
+
+-- | The canned ACL to apply to the restore results.
+slCannedACL :: Lens' S3Location (Maybe ObjectCannedACL)
+slCannedACL = lens _slCannedACL (\ s a -> s{_slCannedACL = a})
+
+-- | A list of grants that control access to the staged results.
+slAccessControlList :: Lens' S3Location [Grant]
+slAccessControlList = lens _slAccessControlList (\ s a -> s{_slAccessControlList = a}) . _Default . _Coerce
+
+-- | A list of metadata to store with the restore results in S3.
+slUserMetadata :: Lens' S3Location [MetadataEntry]
+slUserMetadata = lens _slUserMetadata (\ s a -> s{_slUserMetadata = a}) . _Default . _Coerce
+
+-- | Undocumented member.
+slEncryption :: Lens' S3Location (Maybe Encryption)
+slEncryption = lens _slEncryption (\ s a -> s{_slEncryption = a})
+
+-- | The class of storage used to store the restore results.
+slStorageClass :: Lens' S3Location (Maybe StorageClass)
+slStorageClass = lens _slStorageClass (\ s a -> s{_slStorageClass = a})
+
+-- | The tag-set that is applied to the restore results.
+slTagging :: Lens' S3Location (Maybe Tagging)
+slTagging = lens _slTagging (\ s a -> s{_slTagging = a})
+
+-- | The name of the bucket where the restore results will be placed.
+slBucketName :: Lens' S3Location BucketName
+slBucketName = lens _slBucketName (\ s a -> s{_slBucketName = a})
+
+-- | The prefix that is prepended to the restore results for this request.
+slPrefix :: Lens' S3Location Text
+slPrefix = lens _slPrefix (\ s a -> s{_slPrefix = a})
+
+instance Hashable S3Location where
+
+instance NFData S3Location where
+
+instance ToXML S3Location where
+        toXML S3Location'{..}
+          = mconcat
+              ["CannedACL" @= _slCannedACL,
+               "AccessControlList" @=
+                 toXML (toXMLList "Grant" <$> _slAccessControlList),
+               "UserMetadata" @=
+                 toXML
+                   (toXMLList "MetadataEntry" <$> _slUserMetadata),
+               "Encryption" @= _slEncryption,
+               "StorageClass" @= _slStorageClass,
+               "Tagging" @= _slTagging,
+               "BucketName" @= _slBucketName, "Prefix" @= _slPrefix]
+
+-- | /See:/ 's3ServiceError' smart constructor.
+data S3ServiceError = S3ServiceError'
+  { _sseVersionId :: !(Maybe ObjectVersionId)
+  , _sseKey       :: !(Maybe ObjectKey)
+  , _sseCode      :: !(Maybe Text)
+  , _sseMessage   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3ServiceError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sseVersionId' - Undocumented member.
+--
+-- * 'sseKey' - Undocumented member.
+--
+-- * 'sseCode' - Undocumented member.
+--
+-- * 'sseMessage' - Undocumented member.
+s3ServiceError
+    :: S3ServiceError
+s3ServiceError =
+  S3ServiceError'
+    { _sseVersionId = Nothing
+    , _sseKey = Nothing
+    , _sseCode = Nothing
+    , _sseMessage = Nothing
+    }
+
+
+-- | Undocumented member.
+sseVersionId :: Lens' S3ServiceError (Maybe ObjectVersionId)
+sseVersionId = lens _sseVersionId (\ s a -> s{_sseVersionId = a})
+
+-- | Undocumented member.
+sseKey :: Lens' S3ServiceError (Maybe ObjectKey)
+sseKey = lens _sseKey (\ s a -> s{_sseKey = a})
+
+-- | Undocumented member.
+sseCode :: Lens' S3ServiceError (Maybe Text)
+sseCode = lens _sseCode (\ s a -> s{_sseCode = a})
+
+-- | Undocumented member.
+sseMessage :: Lens' S3ServiceError (Maybe Text)
+sseMessage = lens _sseMessage (\ s a -> s{_sseMessage = a})
+
+instance FromXML S3ServiceError where
+        parseXML x
+          = S3ServiceError' <$>
+              (x .@? "VersionId") <*> (x .@? "Key") <*>
+                (x .@? "Code")
+                <*> (x .@? "Message")
+
+instance Hashable S3ServiceError where
+
+instance NFData S3ServiceError where
+
+-- | Specifies the use of SSE-KMS to encrypt delievered Inventory reports.
+--
+-- /See:/ 'sSEKMS' smart constructor.
+newtype SSEKMS = SSEKMS'
+  { _ssekKeyId :: Sensitive Text
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SSEKMS' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssekKeyId' - Specifies the ID of the AWS Key Management Service (KMS) master encryption key to use for encrypting Inventory reports.
+sSEKMS
+    :: Text -- ^ 'ssekKeyId'
+    -> SSEKMS
+sSEKMS pKeyId_ = SSEKMS' {_ssekKeyId = _Sensitive # pKeyId_}
+
+
+-- | Specifies the ID of the AWS Key Management Service (KMS) master encryption key to use for encrypting Inventory reports.
+ssekKeyId :: Lens' SSEKMS Text
+ssekKeyId = lens _ssekKeyId (\ s a -> s{_ssekKeyId = a}) . _Sensitive
+
+instance FromXML SSEKMS where
+        parseXML x = SSEKMS' <$> (x .@ "KeyId")
+
+instance Hashable SSEKMS where
+
+instance NFData SSEKMS where
+
+instance ToXML SSEKMS where
+        toXML SSEKMS'{..} = mconcat ["KeyId" @= _ssekKeyId]
+
+-- | Specifies the use of SSE-S3 to encrypt delievered Inventory reports.
+--
+-- /See:/ 'sSES3' smart constructor.
+data SSES3 =
+  SSES3'
+  deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SSES3' with the minimum fields required to make a request.
+--
+sSES3
+    :: SSES3
+sSES3 = SSES3'
+
+
+instance FromXML SSES3 where
+        parseXML = const (pure SSES3')
+
+instance Hashable SSES3 where
+
+instance NFData SSES3 where
+
+instance ToXML SSES3 where
+        toXML = const mempty
+
+-- | /See:/ 'selectObjectContentEventStream' smart constructor.
+data SelectObjectContentEventStream = SelectObjectContentEventStream'
+  { _socesProgress :: !(Maybe ProgressEvent)
+  , _socesRecords  :: !(Maybe RecordsEvent)
+  , _socesCont     :: !(Maybe ContinuationEvent)
+  , _socesStats    :: !(Maybe StatsEvent)
+  , _socesEnd      :: !(Maybe EndEvent)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SelectObjectContentEventStream' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'socesProgress' - The Progress Event.
+--
+-- * 'socesRecords' - The Records Event.
+--
+-- * 'socesCont' - The Continuation Event.
+--
+-- * 'socesStats' - The Stats Event.
+--
+-- * 'socesEnd' - The End Event.
+selectObjectContentEventStream
+    :: SelectObjectContentEventStream
+selectObjectContentEventStream =
+  SelectObjectContentEventStream'
+    { _socesProgress = Nothing
+    , _socesRecords = Nothing
+    , _socesCont = Nothing
+    , _socesStats = Nothing
+    , _socesEnd = Nothing
+    }
+
+
+-- | The Progress Event.
+socesProgress :: Lens' SelectObjectContentEventStream (Maybe ProgressEvent)
+socesProgress = lens _socesProgress (\ s a -> s{_socesProgress = a})
+
+-- | The Records Event.
+socesRecords :: Lens' SelectObjectContentEventStream (Maybe RecordsEvent)
+socesRecords = lens _socesRecords (\ s a -> s{_socesRecords = a})
+
+-- | The Continuation Event.
+socesCont :: Lens' SelectObjectContentEventStream (Maybe ContinuationEvent)
+socesCont = lens _socesCont (\ s a -> s{_socesCont = a})
+
+-- | The Stats Event.
+socesStats :: Lens' SelectObjectContentEventStream (Maybe StatsEvent)
+socesStats = lens _socesStats (\ s a -> s{_socesStats = a})
+
+-- | The End Event.
+socesEnd :: Lens' SelectObjectContentEventStream (Maybe EndEvent)
+socesEnd = lens _socesEnd (\ s a -> s{_socesEnd = a})
+
+instance FromXML SelectObjectContentEventStream where
+        parseXML x
+          = SelectObjectContentEventStream' <$>
+              (x .@? "Progress") <*> (x .@? "Records") <*>
+                (x .@? "Cont")
+                <*> (x .@? "Stats")
+                <*> (x .@? "End")
+
+instance Hashable SelectObjectContentEventStream
+         where
+
+instance NFData SelectObjectContentEventStream where
+
+-- | Describes the parameters for Select job types.
+--
+-- /See:/ 'selectParameters' smart constructor.
+data SelectParameters = SelectParameters'
+  { _spInputSerialization  :: !InputSerialization
+  , _spExpressionType      :: !ExpressionType
+  , _spExpression          :: !Text
+  , _spOutputSerialization :: !OutputSerialization
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SelectParameters' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spInputSerialization' - Describes the serialization format of the object.
+--
+-- * 'spExpressionType' - The type of the provided expression (e.g., SQL).
+--
+-- * 'spExpression' - The expression that is used to query the object.
+--
+-- * 'spOutputSerialization' - Describes how the results of the Select job are serialized.
+selectParameters
+    :: InputSerialization -- ^ 'spInputSerialization'
+    -> ExpressionType -- ^ 'spExpressionType'
+    -> Text -- ^ 'spExpression'
+    -> OutputSerialization -- ^ 'spOutputSerialization'
+    -> SelectParameters
+selectParameters pInputSerialization_ pExpressionType_ pExpression_ pOutputSerialization_ =
+  SelectParameters'
+    { _spInputSerialization = pInputSerialization_
+    , _spExpressionType = pExpressionType_
+    , _spExpression = pExpression_
+    , _spOutputSerialization = pOutputSerialization_
+    }
+
+
+-- | Describes the serialization format of the object.
+spInputSerialization :: Lens' SelectParameters InputSerialization
+spInputSerialization = lens _spInputSerialization (\ s a -> s{_spInputSerialization = a})
+
+-- | The type of the provided expression (e.g., SQL).
+spExpressionType :: Lens' SelectParameters ExpressionType
+spExpressionType = lens _spExpressionType (\ s a -> s{_spExpressionType = a})
+
+-- | The expression that is used to query the object.
+spExpression :: Lens' SelectParameters Text
+spExpression = lens _spExpression (\ s a -> s{_spExpression = a})
+
+-- | Describes how the results of the Select job are serialized.
+spOutputSerialization :: Lens' SelectParameters OutputSerialization
+spOutputSerialization = lens _spOutputSerialization (\ s a -> s{_spOutputSerialization = a})
+
+instance Hashable SelectParameters where
+
+instance NFData SelectParameters where
+
+instance ToXML SelectParameters where
+        toXML SelectParameters'{..}
+          = mconcat
+              ["InputSerialization" @= _spInputSerialization,
+               "ExpressionType" @= _spExpressionType,
+               "Expression" @= _spExpression,
+               "OutputSerialization" @= _spOutputSerialization]
+
+-- | Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
+--
+-- /See:/ 'serverSideEncryptionByDefault' smart constructor.
+data ServerSideEncryptionByDefault = ServerSideEncryptionByDefault'
+  { _ssebdKMSMasterKeyId :: !(Maybe (Sensitive Text))
+  , _ssebdSSEAlgorithm   :: !ServerSideEncryption
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ServerSideEncryptionByDefault' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssebdKMSMasterKeyId' - KMS master key ID to use for the default encryption. This parameter is allowed if SSEAlgorithm is aws:kms.
+--
+-- * 'ssebdSSEAlgorithm' - Server-side encryption algorithm to use for the default encryption.
+serverSideEncryptionByDefault
+    :: ServerSideEncryption -- ^ 'ssebdSSEAlgorithm'
+    -> ServerSideEncryptionByDefault
+serverSideEncryptionByDefault pSSEAlgorithm_ =
+  ServerSideEncryptionByDefault'
+    {_ssebdKMSMasterKeyId = Nothing, _ssebdSSEAlgorithm = pSSEAlgorithm_}
+
+
+-- | KMS master key ID to use for the default encryption. This parameter is allowed if SSEAlgorithm is aws:kms.
+ssebdKMSMasterKeyId :: Lens' ServerSideEncryptionByDefault (Maybe Text)
+ssebdKMSMasterKeyId = lens _ssebdKMSMasterKeyId (\ s a -> s{_ssebdKMSMasterKeyId = a}) . mapping _Sensitive
+
+-- | Server-side encryption algorithm to use for the default encryption.
+ssebdSSEAlgorithm :: Lens' ServerSideEncryptionByDefault ServerSideEncryption
+ssebdSSEAlgorithm = lens _ssebdSSEAlgorithm (\ s a -> s{_ssebdSSEAlgorithm = a})
+
+instance FromXML ServerSideEncryptionByDefault where
+        parseXML x
+          = ServerSideEncryptionByDefault' <$>
+              (x .@? "KMSMasterKeyID") <*> (x .@ "SSEAlgorithm")
+
+instance Hashable ServerSideEncryptionByDefault where
+
+instance NFData ServerSideEncryptionByDefault where
+
+instance ToXML ServerSideEncryptionByDefault where
+        toXML ServerSideEncryptionByDefault'{..}
+          = mconcat
+              ["KMSMasterKeyID" @= _ssebdKMSMasterKeyId,
+               "SSEAlgorithm" @= _ssebdSSEAlgorithm]
+
+-- | Container for server-side encryption configuration rules. Currently S3 supports one rule only.
+--
+-- /See:/ 'serverSideEncryptionConfiguration' smart constructor.
+newtype ServerSideEncryptionConfiguration = ServerSideEncryptionConfiguration'
+  { _ssecRules :: [ServerSideEncryptionRule]
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ServerSideEncryptionConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssecRules' - Container for information about a particular server-side encryption configuration rule.
+serverSideEncryptionConfiguration
+    :: ServerSideEncryptionConfiguration
+serverSideEncryptionConfiguration =
+  ServerSideEncryptionConfiguration' {_ssecRules = mempty}
+
+
+-- | Container for information about a particular server-side encryption configuration rule.
+ssecRules :: Lens' ServerSideEncryptionConfiguration [ServerSideEncryptionRule]
+ssecRules = lens _ssecRules (\ s a -> s{_ssecRules = a}) . _Coerce
+
+instance FromXML ServerSideEncryptionConfiguration
+         where
+        parseXML x
+          = ServerSideEncryptionConfiguration' <$>
+              (parseXMLList "Rule" x)
+
+instance Hashable ServerSideEncryptionConfiguration
+         where
+
+instance NFData ServerSideEncryptionConfiguration
+         where
+
+instance ToXML ServerSideEncryptionConfiguration
+         where
+        toXML ServerSideEncryptionConfiguration'{..}
+          = mconcat [toXMLList "Rule" _ssecRules]
+
+-- | Container for information about a particular server-side encryption configuration rule.
+--
+-- /See:/ 'serverSideEncryptionRule' smart constructor.
+newtype ServerSideEncryptionRule = ServerSideEncryptionRule'
+  { _sserApplyServerSideEncryptionByDefault :: Maybe ServerSideEncryptionByDefault
+  } deriving (Eq, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ServerSideEncryptionRule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sserApplyServerSideEncryptionByDefault' - Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
+serverSideEncryptionRule
+    :: ServerSideEncryptionRule
+serverSideEncryptionRule =
+  ServerSideEncryptionRule' {_sserApplyServerSideEncryptionByDefault = Nothing}
+
+
+-- | Describes the default server-side encryption to apply to new objects in the bucket. If Put Object request does not specify any server-side encryption, this default encryption will be applied.
+sserApplyServerSideEncryptionByDefault :: Lens' ServerSideEncryptionRule (Maybe ServerSideEncryptionByDefault)
+sserApplyServerSideEncryptionByDefault = lens _sserApplyServerSideEncryptionByDefault (\ s a -> s{_sserApplyServerSideEncryptionByDefault = a})
+
+instance FromXML ServerSideEncryptionRule where
+        parseXML x
+          = ServerSideEncryptionRule' <$>
+              (x .@? "ApplyServerSideEncryptionByDefault")
+
+instance Hashable ServerSideEncryptionRule where
+
+instance NFData ServerSideEncryptionRule where
+
+instance ToXML ServerSideEncryptionRule where
+        toXML ServerSideEncryptionRule'{..}
+          = mconcat
+              ["ApplyServerSideEncryptionByDefault" @=
+                 _sserApplyServerSideEncryptionByDefault]
+
+-- | Container for filters that define which source objects should be replicated.
+--
+-- /See:/ 'sourceSelectionCriteria' smart constructor.
+newtype SourceSelectionCriteria = SourceSelectionCriteria'
+  { _sscSseKMSEncryptedObjects :: Maybe SseKMSEncryptedObjects
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SourceSelectionCriteria' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sscSseKMSEncryptedObjects' - Container for filter information of selection of KMS Encrypted S3 objects.
+sourceSelectionCriteria
+    :: SourceSelectionCriteria
+sourceSelectionCriteria =
+  SourceSelectionCriteria' {_sscSseKMSEncryptedObjects = Nothing}
+
+
+-- | Container for filter information of selection of KMS Encrypted S3 objects.
+sscSseKMSEncryptedObjects :: Lens' SourceSelectionCriteria (Maybe SseKMSEncryptedObjects)
+sscSseKMSEncryptedObjects = lens _sscSseKMSEncryptedObjects (\ s a -> s{_sscSseKMSEncryptedObjects = a})
+
+instance FromXML SourceSelectionCriteria where
+        parseXML x
+          = SourceSelectionCriteria' <$>
+              (x .@? "SseKmsEncryptedObjects")
+
+instance Hashable SourceSelectionCriteria where
+
+instance NFData SourceSelectionCriteria where
+
+instance ToXML SourceSelectionCriteria where
+        toXML SourceSelectionCriteria'{..}
+          = mconcat
+              ["SseKmsEncryptedObjects" @=
+                 _sscSseKMSEncryptedObjects]
+
+-- | Container for filter information of selection of KMS Encrypted S3 objects.
+--
+-- /See:/ 'sseKMSEncryptedObjects' smart constructor.
+newtype SseKMSEncryptedObjects = SseKMSEncryptedObjects'
+  { _skeoStatus :: SseKMSEncryptedObjectsStatus
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SseKMSEncryptedObjects' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'skeoStatus' - The replication for KMS encrypted S3 objects is disabled if status is not Enabled.
+sseKMSEncryptedObjects
+    :: SseKMSEncryptedObjectsStatus -- ^ 'skeoStatus'
+    -> SseKMSEncryptedObjects
+sseKMSEncryptedObjects pStatus_ =
+  SseKMSEncryptedObjects' {_skeoStatus = pStatus_}
+
+
+-- | The replication for KMS encrypted S3 objects is disabled if status is not Enabled.
+skeoStatus :: Lens' SseKMSEncryptedObjects SseKMSEncryptedObjectsStatus
+skeoStatus = lens _skeoStatus (\ s a -> s{_skeoStatus = a})
+
+instance FromXML SseKMSEncryptedObjects where
+        parseXML x
+          = SseKMSEncryptedObjects' <$> (x .@ "Status")
+
+instance Hashable SseKMSEncryptedObjects where
+
+instance NFData SseKMSEncryptedObjects where
+
+instance ToXML SseKMSEncryptedObjects where
+        toXML SseKMSEncryptedObjects'{..}
+          = mconcat ["Status" @= _skeoStatus]
+
+-- | /See:/ 'stats' smart constructor.
+data Stats = Stats'
+  { _sBytesReturned  :: !(Maybe Integer)
+  , _sBytesScanned   :: !(Maybe Integer)
+  , _sBytesProcessed :: !(Maybe Integer)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Stats' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sBytesReturned' - Total number of bytes of records payload data returned.
+--
+-- * 'sBytesScanned' - Total number of object bytes scanned.
+--
+-- * 'sBytesProcessed' - Total number of uncompressed object bytes processed.
+stats
+    :: Stats
+stats =
+  Stats'
+    { _sBytesReturned = Nothing
+    , _sBytesScanned = Nothing
+    , _sBytesProcessed = Nothing
+    }
+
+
+-- | Total number of bytes of records payload data returned.
+sBytesReturned :: Lens' Stats (Maybe Integer)
+sBytesReturned = lens _sBytesReturned (\ s a -> s{_sBytesReturned = a})
+
+-- | Total number of object bytes scanned.
+sBytesScanned :: Lens' Stats (Maybe Integer)
+sBytesScanned = lens _sBytesScanned (\ s a -> s{_sBytesScanned = a})
+
+-- | Total number of uncompressed object bytes processed.
+sBytesProcessed :: Lens' Stats (Maybe Integer)
+sBytesProcessed = lens _sBytesProcessed (\ s a -> s{_sBytesProcessed = a})
+
+instance FromXML Stats where
+        parseXML x
+          = Stats' <$>
+              (x .@? "BytesReturned") <*> (x .@? "BytesScanned")
+                <*> (x .@? "BytesProcessed")
+
+instance Hashable Stats where
+
+instance NFData Stats where
+
+-- | /See:/ 'statsEvent' smart constructor.
+newtype StatsEvent = StatsEvent'
+  { _seDetails :: Maybe Stats
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StatsEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'seDetails' - The Stats event details.
+statsEvent
+    :: StatsEvent
+statsEvent = StatsEvent' {_seDetails = Nothing}
+
+
+-- | The Stats event details.
+seDetails :: Lens' StatsEvent (Maybe Stats)
+seDetails = lens _seDetails (\ s a -> s{_seDetails = a})
+
+instance FromXML StatsEvent where
+        parseXML x = StatsEvent' <$> (x .@? "Details")
+
+instance Hashable StatsEvent where
+
+instance NFData StatsEvent where
+
+-- | /See:/ 'storageClassAnalysis' smart constructor.
+newtype StorageClassAnalysis = StorageClassAnalysis'
+  { _scaDataExport :: Maybe StorageClassAnalysisDataExport
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StorageClassAnalysis' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scaDataExport' - A container used to describe how data related to the storage class analysis should be exported.
+storageClassAnalysis
+    :: StorageClassAnalysis
+storageClassAnalysis = StorageClassAnalysis' {_scaDataExport = Nothing}
+
+
+-- | A container used to describe how data related to the storage class analysis should be exported.
+scaDataExport :: Lens' StorageClassAnalysis (Maybe StorageClassAnalysisDataExport)
+scaDataExport = lens _scaDataExport (\ s a -> s{_scaDataExport = a})
+
+instance FromXML StorageClassAnalysis where
+        parseXML x
+          = StorageClassAnalysis' <$> (x .@? "DataExport")
+
+instance Hashable StorageClassAnalysis where
+
+instance NFData StorageClassAnalysis where
+
+instance ToXML StorageClassAnalysis where
+        toXML StorageClassAnalysis'{..}
+          = mconcat ["DataExport" @= _scaDataExport]
+
+-- | /See:/ 'storageClassAnalysisDataExport' smart constructor.
+data StorageClassAnalysisDataExport = StorageClassAnalysisDataExport'
+  { _scadeOutputSchemaVersion :: !StorageClassAnalysisSchemaVersion
+  , _scadeDestination         :: !AnalyticsExportDestination
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StorageClassAnalysisDataExport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scadeOutputSchemaVersion' - The version of the output schema to use when exporting data. Must be V_1.
+--
+-- * 'scadeDestination' - The place to store the data for an analysis.
+storageClassAnalysisDataExport
+    :: StorageClassAnalysisSchemaVersion -- ^ 'scadeOutputSchemaVersion'
+    -> AnalyticsExportDestination -- ^ 'scadeDestination'
+    -> StorageClassAnalysisDataExport
+storageClassAnalysisDataExport pOutputSchemaVersion_ pDestination_ =
+  StorageClassAnalysisDataExport'
+    { _scadeOutputSchemaVersion = pOutputSchemaVersion_
+    , _scadeDestination = pDestination_
+    }
+
+
+-- | The version of the output schema to use when exporting data. Must be V_1.
+scadeOutputSchemaVersion :: Lens' StorageClassAnalysisDataExport StorageClassAnalysisSchemaVersion
+scadeOutputSchemaVersion = lens _scadeOutputSchemaVersion (\ s a -> s{_scadeOutputSchemaVersion = a})
+
+-- | The place to store the data for an analysis.
+scadeDestination :: Lens' StorageClassAnalysisDataExport AnalyticsExportDestination
+scadeDestination = lens _scadeDestination (\ s a -> s{_scadeDestination = a})
+
+instance FromXML StorageClassAnalysisDataExport where
+        parseXML x
+          = StorageClassAnalysisDataExport' <$>
+              (x .@ "OutputSchemaVersion") <*> (x .@ "Destination")
+
+instance Hashable StorageClassAnalysisDataExport
+         where
+
+instance NFData StorageClassAnalysisDataExport where
+
+instance ToXML StorageClassAnalysisDataExport where
+        toXML StorageClassAnalysisDataExport'{..}
+          = mconcat
+              ["OutputSchemaVersion" @= _scadeOutputSchemaVersion,
+               "Destination" @= _scadeDestination]
+
+-- | /See:/ 'tag' smart constructor.
+data Tag = Tag'
+  { _tagKey   :: !ObjectKey
+  , _tagValue :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagKey' - Name of the tag.
+--
+-- * 'tagValue' - Value of the tag.
+tag
+    :: ObjectKey -- ^ 'tagKey'
+    -> Text -- ^ 'tagValue'
+    -> Tag
+tag pKey_ pValue_ = Tag' {_tagKey = pKey_, _tagValue = pValue_}
+
+
+-- | Name of the tag.
+tagKey :: Lens' Tag ObjectKey
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a})
+
+-- | Value of the tag.
+tagValue :: Lens' Tag Text
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a})
+
+instance FromXML Tag where
+        parseXML x = Tag' <$> (x .@ "Key") <*> (x .@ "Value")
+
+instance Hashable Tag where
+
+instance NFData Tag where
+
+instance ToXML Tag where
+        toXML Tag'{..}
+          = mconcat ["Key" @= _tagKey, "Value" @= _tagValue]
+
+-- | /See:/ 'tagging' smart constructor.
+newtype Tagging = Tagging'
+  { _tTagSet :: [Tag]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Tagging' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tTagSet' - Undocumented member.
+tagging
+    :: Tagging
+tagging = Tagging' {_tTagSet = mempty}
+
+
+-- | Undocumented member.
+tTagSet :: Lens' Tagging [Tag]
+tTagSet = lens _tTagSet (\ s a -> s{_tTagSet = a}) . _Coerce
+
+instance Hashable Tagging where
+
+instance NFData Tagging where
+
+instance ToXML Tagging where
+        toXML Tagging'{..}
+          = mconcat ["TagSet" @= toXMLList "Tag" _tTagSet]
+
+-- | /See:/ 'targetGrant' smart constructor.
+data TargetGrant = TargetGrant'
+  { _tgPermission :: !(Maybe BucketLogsPermission)
+  , _tgGrantee    :: !(Maybe Grantee)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TargetGrant' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tgPermission' - Logging permissions assigned to the Grantee for the bucket.
+--
+-- * 'tgGrantee' - Undocumented member.
+targetGrant
+    :: TargetGrant
+targetGrant = TargetGrant' {_tgPermission = Nothing, _tgGrantee = Nothing}
+
+
+-- | Logging permissions assigned to the Grantee for the bucket.
+tgPermission :: Lens' TargetGrant (Maybe BucketLogsPermission)
+tgPermission = lens _tgPermission (\ s a -> s{_tgPermission = a})
+
+-- | Undocumented member.
+tgGrantee :: Lens' TargetGrant (Maybe Grantee)
+tgGrantee = lens _tgGrantee (\ s a -> s{_tgGrantee = a})
+
+instance FromXML TargetGrant where
+        parseXML x
+          = TargetGrant' <$>
+              (x .@? "Permission") <*> (x .@? "Grantee")
+
+instance Hashable TargetGrant where
+
+instance NFData TargetGrant where
+
+instance ToXML TargetGrant where
+        toXML TargetGrant'{..}
+          = mconcat
+              ["Permission" @= _tgPermission,
+               "Grantee" @= _tgGrantee]
+
+-- | Container for specifying the configuration when you want Amazon S3 to publish events to an Amazon Simple Notification Service (Amazon SNS) topic.
+--
+-- /See:/ 'topicConfiguration' smart constructor.
+data TopicConfiguration = TopicConfiguration'
+  { _tcId       :: !(Maybe Text)
+  , _tcFilter   :: !(Maybe NotificationConfigurationFilter)
+  , _tcTopicARN :: !Text
+  , _tcEvents   :: ![Event]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TopicConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcId' - Undocumented member.
+--
+-- * 'tcFilter' - Undocumented member.
+--
+-- * 'tcTopicARN' - Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
+--
+-- * 'tcEvents' - Undocumented member.
+topicConfiguration
+    :: Text -- ^ 'tcTopicARN'
+    -> TopicConfiguration
+topicConfiguration pTopicARN_ =
+  TopicConfiguration'
+    { _tcId = Nothing
+    , _tcFilter = Nothing
+    , _tcTopicARN = pTopicARN_
+    , _tcEvents = mempty
+    }
+
+
+-- | Undocumented member.
+tcId :: Lens' TopicConfiguration (Maybe Text)
+tcId = lens _tcId (\ s a -> s{_tcId = a})
+
+-- | Undocumented member.
+tcFilter :: Lens' TopicConfiguration (Maybe NotificationConfigurationFilter)
+tcFilter = lens _tcFilter (\ s a -> s{_tcFilter = a})
+
+-- | Amazon SNS topic ARN to which Amazon S3 will publish a message when it detects events of specified type.
+tcTopicARN :: Lens' TopicConfiguration Text
+tcTopicARN = lens _tcTopicARN (\ s a -> s{_tcTopicARN = a})
+
+-- | Undocumented member.
+tcEvents :: Lens' TopicConfiguration [Event]
+tcEvents = lens _tcEvents (\ s a -> s{_tcEvents = a}) . _Coerce
+
+instance FromXML TopicConfiguration where
+        parseXML x
+          = TopicConfiguration' <$>
+              (x .@? "Id") <*> (x .@? "Filter") <*> (x .@ "Topic")
+                <*> (parseXMLList "Event" x)
+
+instance Hashable TopicConfiguration where
+
+instance NFData TopicConfiguration where
+
+instance ToXML TopicConfiguration where
+        toXML TopicConfiguration'{..}
+          = mconcat
+              ["Id" @= _tcId, "Filter" @= _tcFilter,
+               "Topic" @= _tcTopicARN, toXMLList "Event" _tcEvents]
+
+-- | /See:/ 'transition' smart constructor.
+data Transition = Transition'
+  { _tDays         :: !(Maybe Int)
+  , _tDate         :: !(Maybe RFC822)
+  , _tStorageClass :: !(Maybe TransitionStorageClass)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Transition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tDays' - Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+--
+-- * 'tDate' - Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+--
+-- * 'tStorageClass' - The class of storage used to store the object.
+transition
+    :: Transition
+transition =
+  Transition' {_tDays = Nothing, _tDate = Nothing, _tStorageClass = Nothing}
+
+
+-- | Indicates the lifetime, in days, of the objects that are subject to the rule. The value must be a non-zero positive integer.
+tDays :: Lens' Transition (Maybe Int)
+tDays = lens _tDays (\ s a -> s{_tDays = a})
+
+-- | Indicates at what date the object is to be moved or deleted. Should be in GMT ISO 8601 Format.
+tDate :: Lens' Transition (Maybe UTCTime)
+tDate = lens _tDate (\ s a -> s{_tDate = a}) . mapping _Time
+
+-- | The class of storage used to store the object.
+tStorageClass :: Lens' Transition (Maybe TransitionStorageClass)
+tStorageClass = lens _tStorageClass (\ s a -> s{_tStorageClass = a})
+
+instance FromXML Transition where
+        parseXML x
+          = Transition' <$>
+              (x .@? "Days") <*> (x .@? "Date") <*>
+                (x .@? "StorageClass")
+
+instance Hashable Transition where
+
+instance NFData Transition where
+
+instance ToXML Transition where
+        toXML Transition'{..}
+          = mconcat
+              ["Days" @= _tDays, "Date" @= _tDate,
+               "StorageClass" @= _tStorageClass]
+
+-- | /See:/ 'versioningConfiguration' smart constructor.
+data VersioningConfiguration = VersioningConfiguration'
+  { _vcStatus    :: !(Maybe BucketVersioningStatus)
+  , _vcMFADelete :: !(Maybe MFADelete)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'VersioningConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcStatus' - The versioning state of the bucket.
+--
+-- * 'vcMFADelete' - Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
+versioningConfiguration
+    :: VersioningConfiguration
+versioningConfiguration =
+  VersioningConfiguration' {_vcStatus = Nothing, _vcMFADelete = Nothing}
+
+
+-- | The versioning state of the bucket.
+vcStatus :: Lens' VersioningConfiguration (Maybe BucketVersioningStatus)
+vcStatus = lens _vcStatus (\ s a -> s{_vcStatus = a})
+
+-- | Specifies whether MFA delete is enabled in the bucket versioning configuration. This element is only returned if the bucket has been configured with MFA delete. If the bucket has never been so configured, this element is not returned.
+vcMFADelete :: Lens' VersioningConfiguration (Maybe MFADelete)
+vcMFADelete = lens _vcMFADelete (\ s a -> s{_vcMFADelete = a})
+
+instance Hashable VersioningConfiguration where
+
+instance NFData VersioningConfiguration where
+
+instance ToXML VersioningConfiguration where
+        toXML VersioningConfiguration'{..}
+          = mconcat
+              ["Status" @= _vcStatus, "MfaDelete" @= _vcMFADelete]
+
+-- | /See:/ 'websiteConfiguration' smart constructor.
+data WebsiteConfiguration = WebsiteConfiguration'
+  { _wcRedirectAllRequestsTo :: !(Maybe RedirectAllRequestsTo)
+  , _wcErrorDocument         :: !(Maybe ErrorDocument)
+  , _wcIndexDocument         :: !(Maybe IndexDocument)
+  , _wcRoutingRules          :: !(Maybe [RoutingRule])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'WebsiteConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wcRedirectAllRequestsTo' - Undocumented member.
+--
+-- * 'wcErrorDocument' - Undocumented member.
+--
+-- * 'wcIndexDocument' - Undocumented member.
+--
+-- * 'wcRoutingRules' - Undocumented member.
+websiteConfiguration
+    :: WebsiteConfiguration
+websiteConfiguration =
+  WebsiteConfiguration'
+    { _wcRedirectAllRequestsTo = Nothing
+    , _wcErrorDocument = Nothing
+    , _wcIndexDocument = Nothing
+    , _wcRoutingRules = Nothing
+    }
+
+
+-- | Undocumented member.
+wcRedirectAllRequestsTo :: Lens' WebsiteConfiguration (Maybe RedirectAllRequestsTo)
+wcRedirectAllRequestsTo = lens _wcRedirectAllRequestsTo (\ s a -> s{_wcRedirectAllRequestsTo = a})
+
+-- | Undocumented member.
+wcErrorDocument :: Lens' WebsiteConfiguration (Maybe ErrorDocument)
+wcErrorDocument = lens _wcErrorDocument (\ s a -> s{_wcErrorDocument = a})
+
+-- | Undocumented member.
+wcIndexDocument :: Lens' WebsiteConfiguration (Maybe IndexDocument)
+wcIndexDocument = lens _wcIndexDocument (\ s a -> s{_wcIndexDocument = a})
+
+-- | Undocumented member.
+wcRoutingRules :: Lens' WebsiteConfiguration [RoutingRule]
+wcRoutingRules = lens _wcRoutingRules (\ s a -> s{_wcRoutingRules = a}) . _Default . _Coerce
 
 instance Hashable WebsiteConfiguration where
 
diff --git a/gen/Network/AWS/S3/Types/Sum.hs b/gen/Network/AWS/S3/Types/Sum.hs
--- a/gen/Network/AWS/S3/Types/Sum.hs
+++ b/gen/Network/AWS/S3/Types/Sum.hs
@@ -9,7 +9,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.Types.Sum
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -173,6 +173,33 @@
 instance ToXML BucketVersioningStatus where
     toXML = toXMLText
 
+data CompressionType
+  = CTGzip
+  | CTNone
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText CompressionType where
+    parser = takeLowerText >>= \case
+        "gzip" -> pure CTGzip
+        "none" -> pure CTNone
+        e -> fromTextError $ "Failure parsing CompressionType from value: '" <> e
+           <> "'. Accepted values: gzip, none"
+
+instance ToText CompressionType where
+    toText = \case
+        CTGzip -> "GZIP"
+        CTNone -> "NONE"
+
+instance Hashable     CompressionType
+instance NFData       CompressionType
+instance ToByteString CompressionType
+instance ToQuery      CompressionType
+instance ToHeader     CompressionType
+
+instance ToXML CompressionType where
+    toXML = toXMLText
+
 -- | Requests Amazon S3 to encode the object keys in the response and specifies the encoding method to use. An object key may contain any Unicode character; however, XML 1.0 parser cannot parse some characters, such as characters with an ASCII value from 0 to 10. For characters that are not supported in XML 1.0, you can add this parameter to request that Amazon S3 encode the keys in the response.
 data EncodingType =
   URL
@@ -283,6 +310,60 @@
 instance ToXML ExpirationStatus where
     toXML = toXMLText
 
+data ExpressionType =
+  Sql
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ExpressionType where
+    parser = takeLowerText >>= \case
+        "sql" -> pure Sql
+        e -> fromTextError $ "Failure parsing ExpressionType from value: '" <> e
+           <> "'. Accepted values: sql"
+
+instance ToText ExpressionType where
+    toText = \case
+        Sql -> "SQL"
+
+instance Hashable     ExpressionType
+instance NFData       ExpressionType
+instance ToByteString ExpressionType
+instance ToQuery      ExpressionType
+instance ToHeader     ExpressionType
+
+instance ToXML ExpressionType where
+    toXML = toXMLText
+
+data FileHeaderInfo
+  = Ignore
+  | None
+  | Use
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText FileHeaderInfo where
+    parser = takeLowerText >>= \case
+        "ignore" -> pure Ignore
+        "none" -> pure None
+        "use" -> pure Use
+        e -> fromTextError $ "Failure parsing FileHeaderInfo from value: '" <> e
+           <> "'. Accepted values: ignore, none, use"
+
+instance ToText FileHeaderInfo where
+    toText = \case
+        Ignore -> "IGNORE"
+        None -> "NONE"
+        Use -> "USE"
+
+instance Hashable     FileHeaderInfo
+instance NFData       FileHeaderInfo
+instance ToByteString FileHeaderInfo
+instance ToQuery      FileHeaderInfo
+instance ToHeader     FileHeaderInfo
+
+instance ToXML FileHeaderInfo where
+    toXML = toXMLText
+
 data FilterRuleName
   = Prefix
   | Suffix
@@ -313,20 +394,23 @@
 instance ToXML FilterRuleName where
     toXML = toXMLText
 
-data InventoryFormat =
-  IFCSV
+data InventoryFormat
+  = IFCSV
+  | IFOrc
   deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
 
 instance FromText InventoryFormat where
     parser = takeLowerText >>= \case
         "csv" -> pure IFCSV
+        "orc" -> pure IFOrc
         e -> fromTextError $ "Failure parsing InventoryFormat from value: '" <> e
-           <> "'. Accepted values: csv"
+           <> "'. Accepted values: csv, orc"
 
 instance ToText InventoryFormat where
     toText = \case
         IFCSV -> "CSV"
+        IFOrc -> "ORC"
 
 instance Hashable     InventoryFormat
 instance NFData       InventoryFormat
@@ -445,6 +529,33 @@
 instance ToXML InventoryOptionalField where
     toXML = toXMLText
 
+data JSONType
+  = Document
+  | Lines
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText JSONType where
+    parser = takeLowerText >>= \case
+        "document" -> pure Document
+        "lines" -> pure Lines
+        e -> fromTextError $ "Failure parsing JSONType from value: '" <> e
+           <> "'. Accepted values: document, lines"
+
+instance ToText JSONType where
+    toText = \case
+        Document -> "DOCUMENT"
+        Lines -> "LINES"
+
+instance Hashable     JSONType
+instance NFData       JSONType
+instance ToByteString JSONType
+instance ToQuery      JSONType
+instance ToHeader     JSONType
+
+instance ToXML JSONType where
+    toXML = toXMLText
+
 data MFADelete
   = MDDisabled
   | MDEnabled
@@ -751,6 +862,33 @@
 instance ToXML Protocol where
     toXML = toXMLText
 
+data QuoteFields
+  = ASNeeded
+  | Always
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText QuoteFields where
+    parser = takeLowerText >>= \case
+        "asneeded" -> pure ASNeeded
+        "always" -> pure Always
+        e -> fromTextError $ "Failure parsing QuoteFields from value: '" <> e
+           <> "'. Accepted values: asneeded, always"
+
+instance ToText QuoteFields where
+    toText = \case
+        ASNeeded -> "ASNEEDED"
+        Always -> "ALWAYS"
+
+instance Hashable     QuoteFields
+instance NFData       QuoteFields
+instance ToByteString QuoteFields
+instance ToQuery      QuoteFields
+instance ToHeader     QuoteFields
+
+instance ToXML QuoteFields where
+    toXML = toXMLText
+
 data ReplicationRuleStatus
   = Disabled
   | Enabled
@@ -864,6 +1002,30 @@
 instance ToXML RequestPayer where
     toXML = toXMLText
 
+data RestoreRequestType =
+  Select
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText RestoreRequestType where
+    parser = takeLowerText >>= \case
+        "select" -> pure Select
+        e -> fromTextError $ "Failure parsing RestoreRequestType from value: '" <> e
+           <> "'. Accepted values: select"
+
+instance ToText RestoreRequestType where
+    toText = \case
+        Select -> "SELECT"
+
+instance Hashable     RestoreRequestType
+instance NFData       RestoreRequestType
+instance ToByteString RestoreRequestType
+instance ToQuery      RestoreRequestType
+instance ToHeader     RestoreRequestType
+
+instance ToXML RestoreRequestType where
+    toXML = toXMLText
+
 data ServerSideEncryption
   = AES256
   | AWSKMS
@@ -925,7 +1087,8 @@
     toXML = toXMLText
 
 data StorageClass
-  = ReducedRedundancy
+  = OnezoneIA
+  | ReducedRedundancy
   | Standard
   | StandardIA
   deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
@@ -933,14 +1096,16 @@
 
 instance FromText StorageClass where
     parser = takeLowerText >>= \case
+        "onezone_ia" -> pure OnezoneIA
         "reduced_redundancy" -> pure ReducedRedundancy
         "standard" -> pure Standard
         "standard_ia" -> pure StandardIA
         e -> fromTextError $ "Failure parsing StorageClass from value: '" <> e
-           <> "'. Accepted values: reduced_redundancy, standard, standard_ia"
+           <> "'. Accepted values: onezone_ia, reduced_redundancy, standard, standard_ia"
 
 instance ToText StorageClass where
     toText = \case
+        OnezoneIA -> "ONEZONE_IA"
         ReducedRedundancy -> "REDUCED_REDUNDANCY"
         Standard -> "STANDARD"
         StandardIA -> "STANDARD_IA"
@@ -1043,6 +1208,7 @@
 
 data TransitionStorageClass
   = TSCGlacier
+  | TSCOnezoneIA
   | TSCStandardIA
   deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
 
@@ -1050,13 +1216,15 @@
 instance FromText TransitionStorageClass where
     parser = takeLowerText >>= \case
         "glacier" -> pure TSCGlacier
+        "onezone_ia" -> pure TSCOnezoneIA
         "standard_ia" -> pure TSCStandardIA
         e -> fromTextError $ "Failure parsing TransitionStorageClass from value: '" <> e
-           <> "'. Accepted values: glacier, standard_ia"
+           <> "'. Accepted values: glacier, onezone_ia, standard_ia"
 
 instance ToText TransitionStorageClass where
     toText = \case
         TSCGlacier -> "GLACIER"
+        TSCOnezoneIA -> "ONEZONE_IA"
         TSCStandardIA -> "STANDARD_IA"
 
 instance Hashable     TransitionStorageClass
diff --git a/gen/Network/AWS/S3/UploadPart.hs b/gen/Network/AWS/S3/UploadPart.hs
--- a/gen/Network/AWS/S3/UploadPart.hs
+++ b/gen/Network/AWS/S3/UploadPart.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.UploadPart
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -111,63 +111,63 @@
     -> UploadPart
 uploadPart pBucket_ pKey_ pPartNumber_ pUploadId_ pBody_ =
   UploadPart'
-  { _upContentLength = Nothing
-  , _upSSECustomerAlgorithm = Nothing
-  , _upSSECustomerKey = Nothing
-  , _upRequestPayer = Nothing
-  , _upSSECustomerKeyMD5 = Nothing
-  , _upContentMD5 = Nothing
-  , _upBucket = pBucket_
-  , _upKey = pKey_
-  , _upPartNumber = pPartNumber_
-  , _upUploadId = pUploadId_
-  , _upBody = pBody_
-  }
+    { _upContentLength = Nothing
+    , _upSSECustomerAlgorithm = Nothing
+    , _upSSECustomerKey = Nothing
+    , _upRequestPayer = Nothing
+    , _upSSECustomerKeyMD5 = Nothing
+    , _upContentMD5 = Nothing
+    , _upBucket = pBucket_
+    , _upKey = pKey_
+    , _upPartNumber = pPartNumber_
+    , _upUploadId = pUploadId_
+    , _upBody = pBody_
+    }
 
 
 -- | Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically.
 upContentLength :: Lens' UploadPart (Maybe Integer)
-upContentLength = lens _upContentLength (\ s a -> s{_upContentLength = a});
+upContentLength = lens _upContentLength (\ s a -> s{_upContentLength = a})
 
 -- | Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 upSSECustomerAlgorithm :: Lens' UploadPart (Maybe Text)
-upSSECustomerAlgorithm = lens _upSSECustomerAlgorithm (\ s a -> s{_upSSECustomerAlgorithm = a});
+upSSECustomerAlgorithm = lens _upSSECustomerAlgorithm (\ s a -> s{_upSSECustomerAlgorithm = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm header. This must be the same encryption key specified in the initiate multipart upload request.
 upSSECustomerKey :: Lens' UploadPart (Maybe Text)
-upSSECustomerKey = lens _upSSECustomerKey (\ s a -> s{_upSSECustomerKey = a}) . mapping _Sensitive;
+upSSECustomerKey = lens _upSSECustomerKey (\ s a -> s{_upSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Undocumented member.
 upRequestPayer :: Lens' UploadPart (Maybe RequestPayer)
-upRequestPayer = lens _upRequestPayer (\ s a -> s{_upRequestPayer = a});
+upRequestPayer = lens _upRequestPayer (\ s a -> s{_upRequestPayer = a})
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 upSSECustomerKeyMD5 :: Lens' UploadPart (Maybe Text)
-upSSECustomerKeyMD5 = lens _upSSECustomerKeyMD5 (\ s a -> s{_upSSECustomerKeyMD5 = a});
+upSSECustomerKeyMD5 = lens _upSSECustomerKeyMD5 (\ s a -> s{_upSSECustomerKeyMD5 = a})
 
 -- | The base64-encoded 128-bit MD5 digest of the part data.
 upContentMD5 :: Lens' UploadPart (Maybe Text)
-upContentMD5 = lens _upContentMD5 (\ s a -> s{_upContentMD5 = a});
+upContentMD5 = lens _upContentMD5 (\ s a -> s{_upContentMD5 = a})
 
 -- | Name of the bucket to which the multipart upload was initiated.
 upBucket :: Lens' UploadPart BucketName
-upBucket = lens _upBucket (\ s a -> s{_upBucket = a});
+upBucket = lens _upBucket (\ s a -> s{_upBucket = a})
 
 -- | Object key for which the multipart upload was initiated.
 upKey :: Lens' UploadPart ObjectKey
-upKey = lens _upKey (\ s a -> s{_upKey = a});
+upKey = lens _upKey (\ s a -> s{_upKey = a})
 
 -- | Part number of part being uploaded. This is a positive integer between 1 and 10,000.
 upPartNumber :: Lens' UploadPart Int
-upPartNumber = lens _upPartNumber (\ s a -> s{_upPartNumber = a});
+upPartNumber = lens _upPartNumber (\ s a -> s{_upPartNumber = a})
 
 -- | Upload ID identifying the multipart upload whose part is being uploaded.
 upUploadId :: Lens' UploadPart Text
-upUploadId = lens _upUploadId (\ s a -> s{_upUploadId = a});
+upUploadId = lens _upUploadId (\ s a -> s{_upUploadId = a})
 
 -- | Object data.
 upBody :: Lens' UploadPart RqBody
-upBody = lens _upBody (\ s a -> s{_upBody = a});
+upBody = lens _upBody (\ s a -> s{_upBody = a})
 
 instance AWSRequest UploadPart where
         type Rs UploadPart = UploadPartResponse
@@ -248,42 +248,42 @@
     -> UploadPartResponse
 uploadPartResponse pResponseStatus_ =
   UploadPartResponse'
-  { _uprsRequestCharged = Nothing
-  , _uprsETag = Nothing
-  , _uprsSSECustomerAlgorithm = Nothing
-  , _uprsSSECustomerKeyMD5 = Nothing
-  , _uprsSSEKMSKeyId = Nothing
-  , _uprsServerSideEncryption = Nothing
-  , _uprsResponseStatus = pResponseStatus_
-  }
+    { _uprsRequestCharged = Nothing
+    , _uprsETag = Nothing
+    , _uprsSSECustomerAlgorithm = Nothing
+    , _uprsSSECustomerKeyMD5 = Nothing
+    , _uprsSSEKMSKeyId = Nothing
+    , _uprsServerSideEncryption = Nothing
+    , _uprsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 uprsRequestCharged :: Lens' UploadPartResponse (Maybe RequestCharged)
-uprsRequestCharged = lens _uprsRequestCharged (\ s a -> s{_uprsRequestCharged = a});
+uprsRequestCharged = lens _uprsRequestCharged (\ s a -> s{_uprsRequestCharged = a})
 
 -- | Entity tag for the uploaded object.
 uprsETag :: Lens' UploadPartResponse (Maybe ETag)
-uprsETag = lens _uprsETag (\ s a -> s{_uprsETag = a});
+uprsETag = lens _uprsETag (\ s a -> s{_uprsETag = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 uprsSSECustomerAlgorithm :: Lens' UploadPartResponse (Maybe Text)
-uprsSSECustomerAlgorithm = lens _uprsSSECustomerAlgorithm (\ s a -> s{_uprsSSECustomerAlgorithm = a});
+uprsSSECustomerAlgorithm = lens _uprsSSECustomerAlgorithm (\ s a -> s{_uprsSSECustomerAlgorithm = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header to provide round trip message integrity verification of the customer-provided encryption key.
 uprsSSECustomerKeyMD5 :: Lens' UploadPartResponse (Maybe Text)
-uprsSSECustomerKeyMD5 = lens _uprsSSECustomerKeyMD5 (\ s a -> s{_uprsSSECustomerKeyMD5 = a});
+uprsSSECustomerKeyMD5 = lens _uprsSSECustomerKeyMD5 (\ s a -> s{_uprsSSECustomerKeyMD5 = a})
 
 -- | If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 uprsSSEKMSKeyId :: Lens' UploadPartResponse (Maybe Text)
-uprsSSEKMSKeyId = lens _uprsSSEKMSKeyId (\ s a -> s{_uprsSSEKMSKeyId = a}) . mapping _Sensitive;
+uprsSSEKMSKeyId = lens _uprsSSEKMSKeyId (\ s a -> s{_uprsSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 uprsServerSideEncryption :: Lens' UploadPartResponse (Maybe ServerSideEncryption)
-uprsServerSideEncryption = lens _uprsServerSideEncryption (\ s a -> s{_uprsServerSideEncryption = a});
+uprsServerSideEncryption = lens _uprsServerSideEncryption (\ s a -> s{_uprsServerSideEncryption = a})
 
 -- | -- | The response status code.
 uprsResponseStatus :: Lens' UploadPartResponse Int
-uprsResponseStatus = lens _uprsResponseStatus (\ s a -> s{_uprsResponseStatus = a});
+uprsResponseStatus = lens _uprsResponseStatus (\ s a -> s{_uprsResponseStatus = a})
 
 instance NFData UploadPartResponse where
diff --git a/gen/Network/AWS/S3/UploadPartCopy.hs b/gen/Network/AWS/S3/UploadPartCopy.hs
--- a/gen/Network/AWS/S3/UploadPartCopy.hs
+++ b/gen/Network/AWS/S3/UploadPartCopy.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.UploadPartCopy
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -132,93 +132,93 @@
     -> UploadPartCopy
 uploadPartCopy pBucket_ pCopySource_ pKey_ pPartNumber_ pUploadId_ =
   UploadPartCopy'
-  { _upcCopySourceIfModifiedSince = Nothing
-  , _upcCopySourceIfUnmodifiedSince = Nothing
-  , _upcCopySourceRange = Nothing
-  , _upcCopySourceSSECustomerKeyMD5 = Nothing
-  , _upcCopySourceIfNoneMatch = Nothing
-  , _upcSSECustomerAlgorithm = Nothing
-  , _upcSSECustomerKey = Nothing
-  , _upcRequestPayer = Nothing
-  , _upcCopySourceIfMatch = Nothing
-  , _upcSSECustomerKeyMD5 = Nothing
-  , _upcCopySourceSSECustomerKey = Nothing
-  , _upcCopySourceSSECustomerAlgorithm = Nothing
-  , _upcBucket = pBucket_
-  , _upcCopySource = pCopySource_
-  , _upcKey = pKey_
-  , _upcPartNumber = pPartNumber_
-  , _upcUploadId = pUploadId_
-  }
+    { _upcCopySourceIfModifiedSince = Nothing
+    , _upcCopySourceIfUnmodifiedSince = Nothing
+    , _upcCopySourceRange = Nothing
+    , _upcCopySourceSSECustomerKeyMD5 = Nothing
+    , _upcCopySourceIfNoneMatch = Nothing
+    , _upcSSECustomerAlgorithm = Nothing
+    , _upcSSECustomerKey = Nothing
+    , _upcRequestPayer = Nothing
+    , _upcCopySourceIfMatch = Nothing
+    , _upcSSECustomerKeyMD5 = Nothing
+    , _upcCopySourceSSECustomerKey = Nothing
+    , _upcCopySourceSSECustomerAlgorithm = Nothing
+    , _upcBucket = pBucket_
+    , _upcCopySource = pCopySource_
+    , _upcKey = pKey_
+    , _upcPartNumber = pPartNumber_
+    , _upcUploadId = pUploadId_
+    }
 
 
 -- | Copies the object if it has been modified since the specified time.
 upcCopySourceIfModifiedSince :: Lens' UploadPartCopy (Maybe UTCTime)
-upcCopySourceIfModifiedSince = lens _upcCopySourceIfModifiedSince (\ s a -> s{_upcCopySourceIfModifiedSince = a}) . mapping _Time;
+upcCopySourceIfModifiedSince = lens _upcCopySourceIfModifiedSince (\ s a -> s{_upcCopySourceIfModifiedSince = a}) . mapping _Time
 
 -- | Copies the object if it hasn't been modified since the specified time.
 upcCopySourceIfUnmodifiedSince :: Lens' UploadPartCopy (Maybe UTCTime)
-upcCopySourceIfUnmodifiedSince = lens _upcCopySourceIfUnmodifiedSince (\ s a -> s{_upcCopySourceIfUnmodifiedSince = a}) . mapping _Time;
+upcCopySourceIfUnmodifiedSince = lens _upcCopySourceIfUnmodifiedSince (\ s a -> s{_upcCopySourceIfUnmodifiedSince = a}) . mapping _Time
 
 -- | The range of bytes to copy from the source object. The range value must use the form bytes=first-last, where the first and last are the zero-based byte offsets to copy. For example, bytes=0-9 indicates that you want to copy the first ten bytes of the source. You can copy a range only if the source object is greater than 5 GB.
 upcCopySourceRange :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceRange = lens _upcCopySourceRange (\ s a -> s{_upcCopySourceRange = a});
+upcCopySourceRange = lens _upcCopySourceRange (\ s a -> s{_upcCopySourceRange = a})
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 upcCopySourceSSECustomerKeyMD5 :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceSSECustomerKeyMD5 = lens _upcCopySourceSSECustomerKeyMD5 (\ s a -> s{_upcCopySourceSSECustomerKeyMD5 = a});
+upcCopySourceSSECustomerKeyMD5 = lens _upcCopySourceSSECustomerKeyMD5 (\ s a -> s{_upcCopySourceSSECustomerKeyMD5 = a})
 
 -- | Copies the object if its entity tag (ETag) is different than the specified ETag.
 upcCopySourceIfNoneMatch :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceIfNoneMatch = lens _upcCopySourceIfNoneMatch (\ s a -> s{_upcCopySourceIfNoneMatch = a});
+upcCopySourceIfNoneMatch = lens _upcCopySourceIfNoneMatch (\ s a -> s{_upcCopySourceIfNoneMatch = a})
 
 -- | Specifies the algorithm to use to when encrypting the object (e.g., AES256).
 upcSSECustomerAlgorithm :: Lens' UploadPartCopy (Maybe Text)
-upcSSECustomerAlgorithm = lens _upcSSECustomerAlgorithm (\ s a -> s{_upcSSECustomerAlgorithm = a});
+upcSSECustomerAlgorithm = lens _upcSSECustomerAlgorithm (\ s a -> s{_upcSSECustomerAlgorithm = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use in encrypting data. This value is used to store the object and then it is discarded; Amazon does not store the encryption key. The key must be appropriate for use with the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm header. This must be the same encryption key specified in the initiate multipart upload request.
 upcSSECustomerKey :: Lens' UploadPartCopy (Maybe Text)
-upcSSECustomerKey = lens _upcSSECustomerKey (\ s a -> s{_upcSSECustomerKey = a}) . mapping _Sensitive;
+upcSSECustomerKey = lens _upcSSECustomerKey (\ s a -> s{_upcSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Undocumented member.
 upcRequestPayer :: Lens' UploadPartCopy (Maybe RequestPayer)
-upcRequestPayer = lens _upcRequestPayer (\ s a -> s{_upcRequestPayer = a});
+upcRequestPayer = lens _upcRequestPayer (\ s a -> s{_upcRequestPayer = a})
 
 -- | Copies the object if its entity tag (ETag) matches the specified tag.
 upcCopySourceIfMatch :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceIfMatch = lens _upcCopySourceIfMatch (\ s a -> s{_upcCopySourceIfMatch = a});
+upcCopySourceIfMatch = lens _upcCopySourceIfMatch (\ s a -> s{_upcCopySourceIfMatch = a})
 
 -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321. Amazon S3 uses this header for a message integrity check to ensure the encryption key was transmitted without error.
 upcSSECustomerKeyMD5 :: Lens' UploadPartCopy (Maybe Text)
-upcSSECustomerKeyMD5 = lens _upcSSECustomerKeyMD5 (\ s a -> s{_upcSSECustomerKeyMD5 = a});
+upcSSECustomerKeyMD5 = lens _upcSSECustomerKeyMD5 (\ s a -> s{_upcSSECustomerKeyMD5 = a})
 
 -- | Specifies the customer-provided encryption key for Amazon S3 to use to decrypt the source object. The encryption key provided in this header must be one that was used when the source object was created.
 upcCopySourceSSECustomerKey :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceSSECustomerKey = lens _upcCopySourceSSECustomerKey (\ s a -> s{_upcCopySourceSSECustomerKey = a}) . mapping _Sensitive;
+upcCopySourceSSECustomerKey = lens _upcCopySourceSSECustomerKey (\ s a -> s{_upcCopySourceSSECustomerKey = a}) . mapping _Sensitive
 
 -- | Specifies the algorithm to use when decrypting the source object (e.g., AES256).
 upcCopySourceSSECustomerAlgorithm :: Lens' UploadPartCopy (Maybe Text)
-upcCopySourceSSECustomerAlgorithm = lens _upcCopySourceSSECustomerAlgorithm (\ s a -> s{_upcCopySourceSSECustomerAlgorithm = a});
+upcCopySourceSSECustomerAlgorithm = lens _upcCopySourceSSECustomerAlgorithm (\ s a -> s{_upcCopySourceSSECustomerAlgorithm = a})
 
 -- | Undocumented member.
 upcBucket :: Lens' UploadPartCopy BucketName
-upcBucket = lens _upcBucket (\ s a -> s{_upcBucket = a});
+upcBucket = lens _upcBucket (\ s a -> s{_upcBucket = a})
 
 -- | The name of the source bucket and key name of the source object, separated by a slash (/). Must be URL-encoded.
 upcCopySource :: Lens' UploadPartCopy Text
-upcCopySource = lens _upcCopySource (\ s a -> s{_upcCopySource = a});
+upcCopySource = lens _upcCopySource (\ s a -> s{_upcCopySource = a})
 
 -- | Undocumented member.
 upcKey :: Lens' UploadPartCopy ObjectKey
-upcKey = lens _upcKey (\ s a -> s{_upcKey = a});
+upcKey = lens _upcKey (\ s a -> s{_upcKey = a})
 
 -- | Part number of part being copied. This is a positive integer between 1 and 10,000.
 upcPartNumber :: Lens' UploadPartCopy Int
-upcPartNumber = lens _upcPartNumber (\ s a -> s{_upcPartNumber = a});
+upcPartNumber = lens _upcPartNumber (\ s a -> s{_upcPartNumber = a})
 
 -- | Upload ID identifying the multipart upload whose part is being copied.
 upcUploadId :: Lens' UploadPartCopy Text
-upcUploadId = lens _upcUploadId (\ s a -> s{_upcUploadId = a});
+upcUploadId = lens _upcUploadId (\ s a -> s{_upcUploadId = a})
 
 instance AWSRequest UploadPartCopy where
         type Rs UploadPartCopy = UploadPartCopyResponse
@@ -317,47 +317,47 @@
     -> UploadPartCopyResponse
 uploadPartCopyResponse pResponseStatus_ =
   UploadPartCopyResponse'
-  { _upcrsRequestCharged = Nothing
-  , _upcrsCopyPartResult = Nothing
-  , _upcrsSSECustomerAlgorithm = Nothing
-  , _upcrsCopySourceVersionId = Nothing
-  , _upcrsSSECustomerKeyMD5 = Nothing
-  , _upcrsSSEKMSKeyId = Nothing
-  , _upcrsServerSideEncryption = Nothing
-  , _upcrsResponseStatus = pResponseStatus_
-  }
+    { _upcrsRequestCharged = Nothing
+    , _upcrsCopyPartResult = Nothing
+    , _upcrsSSECustomerAlgorithm = Nothing
+    , _upcrsCopySourceVersionId = Nothing
+    , _upcrsSSECustomerKeyMD5 = Nothing
+    , _upcrsSSEKMSKeyId = Nothing
+    , _upcrsServerSideEncryption = Nothing
+    , _upcrsResponseStatus = pResponseStatus_
+    }
 
 
 -- | Undocumented member.
 upcrsRequestCharged :: Lens' UploadPartCopyResponse (Maybe RequestCharged)
-upcrsRequestCharged = lens _upcrsRequestCharged (\ s a -> s{_upcrsRequestCharged = a});
+upcrsRequestCharged = lens _upcrsRequestCharged (\ s a -> s{_upcrsRequestCharged = a})
 
 -- | Undocumented member.
 upcrsCopyPartResult :: Lens' UploadPartCopyResponse (Maybe CopyPartResult)
-upcrsCopyPartResult = lens _upcrsCopyPartResult (\ s a -> s{_upcrsCopyPartResult = a});
+upcrsCopyPartResult = lens _upcrsCopyPartResult (\ s a -> s{_upcrsCopyPartResult = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header confirming the encryption algorithm used.
 upcrsSSECustomerAlgorithm :: Lens' UploadPartCopyResponse (Maybe Text)
-upcrsSSECustomerAlgorithm = lens _upcrsSSECustomerAlgorithm (\ s a -> s{_upcrsSSECustomerAlgorithm = a});
+upcrsSSECustomerAlgorithm = lens _upcrsSSECustomerAlgorithm (\ s a -> s{_upcrsSSECustomerAlgorithm = a})
 
 -- | The version of the source object that was copied, if you have enabled versioning on the source bucket.
 upcrsCopySourceVersionId :: Lens' UploadPartCopyResponse (Maybe Text)
-upcrsCopySourceVersionId = lens _upcrsCopySourceVersionId (\ s a -> s{_upcrsCopySourceVersionId = a});
+upcrsCopySourceVersionId = lens _upcrsCopySourceVersionId (\ s a -> s{_upcrsCopySourceVersionId = a})
 
 -- | If server-side encryption with a customer-provided encryption key was requested, the response will include this header to provide round trip message integrity verification of the customer-provided encryption key.
 upcrsSSECustomerKeyMD5 :: Lens' UploadPartCopyResponse (Maybe Text)
-upcrsSSECustomerKeyMD5 = lens _upcrsSSECustomerKeyMD5 (\ s a -> s{_upcrsSSECustomerKeyMD5 = a});
+upcrsSSECustomerKeyMD5 = lens _upcrsSSECustomerKeyMD5 (\ s a -> s{_upcrsSSECustomerKeyMD5 = a})
 
 -- | If present, specifies the ID of the AWS Key Management Service (KMS) master encryption key that was used for the object.
 upcrsSSEKMSKeyId :: Lens' UploadPartCopyResponse (Maybe Text)
-upcrsSSEKMSKeyId = lens _upcrsSSEKMSKeyId (\ s a -> s{_upcrsSSEKMSKeyId = a}) . mapping _Sensitive;
+upcrsSSEKMSKeyId = lens _upcrsSSEKMSKeyId (\ s a -> s{_upcrsSSEKMSKeyId = a}) . mapping _Sensitive
 
 -- | The Server-side encryption algorithm used when storing this object in S3 (e.g., AES256, aws:kms).
 upcrsServerSideEncryption :: Lens' UploadPartCopyResponse (Maybe ServerSideEncryption)
-upcrsServerSideEncryption = lens _upcrsServerSideEncryption (\ s a -> s{_upcrsServerSideEncryption = a});
+upcrsServerSideEncryption = lens _upcrsServerSideEncryption (\ s a -> s{_upcrsServerSideEncryption = a})
 
 -- | -- | The response status code.
 upcrsResponseStatus :: Lens' UploadPartCopyResponse Int
-upcrsResponseStatus = lens _upcrsResponseStatus (\ s a -> s{_upcrsResponseStatus = a});
+upcrsResponseStatus = lens _upcrsResponseStatus (\ s a -> s{_upcrsResponseStatus = a})
 
 instance NFData UploadPartCopyResponse where
diff --git a/gen/Network/AWS/S3/Waiters.hs b/gen/Network/AWS/S3/Waiters.hs
--- a/gen/Network/AWS/S3/Waiters.hs
+++ b/gen/Network/AWS/S3/Waiters.hs
@@ -7,7 +7,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.Waiters
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -28,44 +28,48 @@
 objectNotExists :: Wait HeadObject
 objectNotExists =
   Wait
-  { _waitName = "ObjectNotExists"
-  , _waitAttempts = 20
-  , _waitDelay = 5
-  , _waitAcceptors = [matchStatus 404 AcceptSuccess]
-  }
+    { _waitName = "ObjectNotExists"
+    , _waitAttempts = 20
+    , _waitDelay = 5
+    , _waitAcceptors = [matchStatus 404 AcceptSuccess]
+    }
 
 
 -- | Polls 'Network.AWS.S3.HeadBucket' every 5 seconds until a successful state is reached. An error is returned after 20 failed checks.
 bucketExists :: Wait HeadBucket
 bucketExists =
   Wait
-  { _waitName = "BucketExists"
-  , _waitAttempts = 20
-  , _waitDelay = 5
-  , _waitAcceptors =
-      [matchStatus 200 AcceptSuccess, matchStatus 404 AcceptRetry]
-  }
+    { _waitName = "BucketExists"
+    , _waitAttempts = 20
+    , _waitDelay = 5
+    , _waitAcceptors =
+        [ matchStatus 200 AcceptSuccess
+        , matchStatus 301 AcceptSuccess
+        , matchStatus 403 AcceptSuccess
+        , matchStatus 404 AcceptRetry
+        ]
+    }
 
 
 -- | Polls 'Network.AWS.S3.HeadObject' every 5 seconds until a successful state is reached. An error is returned after 20 failed checks.
 objectExists :: Wait HeadObject
 objectExists =
   Wait
-  { _waitName = "ObjectExists"
-  , _waitAttempts = 20
-  , _waitDelay = 5
-  , _waitAcceptors =
-      [matchStatus 200 AcceptSuccess, matchStatus 404 AcceptRetry]
-  }
+    { _waitName = "ObjectExists"
+    , _waitAttempts = 20
+    , _waitDelay = 5
+    , _waitAcceptors =
+        [matchStatus 200 AcceptSuccess, matchStatus 404 AcceptRetry]
+    }
 
 
 -- | Polls 'Network.AWS.S3.HeadBucket' every 5 seconds until a successful state is reached. An error is returned after 20 failed checks.
 bucketNotExists :: Wait HeadBucket
 bucketNotExists =
   Wait
-  { _waitName = "BucketNotExists"
-  , _waitAttempts = 20
-  , _waitDelay = 5
-  , _waitAcceptors = [matchStatus 404 AcceptSuccess]
-  }
+    { _waitName = "BucketNotExists"
+    , _waitAttempts = 20
+    , _waitDelay = 5
+    , _waitAcceptors = [matchStatus 404 AcceptSuccess]
+    }
 
diff --git a/src/Network/AWS/S3/Internal.hs b/src/Network/AWS/S3/Internal.hs
--- a/src/Network/AWS/S3/Internal.hs
+++ b/src/Network/AWS/S3/Internal.hs
@@ -10,7 +10,7 @@
 
 -- |
 -- Module      : Network.AWS.S3.Internal
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : This Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : experimental
@@ -65,6 +65,7 @@
         , ToXML
         , ToQuery
         , ToLog
+        , FromJSON
         )
 
 instance Hashable BucketName
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
diff --git a/test/Test/AWS/Gen/S3.hs b/test/Test/AWS/Gen/S3.hs
--- a/test/Test/AWS/Gen/S3.hs
+++ b/test/Test/AWS/Gen/S3.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Test.AWS.Gen.S3
--- Copyright   : (c) 2013-2017 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
 -- Stability   : auto-generated
@@ -88,8 +88,8 @@
 --         , requestDeleteBucketMetricsConfiguration $
 --             deleteBucketMetricsConfiguration
 --
---         , requestListObjectsV $
---             listObjectsV
+--         , requestListObjectsV2 $
+--             listObjectsV2
 --
 --         , requestGetObject $
 --             getObject
@@ -133,6 +133,9 @@
 --         , requestUploadPart $
 --             uploadPart
 --
+--         , requestSelectObjectContent $
+--             selectObjectContent
+--
 --         , requestGetBucketReplication $
 --             getBucketReplication
 --
@@ -310,8 +313,8 @@
 --         , responseDeleteBucketMetricsConfiguration $
 --             deleteBucketMetricsConfigurationResponse
 --
---         , responseListObjectsV $
---             listObjectsVResponse
+--         , responseListObjectsV2 $
+--             listObjectsV2Response
 --
 --         , responseGetObject $
 --             getObjectResponse
@@ -355,6 +358,9 @@
 --         , responseUploadPart $
 --             uploadPartResponse
 --
+--         , responseSelectObjectContent $
+--             selectObjectContentResponse
+--
 --         , responseGetBucketReplication $
 --             getBucketReplicationResponse
 --
@@ -569,10 +575,10 @@
     "DeleteBucketMetricsConfiguration"
     "fixture/DeleteBucketMetricsConfiguration.yaml"
 
-requestListObjectsV :: ListObjectsV -> TestTree
-requestListObjectsV = req
-    "ListObjectsV"
-    "fixture/ListObjectsV.yaml"
+requestListObjectsV2 :: ListObjectsV2 -> TestTree
+requestListObjectsV2 = req
+    "ListObjectsV2"
+    "fixture/ListObjectsV2.yaml"
 
 requestGetObject :: GetObject -> TestTree
 requestGetObject = req
@@ -639,6 +645,11 @@
     "CreateMultipartUpload"
     "fixture/CreateMultipartUpload.yaml"
 
+requestSelectObjectContent :: SelectObjectContent -> TestTree
+requestSelectObjectContent = req
+    "SelectObjectContent"
+    "fixture/SelectObjectContent.yaml"
+
 requestGetBucketReplication :: GetBucketReplication -> TestTree
 requestGetBucketReplication = req
     "GetBucketReplication"
@@ -971,12 +982,12 @@
     s3
     (Proxy :: Proxy DeleteBucketMetricsConfiguration)
 
-responseListObjectsV :: ListObjectsVResponse -> TestTree
-responseListObjectsV = res
-    "ListObjectsVResponse"
-    "fixture/ListObjectsVResponse.proto"
+responseListObjectsV2 :: ListObjectsV2Response -> TestTree
+responseListObjectsV2 = res
+    "ListObjectsV2Response"
+    "fixture/ListObjectsV2Response.proto"
     s3
-    (Proxy :: Proxy ListObjectsV)
+    (Proxy :: Proxy ListObjectsV2)
 
 responsePutBucketReplication :: PutBucketReplicationResponse -> TestTree
 responsePutBucketReplication = res
@@ -1068,6 +1079,13 @@
     "fixture/UploadPartResponse.proto"
     s3
     (Proxy :: Proxy UploadPart)
+
+responseSelectObjectContent :: SelectObjectContentResponse -> TestTree
+responseSelectObjectContent = res
+    "SelectObjectContentResponse"
+    "fixture/SelectObjectContentResponse.proto"
+    s3
+    (Proxy :: Proxy SelectObjectContent)
 
 responseGetBucketReplication :: GetBucketReplicationResponse -> TestTree
 responseGetBucketReplication = res
diff --git a/test/Test/AWS/S3.hs b/test/Test/AWS/S3.hs
--- a/test/Test/AWS/S3.hs
+++ b/test/Test/AWS/S3.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module      : Test.AWS.S3
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2018 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : experimental
diff --git a/test/Test/AWS/S3/Internal.hs b/test/Test/AWS/S3/Internal.hs
--- a/test/Test/AWS/S3/Internal.hs
+++ b/test/Test/AWS/S3/Internal.hs
@@ -2,7 +2,7 @@
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 -- Module      : Test.AWS.S3.Internal
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2018 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
