diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.3.1`
+`1.3.4`
 
 
 ## Description
diff --git a/amazonka-iam.cabal b/amazonka-iam.cabal
--- a/amazonka-iam.cabal
+++ b/amazonka-iam.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-iam
-version:               1.3.3.1
+version:               1.3.4
 synopsis:              Amazon Identity and Access Management SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -219,7 +219,7 @@
         , Network.AWS.IAM.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.3.*
+          amazonka-core == 1.3.4.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-iam-test
@@ -239,9 +239,9 @@
         , Test.AWS.IAM.Internal
 
     build-depends:
-          amazonka-core == 1.3.3.*
-        , amazonka-test == 1.3.3.*
-        , amazonka-iam == 1.3.3.*
+          amazonka-core == 1.3.4.*
+        , amazonka-test == 1.3.4.*
+        , amazonka-iam == 1.3.4.*
         , base
         , bytestring
         , lens
diff --git a/gen/Network/AWS/IAM.hs b/gen/Network/AWS/IAM.hs
--- a/gen/Network/AWS/IAM.hs
+++ b/gen/Network/AWS/IAM.hs
@@ -202,7 +202,7 @@
     -- ** GetUserPolicy
     , module Network.AWS.IAM.GetUserPolicy
 
-    -- ** ListAttachedRolePolicies
+    -- ** ListAttachedRolePolicies (Paginated)
     , module Network.AWS.IAM.ListAttachedRolePolicies
 
     -- ** GetRole
@@ -337,7 +337,7 @@
     -- ** ListGroupsForUser (Paginated)
     , module Network.AWS.IAM.ListGroupsForUser
 
-    -- ** ListEntitiesForPolicy
+    -- ** ListEntitiesForPolicy (Paginated)
     , module Network.AWS.IAM.ListEntitiesForPolicy
 
     -- ** AddUserToGroup
@@ -364,7 +364,7 @@
     -- ** UpdateSigningCertificate
     , module Network.AWS.IAM.UpdateSigningCertificate
 
-    -- ** ListAttachedUserPolicies
+    -- ** ListAttachedUserPolicies (Paginated)
     , module Network.AWS.IAM.ListAttachedUserPolicies
 
     -- ** RemoveClientIdFromOpenIdConnectProvider
@@ -454,7 +454,7 @@
     -- ** SetDefaultPolicyVersion
     , module Network.AWS.IAM.SetDefaultPolicyVersion
 
-    -- ** ListPolicyVersions
+    -- ** ListPolicyVersions (Paginated)
     , module Network.AWS.IAM.ListPolicyVersions
 
     -- ** ListSAMLProviders
@@ -493,7 +493,7 @@
     -- ** UpdateServerCertificate
     , module Network.AWS.IAM.UpdateServerCertificate
 
-    -- ** ListAttachedGroupPolicies
+    -- ** ListAttachedGroupPolicies (Paginated)
     , module Network.AWS.IAM.ListAttachedGroupPolicies
 
     -- * Types
@@ -572,6 +572,7 @@
     , EvaluationResult
     , evaluationResult
     , erMatchedStatements
+    , erEvalDecisionDetails
     , erMissingContextValues
     , erEvalActionName
     , erEvalResourceName
diff --git a/gen/Network/AWS/IAM/GetAccountAuthorizationDetails.hs b/gen/Network/AWS/IAM/GetAccountAuthorizationDetails.hs
--- a/gen/Network/AWS/IAM/GetAccountAuthorizationDetails.hs
+++ b/gen/Network/AWS/IAM/GetAccountAuthorizationDetails.hs
@@ -83,19 +83,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 gaadMarker :: Lens' GetAccountAuthorizationDetails (Maybe Text)
 gaadMarker = lens _gaadMarker (\ s a -> s{_gaadMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 gaadMaxItems :: Lens' GetAccountAuthorizationDetails (Maybe Natural)
 gaadMaxItems = lens _gaadMaxItems (\ s a -> s{_gaadMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/GetGroup.hs b/gen/Network/AWS/IAM/GetGroup.hs
--- a/gen/Network/AWS/IAM/GetGroup.hs
+++ b/gen/Network/AWS/IAM/GetGroup.hs
@@ -80,19 +80,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 ggMarker :: Lens' GetGroup (Maybe Text)
 ggMarker = lens _ggMarker (\ s a -> s{_ggMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 ggMaxItems :: Lens' GetGroup (Maybe Natural)
 ggMaxItems = lens _ggMaxItems (\ s a -> s{_ggMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListAccessKeys.hs b/gen/Network/AWS/IAM/ListAccessKeys.hs
--- a/gen/Network/AWS/IAM/ListAccessKeys.hs
+++ b/gen/Network/AWS/IAM/ListAccessKeys.hs
@@ -94,19 +94,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lakMarker :: Lens' ListAccessKeys (Maybe Text)
 lakMarker = lens _lakMarker (\ s a -> s{_lakMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lakMaxItems :: Lens' ListAccessKeys (Maybe Natural)
 lakMaxItems = lens _lakMaxItems (\ s a -> s{_lakMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListAccountAliases.hs b/gen/Network/AWS/IAM/ListAccountAliases.hs
--- a/gen/Network/AWS/IAM/ListAccountAliases.hs
+++ b/gen/Network/AWS/IAM/ListAccountAliases.hs
@@ -78,19 +78,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 laaMarker :: Lens' ListAccountAliases (Maybe Text)
 laaMarker = lens _laaMarker (\ s a -> s{_laaMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 laaMaxItems :: Lens' ListAccountAliases (Maybe Natural)
 laaMaxItems = lens _laaMaxItems (\ s a -> s{_laaMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListAttachedGroupPolicies.hs b/gen/Network/AWS/IAM/ListAttachedGroupPolicies.hs
--- a/gen/Network/AWS/IAM/ListAttachedGroupPolicies.hs
+++ b/gen/Network/AWS/IAM/ListAttachedGroupPolicies.hs
@@ -33,6 +33,8 @@
 -- specified path prefix), the action returns an empty list.
 --
 -- /See:/ <http://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedGroupPolicies.html AWS API Reference> for ListAttachedGroupPolicies.
+--
+-- This operation returns paginated results.
 module Network.AWS.IAM.ListAttachedGroupPolicies
     (
     -- * Creating a Request
@@ -56,6 +58,7 @@
 
 import           Network.AWS.IAM.Types
 import           Network.AWS.IAM.Types.Product
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -98,19 +101,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lagpMarker :: Lens' ListAttachedGroupPolicies (Maybe Text)
 lagpMarker = lens _lagpMarker (\ s a -> s{_lagpMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lagpMaxItems :: Lens' ListAttachedGroupPolicies (Maybe Natural)
 lagpMaxItems = lens _lagpMaxItems (\ s a -> s{_lagpMaxItems = a}) . mapping _Nat;
@@ -119,6 +122,13 @@
 -- for.
 lagpGroupName :: Lens' ListAttachedGroupPolicies Text
 lagpGroupName = lens _lagpGroupName (\ s a -> s{_lagpGroupName = a});
+
+instance AWSPager ListAttachedGroupPolicies where
+        page rq rs
+          | stop (rs ^. lagprsIsTruncated) = Nothing
+          | isNothing (rs ^. lagprsMarker) = Nothing
+          | otherwise =
+            Just $ rq & lagpMarker .~ rs ^. lagprsMarker
 
 instance AWSRequest ListAttachedGroupPolicies where
         type Rs ListAttachedGroupPolicies =
diff --git a/gen/Network/AWS/IAM/ListAttachedRolePolicies.hs b/gen/Network/AWS/IAM/ListAttachedRolePolicies.hs
--- a/gen/Network/AWS/IAM/ListAttachedRolePolicies.hs
+++ b/gen/Network/AWS/IAM/ListAttachedRolePolicies.hs
@@ -33,6 +33,8 @@
 -- specified path prefix), the action returns an empty list.
 --
 -- /See:/ <http://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html AWS API Reference> for ListAttachedRolePolicies.
+--
+-- This operation returns paginated results.
 module Network.AWS.IAM.ListAttachedRolePolicies
     (
     -- * Creating a Request
@@ -56,6 +58,7 @@
 
 import           Network.AWS.IAM.Types
 import           Network.AWS.IAM.Types.Product
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -98,19 +101,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 larpMarker :: Lens' ListAttachedRolePolicies (Maybe Text)
 larpMarker = lens _larpMarker (\ s a -> s{_larpMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 larpMaxItems :: Lens' ListAttachedRolePolicies (Maybe Natural)
 larpMaxItems = lens _larpMaxItems (\ s a -> s{_larpMaxItems = a}) . mapping _Nat;
@@ -119,6 +122,13 @@
 -- for.
 larpRoleName :: Lens' ListAttachedRolePolicies Text
 larpRoleName = lens _larpRoleName (\ s a -> s{_larpRoleName = a});
+
+instance AWSPager ListAttachedRolePolicies where
+        page rq rs
+          | stop (rs ^. larprsIsTruncated) = Nothing
+          | isNothing (rs ^. larprsMarker) = Nothing
+          | otherwise =
+            Just $ rq & larpMarker .~ rs ^. larprsMarker
 
 instance AWSRequest ListAttachedRolePolicies where
         type Rs ListAttachedRolePolicies =
diff --git a/gen/Network/AWS/IAM/ListAttachedUserPolicies.hs b/gen/Network/AWS/IAM/ListAttachedUserPolicies.hs
--- a/gen/Network/AWS/IAM/ListAttachedUserPolicies.hs
+++ b/gen/Network/AWS/IAM/ListAttachedUserPolicies.hs
@@ -33,6 +33,8 @@
 -- specified path prefix), the action returns an empty list.
 --
 -- /See:/ <http://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedUserPolicies.html AWS API Reference> for ListAttachedUserPolicies.
+--
+-- This operation returns paginated results.
 module Network.AWS.IAM.ListAttachedUserPolicies
     (
     -- * Creating a Request
@@ -56,6 +58,7 @@
 
 import           Network.AWS.IAM.Types
 import           Network.AWS.IAM.Types.Product
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -98,19 +101,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 laupMarker :: Lens' ListAttachedUserPolicies (Maybe Text)
 laupMarker = lens _laupMarker (\ s a -> s{_laupMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 laupMaxItems :: Lens' ListAttachedUserPolicies (Maybe Natural)
 laupMaxItems = lens _laupMaxItems (\ s a -> s{_laupMaxItems = a}) . mapping _Nat;
@@ -119,6 +122,13 @@
 -- for.
 laupUserName :: Lens' ListAttachedUserPolicies Text
 laupUserName = lens _laupUserName (\ s a -> s{_laupUserName = a});
+
+instance AWSPager ListAttachedUserPolicies where
+        page rq rs
+          | stop (rs ^. lauprsIsTruncated) = Nothing
+          | isNothing (rs ^. lauprsMarker) = Nothing
+          | otherwise =
+            Just $ rq & laupMarker .~ rs ^. lauprsMarker
 
 instance AWSRequest ListAttachedUserPolicies where
         type Rs ListAttachedUserPolicies =
diff --git a/gen/Network/AWS/IAM/ListEntitiesForPolicy.hs b/gen/Network/AWS/IAM/ListEntitiesForPolicy.hs
--- a/gen/Network/AWS/IAM/ListEntitiesForPolicy.hs
+++ b/gen/Network/AWS/IAM/ListEntitiesForPolicy.hs
@@ -30,6 +30,8 @@
 -- parameters.
 --
 -- /See:/ <http://docs.aws.amazon.com/IAM/latest/APIReference/API_ListEntitiesForPolicy.html AWS API Reference> for ListEntitiesForPolicy.
+--
+-- This operation returns paginated results.
 module Network.AWS.IAM.ListEntitiesForPolicy
     (
     -- * Creating a Request
@@ -56,6 +58,7 @@
 
 import           Network.AWS.IAM.Types
 import           Network.AWS.IAM.Types.Product
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -111,19 +114,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lefpMarker :: Lens' ListEntitiesForPolicy (Maybe Text)
 lefpMarker = lens _lefpMarker (\ s a -> s{_lefpMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lefpMaxItems :: Lens' ListEntitiesForPolicy (Maybe Natural)
 lefpMaxItems = lens _lefpMaxItems (\ s a -> s{_lefpMaxItems = a}) . mapping _Nat;
@@ -131,6 +134,13 @@
 -- | Undocumented member.
 lefpPolicyARN :: Lens' ListEntitiesForPolicy Text
 lefpPolicyARN = lens _lefpPolicyARN (\ s a -> s{_lefpPolicyARN = a});
+
+instance AWSPager ListEntitiesForPolicy where
+        page rq rs
+          | stop (rs ^. lefprsIsTruncated) = Nothing
+          | isNothing (rs ^. lefprsMarker) = Nothing
+          | otherwise =
+            Just $ rq & lefpMarker .~ rs ^. lefprsMarker
 
 instance AWSRequest ListEntitiesForPolicy where
         type Rs ListEntitiesForPolicy =
diff --git a/gen/Network/AWS/IAM/ListGroupPolicies.hs b/gen/Network/AWS/IAM/ListGroupPolicies.hs
--- a/gen/Network/AWS/IAM/ListGroupPolicies.hs
+++ b/gen/Network/AWS/IAM/ListGroupPolicies.hs
@@ -89,19 +89,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lgpMarker :: Lens' ListGroupPolicies (Maybe Text)
 lgpMarker = lens _lgpMarker (\ s a -> s{_lgpMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lgpMaxItems :: Lens' ListGroupPolicies (Maybe Natural)
 lgpMaxItems = lens _lgpMaxItems (\ s a -> s{_lgpMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListGroups.hs b/gen/Network/AWS/IAM/ListGroups.hs
--- a/gen/Network/AWS/IAM/ListGroups.hs
+++ b/gen/Network/AWS/IAM/ListGroups.hs
@@ -89,19 +89,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lgMarker :: Lens' ListGroups (Maybe Text)
 lgMarker = lens _lgMarker (\ s a -> s{_lgMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lgMaxItems :: Lens' ListGroups (Maybe Natural)
 lgMaxItems = lens _lgMaxItems (\ s a -> s{_lgMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListGroupsForUser.hs b/gen/Network/AWS/IAM/ListGroupsForUser.hs
--- a/gen/Network/AWS/IAM/ListGroupsForUser.hs
+++ b/gen/Network/AWS/IAM/ListGroupsForUser.hs
@@ -81,19 +81,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lgfuMarker :: Lens' ListGroupsForUser (Maybe Text)
 lgfuMarker = lens _lgfuMarker (\ s a -> s{_lgfuMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lgfuMaxItems :: Lens' ListGroupsForUser (Maybe Natural)
 lgfuMaxItems = lens _lgfuMaxItems (\ s a -> s{_lgfuMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListInstanceProfiles.hs b/gen/Network/AWS/IAM/ListInstanceProfiles.hs
--- a/gen/Network/AWS/IAM/ListInstanceProfiles.hs
+++ b/gen/Network/AWS/IAM/ListInstanceProfiles.hs
@@ -92,19 +92,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lipMarker :: Lens' ListInstanceProfiles (Maybe Text)
 lipMarker = lens _lipMarker (\ s a -> s{_lipMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lipMaxItems :: Lens' ListInstanceProfiles (Maybe Natural)
 lipMaxItems = lens _lipMaxItems (\ s a -> s{_lipMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListInstanceProfilesForRole.hs b/gen/Network/AWS/IAM/ListInstanceProfilesForRole.hs
--- a/gen/Network/AWS/IAM/ListInstanceProfilesForRole.hs
+++ b/gen/Network/AWS/IAM/ListInstanceProfilesForRole.hs
@@ -84,19 +84,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lipfrMarker :: Lens' ListInstanceProfilesForRole (Maybe Text)
 lipfrMarker = lens _lipfrMarker (\ s a -> s{_lipfrMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lipfrMaxItems :: Lens' ListInstanceProfilesForRole (Maybe Natural)
 lipfrMaxItems = lens _lipfrMaxItems (\ s a -> s{_lipfrMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListMFADevices.hs b/gen/Network/AWS/IAM/ListMFADevices.hs
--- a/gen/Network/AWS/IAM/ListMFADevices.hs
+++ b/gen/Network/AWS/IAM/ListMFADevices.hs
@@ -87,19 +87,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lmdMarker :: Lens' ListMFADevices (Maybe Text)
 lmdMarker = lens _lmdMarker (\ s a -> s{_lmdMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lmdMaxItems :: Lens' ListMFADevices (Maybe Natural)
 lmdMaxItems = lens _lmdMaxItems (\ s a -> s{_lmdMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListPolicies.hs b/gen/Network/AWS/IAM/ListPolicies.hs
--- a/gen/Network/AWS/IAM/ListPolicies.hs
+++ b/gen/Network/AWS/IAM/ListPolicies.hs
@@ -116,8 +116,8 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lpMarker :: Lens' ListPolicies (Maybe Text)
 lpMarker = lens _lpMarker (\ s a -> s{_lpMarker = a});
 
@@ -133,13 +133,13 @@
 lpScope = lens _lpScope (\ s a -> s{_lpScope = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lpMaxItems :: Lens' ListPolicies (Maybe Natural)
 lpMaxItems = lens _lpMaxItems (\ s a -> s{_lpMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListPolicyVersions.hs b/gen/Network/AWS/IAM/ListPolicyVersions.hs
--- a/gen/Network/AWS/IAM/ListPolicyVersions.hs
+++ b/gen/Network/AWS/IAM/ListPolicyVersions.hs
@@ -26,6 +26,8 @@
 -- in the /IAM User Guide/.
 --
 -- /See:/ <http://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicyVersions.html AWS API Reference> for ListPolicyVersions.
+--
+-- This operation returns paginated results.
 module Network.AWS.IAM.ListPolicyVersions
     (
     -- * Creating a Request
@@ -48,6 +50,7 @@
 
 import           Network.AWS.IAM.Types
 import           Network.AWS.IAM.Types.Product
+import           Network.AWS.Pager
 import           Network.AWS.Prelude
 import           Network.AWS.Request
 import           Network.AWS.Response
@@ -80,19 +83,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lpvMarker :: Lens' ListPolicyVersions (Maybe Text)
 lpvMarker = lens _lpvMarker (\ s a -> s{_lpvMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lpvMaxItems :: Lens' ListPolicyVersions (Maybe Natural)
 lpvMaxItems = lens _lpvMaxItems (\ s a -> s{_lpvMaxItems = a}) . mapping _Nat;
@@ -100,6 +103,13 @@
 -- | Undocumented member.
 lpvPolicyARN :: Lens' ListPolicyVersions Text
 lpvPolicyARN = lens _lpvPolicyARN (\ s a -> s{_lpvPolicyARN = a});
+
+instance AWSPager ListPolicyVersions where
+        page rq rs
+          | stop (rs ^. lpvrsIsTruncated) = Nothing
+          | isNothing (rs ^. lpvrsMarker) = Nothing
+          | otherwise =
+            Just $ rq & lpvMarker .~ rs ^. lpvrsMarker
 
 instance AWSRequest ListPolicyVersions where
         type Rs ListPolicyVersions =
diff --git a/gen/Network/AWS/IAM/ListRolePolicies.hs b/gen/Network/AWS/IAM/ListRolePolicies.hs
--- a/gen/Network/AWS/IAM/ListRolePolicies.hs
+++ b/gen/Network/AWS/IAM/ListRolePolicies.hs
@@ -89,19 +89,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lrpMarker :: Lens' ListRolePolicies (Maybe Text)
 lrpMarker = lens _lrpMarker (\ s a -> s{_lrpMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lrpMaxItems :: Lens' ListRolePolicies (Maybe Natural)
 lrpMaxItems = lens _lrpMaxItems (\ s a -> s{_lrpMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListRoles.hs b/gen/Network/AWS/IAM/ListRoles.hs
--- a/gen/Network/AWS/IAM/ListRoles.hs
+++ b/gen/Network/AWS/IAM/ListRoles.hs
@@ -92,19 +92,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lrMarker :: Lens' ListRoles (Maybe Text)
 lrMarker = lens _lrMarker (\ s a -> s{_lrMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lrMaxItems :: Lens' ListRoles (Maybe Natural)
 lrMaxItems = lens _lrMaxItems (\ s a -> s{_lrMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListSSHPublicKeys.hs b/gen/Network/AWS/IAM/ListSSHPublicKeys.hs
--- a/gen/Network/AWS/IAM/ListSSHPublicKeys.hs
+++ b/gen/Network/AWS/IAM/ListSSHPublicKeys.hs
@@ -91,19 +91,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lspkMarker :: Lens' ListSSHPublicKeys (Maybe Text)
 lspkMarker = lens _lspkMarker (\ s a -> s{_lspkMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lspkMaxItems :: Lens' ListSSHPublicKeys (Maybe Natural)
 lspkMaxItems = lens _lspkMaxItems (\ s a -> s{_lspkMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListServerCertificates.hs b/gen/Network/AWS/IAM/ListServerCertificates.hs
--- a/gen/Network/AWS/IAM/ListServerCertificates.hs
+++ b/gen/Network/AWS/IAM/ListServerCertificates.hs
@@ -90,19 +90,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lscMarker :: Lens' ListServerCertificates (Maybe Text)
 lscMarker = lens _lscMarker (\ s a -> s{_lscMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lscMaxItems :: Lens' ListServerCertificates (Maybe Natural)
 lscMaxItems = lens _lscMaxItems (\ s a -> s{_lscMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListSigningCertificates.hs b/gen/Network/AWS/IAM/ListSigningCertificates.hs
--- a/gen/Network/AWS/IAM/ListSigningCertificates.hs
+++ b/gen/Network/AWS/IAM/ListSigningCertificates.hs
@@ -92,19 +92,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lMarker :: Lens' ListSigningCertificates (Maybe Text)
 lMarker = lens _lMarker (\ s a -> s{_lMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lMaxItems :: Lens' ListSigningCertificates (Maybe Natural)
 lMaxItems = lens _lMaxItems (\ s a -> s{_lMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListUserPolicies.hs b/gen/Network/AWS/IAM/ListUserPolicies.hs
--- a/gen/Network/AWS/IAM/ListUserPolicies.hs
+++ b/gen/Network/AWS/IAM/ListUserPolicies.hs
@@ -88,19 +88,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lupMarker :: Lens' ListUserPolicies (Maybe Text)
 lupMarker = lens _lupMarker (\ s a -> s{_lupMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lupMaxItems :: Lens' ListUserPolicies (Maybe Natural)
 lupMaxItems = lens _lupMaxItems (\ s a -> s{_lupMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListUsers.hs b/gen/Network/AWS/IAM/ListUsers.hs
--- a/gen/Network/AWS/IAM/ListUsers.hs
+++ b/gen/Network/AWS/IAM/ListUsers.hs
@@ -91,19 +91,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 luMarker :: Lens' ListUsers (Maybe Text)
 luMarker = lens _luMarker (\ s a -> s{_luMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 luMaxItems :: Lens' ListUsers (Maybe Natural)
 luMaxItems = lens _luMaxItems (\ s a -> s{_luMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/ListVirtualMFADevices.hs b/gen/Network/AWS/IAM/ListVirtualMFADevices.hs
--- a/gen/Network/AWS/IAM/ListVirtualMFADevices.hs
+++ b/gen/Network/AWS/IAM/ListVirtualMFADevices.hs
@@ -89,19 +89,19 @@
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 lvmdMarker :: Lens' ListVirtualMFADevices (Maybe Text)
 lvmdMarker = lens _lvmdMarker (\ s a -> s{_lvmdMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 lvmdMaxItems :: Lens' ListVirtualMFADevices (Maybe Natural)
 lvmdMaxItems = lens _lvmdMaxItems (\ s a -> s{_lvmdMaxItems = a}) . mapping _Nat;
diff --git a/gen/Network/AWS/IAM/SimulateCustomPolicy.hs b/gen/Network/AWS/IAM/SimulateCustomPolicy.hs
--- a/gen/Network/AWS/IAM/SimulateCustomPolicy.hs
+++ b/gen/Network/AWS/IAM/SimulateCustomPolicy.hs
@@ -18,11 +18,12 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Simulate a set of IAM policies against a list of API actions and AWS
--- resources to determine the policies\' effective permissions. The
--- policies are provided as a list of strings.
+-- Simulate how a set of IAM policies and optionally a resource-based
+-- policy works with a list of API actions and AWS resources to determine
+-- the policies\' effective permissions. The policies are provided as
+-- strings.
 --
--- The simulation does not perform the API actions, it only checks the
+-- The simulation does not perform the API actions; it only checks the
 -- authorization to determine if the simulated policies allow or deny the
 -- actions.
 --
@@ -30,13 +31,13 @@
 -- group, or role, use SimulatePrincipalPolicy instead.
 --
 -- Context keys are variables maintained by AWS and its services that
--- provide details about the context of an API query request, and can be
--- evaluated by using the 'Condition' element of an IAM policy. To get the
--- list of context keys required by the policies to simulate them
--- correctly, use GetContextKeysForCustomPolicy.
+-- provide details about the context of an API query request. You can use
+-- the 'Condition' element of an IAM policy to evaluate context keys. To
+-- get the list of context keys that the policies require for correct
+-- simulation, use GetContextKeysForCustomPolicy.
 --
--- If the output is long, you can paginate the results using the 'MaxItems'
--- and 'Marker' parameters.
+-- If the output is long, you can use 'MaxItems' and 'Marker' parameters to
+-- paginate the results.
 --
 -- /See:/ <http://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulateCustomPolicy.html AWS API Reference> for SimulateCustomPolicy.
 module Network.AWS.IAM.SimulateCustomPolicy
@@ -45,10 +46,13 @@
       simulateCustomPolicy
     , SimulateCustomPolicy
     -- * Request Lenses
+    , scpResourcePolicy
+    , scpCallerARN
     , scpResourceARNs
     , scpMarker
     , scpMaxItems
     , scpContextEntries
+    , scpResourceOwner
     , scpPolicyInputList
     , scpActionNames
 
@@ -69,10 +73,13 @@
 
 -- | /See:/ 'simulateCustomPolicy' smart constructor.
 data SimulateCustomPolicy = SimulateCustomPolicy'
-    { _scpResourceARNs    :: !(Maybe [Text])
+    { _scpResourcePolicy  :: !(Maybe Text)
+    , _scpCallerARN       :: !(Maybe Text)
+    , _scpResourceARNs    :: !(Maybe [Text])
     , _scpMarker          :: !(Maybe Text)
     , _scpMaxItems        :: !(Maybe Nat)
     , _scpContextEntries  :: !(Maybe [ContextEntry])
+    , _scpResourceOwner   :: !(Maybe Text)
     , _scpPolicyInputList :: ![Text]
     , _scpActionNames     :: ![Text]
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
@@ -81,6 +88,10 @@
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
+-- * 'scpResourcePolicy'
+--
+-- * 'scpCallerARN'
+--
 -- * 'scpResourceARNs'
 --
 -- * 'scpMarker'
@@ -89,6 +100,8 @@
 --
 -- * 'scpContextEntries'
 --
+-- * 'scpResourceOwner'
+--
 -- * 'scpPolicyInputList'
 --
 -- * 'scpActionNames'
@@ -96,56 +109,106 @@
     :: SimulateCustomPolicy
 simulateCustomPolicy =
     SimulateCustomPolicy'
-    { _scpResourceARNs = Nothing
+    { _scpResourcePolicy = Nothing
+    , _scpCallerARN = Nothing
+    , _scpResourceARNs = Nothing
     , _scpMarker = Nothing
     , _scpMaxItems = Nothing
     , _scpContextEntries = Nothing
+    , _scpResourceOwner = Nothing
     , _scpPolicyInputList = mempty
     , _scpActionNames = mempty
     }
 
+-- | A resource-based policy to include in the simulation provided as a
+-- string. Each resource in the simulation is treated as if it had this
+-- policy attached. You can include only one resource-based policy in a
+-- simulation.
+scpResourcePolicy :: Lens' SimulateCustomPolicy (Maybe Text)
+scpResourcePolicy = lens _scpResourcePolicy (\ s a -> s{_scpResourcePolicy = a});
+
+-- | The ARN of the user that you want to use as the simulated caller of the
+-- APIs. 'CallerArn' is required if you include a 'ResourcePolicy' so that
+-- the policy\'s 'Principal' element has a value to use in evaluating the
+-- policy.
+--
+-- You can specify only the ARN of an IAM user. You cannot specify the ARN
+-- of an assumed role, federated user, or a service principal.
+scpCallerARN :: Lens' SimulateCustomPolicy (Maybe Text)
+scpCallerARN = lens _scpCallerARN (\ s a -> s{_scpCallerARN = a});
+
 -- | A list of ARNs of AWS resources to include in the simulation. If this
 -- parameter is not provided then the value defaults to '*' (all
 -- resources). Each API in the 'ActionNames' parameter is evaluated for
 -- each resource in this list. The simulation determines the access result
 -- (allowed or denied) of each combination and reports it in the response.
+--
+-- The simulation does not automatically retrieve policies for the
+-- specified resources. If you want to include a resource policy in the
+-- simulation, then you must include the policy as a string in the
+-- 'ResourcePolicy' parameter.
+--
+-- If you include a 'ResourcePolicy', then it must be applicable to all of
+-- the resources included in the simulation or you receive an invalid input
+-- error.
 scpResourceARNs :: Lens' SimulateCustomPolicy [Text]
 scpResourceARNs = lens _scpResourceARNs (\ s a -> s{_scpResourceARNs = a}) . _Default . _Coerce;
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 scpMarker :: Lens' SimulateCustomPolicy (Maybe Text)
 scpMarker = lens _scpMarker (\ s a -> s{_scpMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 scpMaxItems :: Lens' SimulateCustomPolicy (Maybe Natural)
 scpMaxItems = lens _scpMaxItems (\ s a -> s{_scpMaxItems = a}) . mapping _Nat;
 
--- | A list of context keys and corresponding values that are used by the
--- simulation. Whenever a context key is evaluated by a 'Condition' element
--- in one of the simulated IAM permission policies, the corresponding value
--- is supplied.
+-- | A list of context keys and corresponding values for the simulation to
+-- use. Whenever a context key is evaluated by a 'Condition' element in one
+-- of the simulated IAM permission policies, the corresponding value is
+-- supplied.
 scpContextEntries :: Lens' SimulateCustomPolicy [ContextEntry]
 scpContextEntries = lens _scpContextEntries (\ s a -> s{_scpContextEntries = a}) . _Default . _Coerce;
 
+-- | An AWS account ID that specifies the owner of any simulated resource
+-- that does not identify its owner in the resource ARN, such as an S3
+-- bucket or object. If 'ResourceOwner' is specified, it is also used as
+-- the account owner of any 'ResourcePolicy' included in the simulation. If
+-- the 'ResourceOwner' parameter is not specified, then the owner of the
+-- resources and the resource policy defaults to the account of the
+-- identity provided in 'CallerArn'. This parameter is required only if you
+-- specify a resource-based policy and account that owns the resource is
+-- different from the account that owns the simulated calling user
+-- 'CallerArn'.
+scpResourceOwner :: Lens' SimulateCustomPolicy (Maybe Text)
+scpResourceOwner = lens _scpResourceOwner (\ s a -> s{_scpResourceOwner = a});
+
 -- | A list of policy documents to include in the simulation. Each document
 -- is specified as a string containing the complete, valid JSON text of an
--- IAM policy.
+-- IAM policy. Do not include any resource-based policies in this
+-- parameter. Any resource-based policy must be submitted with the
+-- 'ResourcePolicy' parameter. The policies cannot be \"scope-down\"
+-- policies, such as you could include in a call to
+-- <http://docs.aws.amazon.com/IAM/latest/APIReference/API_GetFederationToken.html GetFederationToken>
+-- or one of the
+-- <http://docs.aws.amazon.com/IAM/latest/APIReference/API_AssumeRole.html AssumeRole>
+-- APIs to restrict what a user can do while using the temporary
+-- credentials.
 scpPolicyInputList :: Lens' SimulateCustomPolicy [Text]
 scpPolicyInputList = lens _scpPolicyInputList (\ s a -> s{_scpPolicyInputList = a}) . _Coerce;
 
 -- | A list of names of API actions to evaluate in the simulation. Each
--- action is evaluated for each resource. Each action must include the
+-- action is evaluated against each resource. Each action must include the
 -- service identifier, such as 'iam:CreateUser'.
 scpActionNames :: Lens' SimulateCustomPolicy [Text]
 scpActionNames = lens _scpActionNames (\ s a -> s{_scpActionNames = a}) . _Coerce;
@@ -168,12 +231,15 @@
           = mconcat
               ["Action" =: ("SimulateCustomPolicy" :: ByteString),
                "Version" =: ("2010-05-08" :: ByteString),
+               "ResourcePolicy" =: _scpResourcePolicy,
+               "CallerArn" =: _scpCallerARN,
                "ResourceArns" =:
                  toQuery (toQueryList "member" <$> _scpResourceARNs),
                "Marker" =: _scpMarker, "MaxItems" =: _scpMaxItems,
                "ContextEntries" =:
                  toQuery
                    (toQueryList "member" <$> _scpContextEntries),
+               "ResourceOwner" =: _scpResourceOwner,
                "PolicyInputList" =:
                  toQueryList "member" _scpPolicyInputList,
                "ActionNames" =:
diff --git a/gen/Network/AWS/IAM/SimulatePrincipalPolicy.hs b/gen/Network/AWS/IAM/SimulatePrincipalPolicy.hs
--- a/gen/Network/AWS/IAM/SimulatePrincipalPolicy.hs
+++ b/gen/Network/AWS/IAM/SimulatePrincipalPolicy.hs
@@ -18,17 +18,20 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Simulate the set of IAM policies attached to an IAM entity against a
--- list of API actions and AWS resources to determine the policies\'
+-- Simulate how a set of IAM policies attached to an IAM entity works with
+-- a list of API actions and AWS resources to determine the policies\'
 -- effective permissions. The entity can be an IAM user, group, or role. If
 -- you specify a user, then the simulation also includes all of the
--- policies attached to groups that the user is a member of.
+-- policies that are attached to groups that the user belongs to .
 --
 -- You can optionally include a list of one or more additional policies
 -- specified as strings to include in the simulation. If you want to
 -- simulate only policies specified as strings, use SimulateCustomPolicy
 -- instead.
 --
+-- You can also optionally include one resource-based policy to be
+-- evaluated with each of the resources included in the simulation.
+--
 -- The simulation does not perform the API actions, it only checks the
 -- authorization to determine if the simulated policies allow or deny the
 -- actions.
@@ -39,13 +42,13 @@
 -- instead.
 --
 -- Context keys are variables maintained by AWS and its services that
--- provide details about the context of an API query request, and can be
--- evaluated by using the 'Condition' element of an IAM policy. To get the
--- list of context keys required by the policies to simulate them
--- correctly, use GetContextKeysForPrincipalPolicy.
+-- provide details about the context of an API query request. You can use
+-- the 'Condition' element of an IAM policy to evaluate context keys. To
+-- get the list of context keys that the policies require for correct
+-- simulation, use GetContextKeysForPrincipalPolicy.
 --
--- If the output is long, you can paginate the results using the 'MaxItems'
--- and 'Marker' parameters.
+-- If the output is long, you can use the 'MaxItems' and 'Marker'
+-- parameters to paginate the results.
 --
 -- /See:/ <http://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html AWS API Reference> for SimulatePrincipalPolicy.
 module Network.AWS.IAM.SimulatePrincipalPolicy
@@ -55,10 +58,13 @@
     , SimulatePrincipalPolicy
     -- * Request Lenses
     , sppPolicyInputList
+    , sppResourcePolicy
+    , sppCallerARN
     , sppResourceARNs
     , sppMarker
     , sppMaxItems
     , sppContextEntries
+    , sppResourceOwner
     , sppPolicySourceARN
     , sppActionNames
 
@@ -80,10 +86,13 @@
 -- | /See:/ 'simulatePrincipalPolicy' smart constructor.
 data SimulatePrincipalPolicy = SimulatePrincipalPolicy'
     { _sppPolicyInputList :: !(Maybe [Text])
+    , _sppResourcePolicy  :: !(Maybe Text)
+    , _sppCallerARN       :: !(Maybe Text)
     , _sppResourceARNs    :: !(Maybe [Text])
     , _sppMarker          :: !(Maybe Text)
     , _sppMaxItems        :: !(Maybe Nat)
     , _sppContextEntries  :: !(Maybe [ContextEntry])
+    , _sppResourceOwner   :: !(Maybe Text)
     , _sppPolicySourceARN :: !Text
     , _sppActionNames     :: ![Text]
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
@@ -94,6 +103,10 @@
 --
 -- * 'sppPolicyInputList'
 --
+-- * 'sppResourcePolicy'
+--
+-- * 'sppCallerARN'
+--
 -- * 'sppResourceARNs'
 --
 -- * 'sppMarker'
@@ -102,6 +115,8 @@
 --
 -- * 'sppContextEntries'
 --
+-- * 'sppResourceOwner'
+--
 -- * 'sppPolicySourceARN'
 --
 -- * 'sppActionNames'
@@ -111,10 +126,13 @@
 simulatePrincipalPolicy pPolicySourceARN_ =
     SimulatePrincipalPolicy'
     { _sppPolicyInputList = Nothing
+    , _sppResourcePolicy = Nothing
+    , _sppCallerARN = Nothing
     , _sppResourceARNs = Nothing
     , _sppMarker = Nothing
     , _sppMaxItems = Nothing
     , _sppContextEntries = Nothing
+    , _sppResourceOwner = Nothing
     , _sppPolicySourceARN = pPolicySourceARN_
     , _sppActionNames = mempty
     }
@@ -125,45 +143,87 @@
 sppPolicyInputList :: Lens' SimulatePrincipalPolicy [Text]
 sppPolicyInputList = lens _sppPolicyInputList (\ s a -> s{_sppPolicyInputList = a}) . _Default . _Coerce;
 
+-- | A resource-based policy to include in the simulation provided as a
+-- string. Each resource in the simulation is treated as if it had this
+-- policy attached. You can include only one resource-based policy in a
+-- simulation.
+sppResourcePolicy :: Lens' SimulatePrincipalPolicy (Maybe Text)
+sppResourcePolicy = lens _sppResourcePolicy (\ s a -> s{_sppResourcePolicy = a});
+
+-- | The ARN of the user that you want to specify as the simulated caller of
+-- the APIs. If you do not specify a 'CallerArn', it defaults to the ARN of
+-- the user that you specify in 'PolicySourceArn', if you specified a user.
+-- If you include both a 'PolicySourceArn' (for example,
+-- 'arn:aws:iam::123456789012:user\/David') and a 'CallerArn' (for example,
+-- 'arn:aws:iam::123456789012:user\/Bob'), the result is that you simulate
+-- calling the APIs as Bob, as if Bob had David\'s policies.
+--
+-- You can specify only the ARN of an IAM user. You cannot specify the ARN
+-- of an assumed role, federated user, or a service principal.
+--
+-- 'CallerArn' is required if you include a 'ResourcePolicy' and the
+-- 'PolicySourceArn' is not the ARN for an IAM user. This is required so
+-- that the resource-based policy\'s 'Principal' element has a value to use
+-- in evaluating the policy.
+sppCallerARN :: Lens' SimulatePrincipalPolicy (Maybe Text)
+sppCallerARN = lens _sppCallerARN (\ s a -> s{_sppCallerARN = a});
+
 -- | A list of ARNs of AWS resources to include in the simulation. If this
 -- parameter is not provided then the value defaults to '*' (all
 -- resources). Each API in the 'ActionNames' parameter is evaluated for
 -- each resource in this list. The simulation determines the access result
 -- (allowed or denied) of each combination and reports it in the response.
+--
+-- The simulation does not automatically retrieve policies for the
+-- specified resources. If you want to include a resource policy in the
+-- simulation, then you must include the policy as a string in the
+-- 'ResourcePolicy' parameter.
 sppResourceARNs :: Lens' SimulatePrincipalPolicy [Text]
 sppResourceARNs = lens _sppResourceARNs (\ s a -> s{_sppResourceARNs = a}) . _Default . _Coerce;
 
 -- | Use this parameter only when paginating results and only after you
 -- receive a response indicating that the results are truncated. Set it to
--- the value of the 'Marker' element in the response you received to inform
--- the next call about where to start.
+-- the value of the 'Marker' element in the response that you received to
+-- indicate where the next call should start.
 sppMarker :: Lens' SimulatePrincipalPolicy (Maybe Text)
 sppMarker = lens _sppMarker (\ s a -> s{_sppMarker = a});
 
 -- | Use this only when paginating results to indicate the maximum number of
--- items you want in the response. If there are additional items beyond the
+-- items you want in the response. If additional items exist beyond the
 -- maximum you specify, the 'IsTruncated' response element is 'true'.
 --
 -- This parameter is optional. If you do not include it, it defaults to
 -- 100. Note that IAM might return fewer results, even when there are more
--- results available. If this is the case, the 'IsTruncated' response
--- element returns 'true' and 'Marker' contains a value to include in the
+-- results available. In that case, the 'IsTruncated' response element
+-- returns 'true' and 'Marker' contains a value to include in the
 -- subsequent call that tells the service where to continue from.
 sppMaxItems :: Lens' SimulatePrincipalPolicy (Maybe Natural)
 sppMaxItems = lens _sppMaxItems (\ s a -> s{_sppMaxItems = a}) . mapping _Nat;
 
--- | A list of context keys and corresponding values that are used by the
--- simulation. Whenever a context key is evaluated by a 'Condition' element
--- in one of the simulated IAM permission policies, the corresponding value
--- is supplied.
+-- | A list of context keys and corresponding values for the simulation to
+-- use. Whenever a context key is evaluated by a 'Condition' element in one
+-- of the simulated policies, the corresponding value is supplied.
 sppContextEntries :: Lens' SimulatePrincipalPolicy [ContextEntry]
 sppContextEntries = lens _sppContextEntries (\ s a -> s{_sppContextEntries = a}) . _Default . _Coerce;
 
+-- | An AWS account ID that specifies the owner of any simulated resource
+-- that does not identify its owner in the resource ARN, such as an S3
+-- bucket or object. If 'ResourceOwner' is specified, it is also used as
+-- the account owner of any 'ResourcePolicy' included in the simulation. If
+-- the 'ResourceOwner' parameter is not specified, then the owner of the
+-- resources and the resource policy defaults to the account of the
+-- identity provided in 'CallerArn'. This parameter is required only if you
+-- specify a resource-based policy and account that owns the resource is
+-- different from the account that owns the simulated calling user
+-- 'CallerArn'.
+sppResourceOwner :: Lens' SimulatePrincipalPolicy (Maybe Text)
+sppResourceOwner = lens _sppResourceOwner (\ s a -> s{_sppResourceOwner = a});
+
 -- | The Amazon Resource Name (ARN) of a user, group, or role whose policies
 -- you want to include in the simulation. If you specify a user, group, or
--- role, the simulation includes all policies associated with that entity.
--- If you specify a user, the simulation also includes all policies
--- attached to any groups the user is a member of.
+-- role, the simulation includes all policies that are associated with that
+-- entity. If you specify a user, the simulation also includes all policies
+-- that are attached to any groups the user belongs to.
 sppPolicySourceARN :: Lens' SimulatePrincipalPolicy Text
 sppPolicySourceARN = lens _sppPolicySourceARN (\ s a -> s{_sppPolicySourceARN = a});
 
@@ -196,12 +256,15 @@
                "PolicyInputList" =:
                  toQuery
                    (toQueryList "member" <$> _sppPolicyInputList),
+               "ResourcePolicy" =: _sppResourcePolicy,
+               "CallerArn" =: _sppCallerARN,
                "ResourceArns" =:
                  toQuery (toQueryList "member" <$> _sppResourceARNs),
                "Marker" =: _sppMarker, "MaxItems" =: _sppMaxItems,
                "ContextEntries" =:
                  toQuery
                    (toQueryList "member" <$> _sppContextEntries),
+               "ResourceOwner" =: _sppResourceOwner,
                "PolicySourceArn" =: _sppPolicySourceARN,
                "ActionNames" =:
                  toQueryList "member" _sppActionNames]
diff --git a/gen/Network/AWS/IAM/Types.hs b/gen/Network/AWS/IAM/Types.hs
--- a/gen/Network/AWS/IAM/Types.hs
+++ b/gen/Network/AWS/IAM/Types.hs
@@ -113,6 +113,7 @@
     , EvaluationResult
     , evaluationResult
     , erMatchedStatements
+    , erEvalDecisionDetails
     , erMissingContextValues
     , erEvalActionName
     , erEvalResourceName
diff --git a/gen/Network/AWS/IAM/Types/Product.hs b/gen/Network/AWS/IAM/Types/Product.hs
--- a/gen/Network/AWS/IAM/Types/Product.hs
+++ b/gen/Network/AWS/IAM/Types/Product.hs
@@ -345,6 +345,7 @@
 -- /See:/ 'evaluationResult' smart constructor.
 data EvaluationResult = EvaluationResult'
     { _erMatchedStatements    :: !(Maybe [Statement])
+    , _erEvalDecisionDetails  :: !(Maybe (Map Text PolicyEvaluationDecisionType))
     , _erMissingContextValues :: !(Maybe [Text])
     , _erEvalActionName       :: !Text
     , _erEvalResourceName     :: !Text
@@ -357,6 +358,8 @@
 --
 -- * 'erMatchedStatements'
 --
+-- * 'erEvalDecisionDetails'
+--
 -- * 'erMissingContextValues'
 --
 -- * 'erEvalActionName'
@@ -372,6 +375,7 @@
 evaluationResult pEvalActionName_ pEvalResourceName_ pEvalDecision_ =
     EvaluationResult'
     { _erMatchedStatements = Nothing
+    , _erEvalDecisionDetails = Nothing
     , _erMissingContextValues = Nothing
     , _erEvalActionName = pEvalActionName_
     , _erEvalResourceName = pEvalResourceName_
@@ -386,6 +390,15 @@
 erMatchedStatements :: Lens' EvaluationResult [Statement]
 erMatchedStatements = lens _erMatchedStatements (\ s a -> s{_erMatchedStatements = a}) . _Default . _Coerce;
 
+-- | Additional details about the results of the evaluation decision. When
+-- there are both IAM policies and resource policies, this parameter
+-- explains how each set of policies contributes to the final evaluation
+-- decision. When simulating cross-account access to a resource, both the
+-- resource-based policy and the caller\'s IAM policy must grant access.
+-- See How IAM Roles Differ from Resource-based Policies
+erEvalDecisionDetails :: Lens' EvaluationResult (HashMap Text PolicyEvaluationDecisionType)
+erEvalDecisionDetails = lens _erEvalDecisionDetails (\ s a -> s{_erEvalDecisionDetails = a}) . _Default . _Map;
+
 -- | A list of context keys that are required by the included input policies
 -- but that were not provided by one of the input parameters. To discover
 -- the context keys used by a set of policies, you can call
@@ -415,6 +428,9 @@
           = EvaluationResult' <$>
               (x .@? "MatchedStatements" .!@ mempty >>=
                  may (parseXMLList "member"))
+                <*>
+                (x .@? "EvalDecisionDetails" .!@ mempty >>=
+                   may (parseXMLMap "entry" "key" "value"))
                 <*>
                 (x .@? "MissingContextValues" .!@ mempty >>=
                    may (parseXMLList "member"))
diff --git a/gen/Network/AWS/IAM/Types/Sum.hs b/gen/Network/AWS/IAM/Types/Sum.hs
--- a/gen/Network/AWS/IAM/Types/Sum.hs
+++ b/gen/Network/AWS/IAM/Types/Sum.hs
@@ -206,6 +206,7 @@
     = AWSManaged
     | Group
     | None
+    | Resource
     | Role
     | User
     | UserManaged
@@ -216,17 +217,19 @@
         "aws-managed" -> pure AWSManaged
         "group" -> pure Group
         "none" -> pure None
+        "resource" -> pure Resource
         "role" -> pure Role
         "user" -> pure User
         "user-managed" -> pure UserManaged
         e -> fromTextError $ "Failure parsing PolicySourceType from value: '" <> e
-           <> "'. Accepted values: aws-managed, group, none, role, user, user-managed"
+           <> "'. Accepted values: aws-managed, group, none, resource, role, user, user-managed"
 
 instance ToText PolicySourceType where
     toText = \case
         AWSManaged -> "aws-managed"
         Group -> "group"
         None -> "none"
+        Resource -> "resource"
         Role -> "role"
         User -> "user"
         UserManaged -> "user-managed"
