diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,16 @@
 
 ## Description
 
-Amazon CloudWatch is a monitoring service for AWS cloud resources and the applications you run on AWS. You can use Amazon CloudWatch to collect and track metrics, collect and monitor log files, and set alarms. Amazon CloudWatch can monitor AWS resources such as Amazon EC2 instances, Amazon DynamoDB tables, and Amazon RDS DB instances, as well as custom metrics generated by your applications and services, and any log files your applications generate. You can use Amazon CloudWatch to gain system-wide visibility into resource utilization, application performance, and operational health. You can use these insights to react and keep your application running smoothly.
+    Amazon CloudWatch is a monitoring service for AWS cloud resources and the
+    applications you run on AWS. You can use Amazon CloudWatch to collect and
+    track metrics, collect and monitor log files, and set alarms. Amazon
+    CloudWatch can monitor AWS resources such as Amazon EC2 instances, Amazon
+    DynamoDB tables, and Amazon RDS DB instances, as well as custom metrics
+    generated by your applications and services, and any log files your
+    applications generate. You can use Amazon CloudWatch to gain system-wide
+    visibility into resource utilization, application performance, and
+    operational health. You can use these insights to react and keep your
+    application running smoothly.
 
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-cloudwatch)
 and [AWS API Reference](http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/Welcome.html).
diff --git a/amazonka-cloudwatch.cabal b/amazonka-cloudwatch.cabal
--- a/amazonka-cloudwatch.cabal
+++ b/amazonka-cloudwatch.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-cloudwatch
-version:               0.0.1
+version:               0.0.2
 synopsis:              Amazon CloudWatch SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -13,16 +13,16 @@
 cabal-version:         >= 1.10
 
 description:
-    Amazon CloudWatch is a monitoring service for AWS cloud resources and
-    the applications you run on AWS. You can use Amazon CloudWatch to
-    collect and track metrics, collect and monitor log files, and set
-    alarms. Amazon CloudWatch can monitor AWS resources such as Amazon EC2
-    instances, Amazon DynamoDB tables, and Amazon RDS DB instances, as well
-    as custom metrics generated by your applications and services, and any
-    log files your applications generate. You can use Amazon CloudWatch to
-    gain system-wide visibility into resource utilization, application
-    performance, and operational health. You can use these insights to
-    react and keep your application running smoothly.
+    Amazon CloudWatch is a monitoring service for AWS cloud resources and the
+    applications you run on AWS. You can use Amazon CloudWatch to collect and
+    track metrics, collect and monitor log files, and set alarms. Amazon
+    CloudWatch can monitor AWS resources such as Amazon EC2 instances, Amazon
+    DynamoDB tables, and Amazon RDS DB instances, as well as custom metrics
+    generated by your applications and services, and any log files your
+    applications generate. You can use Amazon CloudWatch to gain system-wide
+    visibility into resource utilization, application performance, and
+    operational health. You can use these insights to react and keep your
+    application running smoothly.
     .
     /See:/ <http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/Welcome.html AWS API Reference>
     .
@@ -57,5 +57,5 @@
     other-modules:
 
     build-depends:
-          amazonka-core == 0.0.1.*
+          amazonka-core == 0.0.2.*
         , base          >= 4.7     && < 5
diff --git a/gen/Network/AWS/CloudWatch/DescribeAlarmHistory.hs b/gen/Network/AWS/CloudWatch/DescribeAlarmHistory.hs
--- a/gen/Network/AWS/CloudWatch/DescribeAlarmHistory.hs
+++ b/gen/Network/AWS/CloudWatch/DescribeAlarmHistory.hs
@@ -55,11 +55,11 @@
 
 data DescribeAlarmHistory = DescribeAlarmHistory
     { _dahAlarmName       :: Maybe Text
-    , _dahEndDate         :: Maybe RFC822
+    , _dahEndDate         :: Maybe ISO8601
     , _dahHistoryItemType :: Maybe HistoryItemType
     , _dahMaxRecords      :: Maybe Nat
     , _dahNextToken       :: Maybe Text
-    , _dahStartDate       :: Maybe RFC822
+    , _dahStartDate       :: Maybe ISO8601
     } deriving (Eq, Show)
 
 -- | 'DescribeAlarmHistory' constructor.
diff --git a/gen/Network/AWS/CloudWatch/DescribeAlarms.hs b/gen/Network/AWS/CloudWatch/DescribeAlarms.hs
--- a/gen/Network/AWS/CloudWatch/DescribeAlarms.hs
+++ b/gen/Network/AWS/CloudWatch/DescribeAlarms.hs
@@ -92,8 +92,8 @@
 daActionPrefix :: Lens' DescribeAlarms (Maybe Text)
 daActionPrefix = lens _daActionPrefix (\s a -> s { _daActionPrefix = a })
 
--- | The alarm name prefix. AlarmNames cannot be specified if this parameter
--- is specified.
+-- | The alarm name prefix. 'AlarmNames' cannot be specified if this parameter is
+-- specified.
 daAlarmNamePrefix :: Lens' DescribeAlarms (Maybe Text)
 daAlarmNamePrefix =
     lens _daAlarmNamePrefix (\s a -> s { _daAlarmNamePrefix = a })
diff --git a/gen/Network/AWS/CloudWatch/GetMetricStatistics.hs b/gen/Network/AWS/CloudWatch/GetMetricStatistics.hs
--- a/gen/Network/AWS/CloudWatch/GetMetricStatistics.hs
+++ b/gen/Network/AWS/CloudWatch/GetMetricStatistics.hs
@@ -20,28 +20,32 @@
 -- Stability   : experimental
 -- Portability : non-portable (GHC extensions)
 
--- | Gets statistics for the specified metric. The maximum number of data points
--- returned from a single GetMetricStatistics request is 1,440, wereas the
--- maximum number of data points that can be queried is 50,850. If you make a
--- request that generates more than 1,440 data points, Amazon CloudWatch
--- returns an error. In such a case, you can alter the request by narrowing
--- the specified time range or increasing the specified period. Alternatively,
--- you can make multiple requests across adjacent time ranges. Amazon
--- CloudWatch aggregates data points based on the length of the period that
--- you specify. For example, if you request statistics with a one-minute
+-- | Gets statistics for the specified metric.
+--
+-- The maximum number of data points returned from a single 'GetMetricStatistics'
+-- request is 1,440, wereas the maximum number of data points that can be
+-- queried is 50,850. If you make a request that generates more than 1,440 data
+-- points, Amazon CloudWatch returns an error. In such a case, you can alter the
+-- request by narrowing the specified time range or increasing the specified
+-- period. Alternatively, you can make multiple requests across adjacent time
+-- ranges.
+--
+-- Amazon CloudWatch aggregates data points based on the length of the 'period'
+-- that you specify. For example, if you request statistics with a one-minute
 -- granularity, Amazon CloudWatch aggregates data points with time stamps that
 -- fall within the same one-minute period. In such a case, the data points
--- queried can greatly outnumber the data points returned. The following
--- examples show various statistics allowed by the data point query maximum of
--- 50,850 when you call GetMetricStatistics on Amazon EC2 instances with
--- detailed (one-minute) monitoring enabled: Statistics for up to 400
--- instances for a span of one hour Statistics for up to 35 instances over a
--- span of 24 hours Statistics for up to 2 instances over a span of 2 weeks
--- For information about the namespace, metric names, and dimensions that
--- other Amazon Web Services products use to send metrics to Cloudwatch, go to
--- Amazon CloudWatch Metrics, Namespaces, and Dimensions Reference in the
--- Amazon CloudWatch Developer Guide.
+-- queried can greatly outnumber the data points returned.
 --
+-- The following examples show various statistics allowed by the data point
+-- query maximum of 50,850 when you call 'GetMetricStatistics' on Amazon EC2
+-- instances with detailed (one-minute) monitoring enabled:
+--
+-- Statistics for up to 400 instances for a span of one hour Statistics for up
+-- to 35 instances over a span of 24 hours Statistics for up to 2 instances over
+-- a span of 2 weeks   For information about the namespace, metric names, and
+-- dimensions that other Amazon Web Services products use to send metrics to
+-- Cloudwatch, go to <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CW_Support_For_AWS.html Amazon CloudWatch Metrics, Namespaces, and DimensionsReference> in the /Amazon CloudWatch Developer Guide/.
+--
 -- <http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html>
 module Network.AWS.CloudWatch.GetMetricStatistics
     (
@@ -75,11 +79,11 @@
 
 data GetMetricStatistics = GetMetricStatistics
     { _gmsDimensions :: List "Dimensions" Dimension
-    , _gmsEndTime    :: RFC822
+    , _gmsEndTime    :: ISO8601
     , _gmsMetricName :: Text
     , _gmsNamespace  :: Text
     , _gmsPeriod     :: Nat
-    , _gmsStartTime  :: RFC822
+    , _gmsStartTime  :: ISO8601
     , _gmsStatistics :: List1 "Statistics" Statistic
     , _gmsUnit       :: Maybe StandardUnit
     } deriving (Eq, Show)
@@ -127,8 +131,8 @@
 gmsDimensions = lens _gmsDimensions (\s a -> s { _gmsDimensions = a }) . _List
 
 -- | The time stamp to use for determining the last datapoint to return. The
--- value specified is exclusive; results will include datapoints up to the
--- time stamp specified.
+-- value specified is exclusive; results will include datapoints up to the time
+-- stamp specified.
 gmsEndTime :: Lens' GetMetricStatistics UTCTime
 gmsEndTime = lens _gmsEndTime (\s a -> s { _gmsEndTime = a }) . _Time
 
@@ -140,22 +144,21 @@
 gmsNamespace :: Lens' GetMetricStatistics Text
 gmsNamespace = lens _gmsNamespace (\s a -> s { _gmsNamespace = a })
 
--- | The granularity, in seconds, of the returned datapoints. Period must be
--- at least 60 seconds and must be a multiple of 60. The default value is
--- 60.
+-- | The granularity, in seconds, of the returned datapoints. 'Period' must be at
+-- least 60 seconds and must be a multiple of 60. The default value is 60.
 gmsPeriod :: Lens' GetMetricStatistics Natural
 gmsPeriod = lens _gmsPeriod (\s a -> s { _gmsPeriod = a }) . _Nat
 
 -- | The time stamp to use for determining the first datapoint to return. The
--- value specified is inclusive; results include datapoints with the time
--- stamp specified.
+-- value specified is inclusive; results include datapoints with the time stamp
+-- specified.
 gmsStartTime :: Lens' GetMetricStatistics UTCTime
 gmsStartTime = lens _gmsStartTime (\s a -> s { _gmsStartTime = a }) . _Time
 
--- | The metric statistics to return. For information about specific
--- statistics returned by GetMetricStatistics, go to Statistics in the
--- Amazon CloudWatch Developer Guide. Valid Values: Average | Sum |
--- SampleCount | Maximum | Minimum.
+-- | The metric statistics to return. For information about specific statistics
+-- returned by GetMetricStatistics, go to <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/index.html?CHAP_TerminologyandKeyConcepts.html#Statistic Statistics> in the /Amazon CloudWatchDeveloper Guide/.
+--
+-- Valid Values: 'Average | Sum | SampleCount | Maximum | Minimum'
 gmsStatistics :: Lens' GetMetricStatistics (NonEmpty Statistic)
 gmsStatistics = lens _gmsStatistics (\s a -> s { _gmsStatistics = a }) . _List1
 
diff --git a/gen/Network/AWS/CloudWatch/ListMetrics.hs b/gen/Network/AWS/CloudWatch/ListMetrics.hs
--- a/gen/Network/AWS/CloudWatch/ListMetrics.hs
+++ b/gen/Network/AWS/CloudWatch/ListMetrics.hs
@@ -21,8 +21,8 @@
 -- Portability : non-portable (GHC extensions)
 
 -- | Returns a list of valid metrics stored for the AWS account owner. Returned
--- metrics can be used with GetMetricStatistics to obtain statistical data for
--- a given metric.
+-- metrics can be used with 'GetMetricStatistics' to obtain statistical data for a
+-- given metric.
 --
 -- <http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html>
 module Network.AWS.CloudWatch.ListMetrics
diff --git a/gen/Network/AWS/CloudWatch/PutMetricAlarm.hs b/gen/Network/AWS/CloudWatch/PutMetricAlarm.hs
--- a/gen/Network/AWS/CloudWatch/PutMetricAlarm.hs
+++ b/gen/Network/AWS/CloudWatch/PutMetricAlarm.hs
@@ -22,11 +22,11 @@
 
 -- | Creates or updates an alarm and associates it with the specified Amazon
 -- CloudWatch metric. Optionally, this operation can associate one or more
--- Amazon Simple Notification Service resources with the alarm. When this
--- operation creates an alarm, the alarm state is immediately set to
--- INSUFFICIENT_DATA. The alarm is evaluated and its StateValue is set
--- appropriately. Any actions associated with the StateValue is then executed.
+-- Amazon Simple Notification Service resources with the alarm.
 --
+-- When this operation creates an alarm, the alarm state is immediately set to 'INSUFFICIENT_DATA'. The alarm is evaluated and its 'StateValue' is set
+-- appropriately. Any actions associated with the 'StateValue' is then executed.
+--
 -- <http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricAlarm.html>
 module Network.AWS.CloudWatch.PutMetricAlarm
     (
@@ -147,10 +147,10 @@
 pmaActionsEnabled =
     lens _pmaActionsEnabled (\s a -> s { _pmaActionsEnabled = a })
 
--- | The list of actions to execute when this alarm transitions into an ALARM
--- state from any other state. Each action is specified as an Amazon
--- Resource Number (ARN). Currently the only action supported is publishing
--- to an Amazon SNS topic or an Amazon Auto Scaling policy.
+-- | The list of actions to execute when this alarm transitions into an 'ALARM'
+-- state from any other state. Each action is specified as an Amazon Resource
+-- Number (ARN). Currently the only action supported is publishing to an Amazon
+-- SNS topic or an Amazon Auto Scaling policy.
 pmaAlarmActions :: Lens' PutMetricAlarm [Text]
 pmaAlarmActions = lens _pmaAlarmActions (\s a -> s { _pmaAlarmActions = a }) . _List
 
@@ -160,13 +160,11 @@
     lens _pmaAlarmDescription (\s a -> s { _pmaAlarmDescription = a })
 
 -- | The descriptive name for the alarm. This name must be unique within the
--- user's AWS account.
+-- user's AWS account
 pmaAlarmName :: Lens' PutMetricAlarm Text
 pmaAlarmName = lens _pmaAlarmName (\s a -> s { _pmaAlarmName = a })
 
--- | The arithmetic operation to use when comparing the specified Statistic
--- and Threshold. The specified Statistic value is used as the first
--- operand.
+-- | The arithmetic operation to use when comparing the specified 'Statistic' and 'Threshold'. The specified 'Statistic' value is used as the first operand.
 pmaComparisonOperator :: Lens' PutMetricAlarm ComparisonOperator
 pmaComparisonOperator =
     lens _pmaComparisonOperator (\s a -> s { _pmaComparisonOperator = a })
@@ -182,10 +180,9 @@
     lens _pmaEvaluationPeriods (\s a -> s { _pmaEvaluationPeriods = a })
         . _Nat
 
--- | The list of actions to execute when this alarm transitions into an
--- INSUFFICIENT_DATA state from any other state. Each action is specified as
--- an Amazon Resource Number (ARN). Currently the only action supported is
--- publishing to an Amazon SNS topic or an Amazon Auto Scaling policy.
+-- | The list of actions to execute when this alarm transitions into an 'INSUFFICIENT_DATA' state from any other state. Each action is specified as an Amazon Resource
+-- Number (ARN). Currently the only action supported is publishing to an Amazon
+-- SNS topic or an Amazon Auto Scaling policy.
 pmaInsufficientDataActions :: Lens' PutMetricAlarm [Text]
 pmaInsufficientDataActions =
     lens _pmaInsufficientDataActions
@@ -200,10 +197,10 @@
 pmaNamespace :: Lens' PutMetricAlarm Text
 pmaNamespace = lens _pmaNamespace (\s a -> s { _pmaNamespace = a })
 
--- | The list of actions to execute when this alarm transitions into an OK
--- state from any other state. Each action is specified as an Amazon
--- Resource Number (ARN). Currently the only action supported is publishing
--- to an Amazon SNS topic or an Amazon Auto Scaling policy.
+-- | The list of actions to execute when this alarm transitions into an 'OK' state
+-- from any other state. Each action is specified as an Amazon Resource Number
+-- (ARN). Currently the only action supported is publishing to an Amazon SNS
+-- topic or an Amazon Auto Scaling policy.
 pmaOKActions :: Lens' PutMetricAlarm [Text]
 pmaOKActions = lens _pmaOKActions (\s a -> s { _pmaOKActions = a }) . _List
 
diff --git a/gen/Network/AWS/CloudWatch/PutMetricData.hs b/gen/Network/AWS/CloudWatch/PutMetricData.hs
--- a/gen/Network/AWS/CloudWatch/PutMetricData.hs
+++ b/gen/Network/AWS/CloudWatch/PutMetricData.hs
@@ -21,17 +21,19 @@
 -- Portability : non-portable (GHC extensions)
 
 -- | Publishes metric data points to Amazon CloudWatch. Amazon Cloudwatch
--- associates the data points with the specified metric. If the specified
--- metric does not exist, Amazon CloudWatch creates the metric. It can take up
--- to fifteen minutes for a new metric to appear in calls to the ListMetrics
--- action. The size of a PutMetricData request is limited to 8 KB for HTTP GET
--- requests and 40 KB for HTTP POST requests. Although the Value parameter
--- accepts numbers of type Double, Amazon CloudWatch truncates values with
--- very large exponents. Values with base-10 exponents greater than 126 (1 x
--- 10^126) are truncated. Likewise, values with base-10 exponents less than
--- -130 (1 x 10^-130) are also truncated. Data that is timestamped 24 hours or
--- more in the past may take in excess of 48 hours to become available from
--- submission time using GetMetricStatistics.
+-- associates the data points with the specified metric. If the specified metric
+-- does not exist, Amazon CloudWatch creates the metric. It can take up to
+-- fifteen minutes for a new metric to appear in calls to the 'ListMetrics' action.
+--
+-- The size of a PutMetricData request is limited to 8 KB for HTTP GET
+-- requests and 40 KB for HTTP POST requests.
+--
+-- Although the 'Value' parameter accepts numbers of type 'Double', Amazon
+-- CloudWatch truncates values with very large exponents. Values with base-10
+-- exponents greater than 126 (1 x 10^126) are truncated. Likewise, values with
+-- base-10 exponents less than -130 (1 x 10^-130) are also truncated.  Data that
+-- is timestamped 24 hours or more in the past may take in excess of 48 hours to
+-- become available from submission time using 'GetMetricStatistics'.
 --
 -- <http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html>
 module Network.AWS.CloudWatch.PutMetricData
diff --git a/gen/Network/AWS/CloudWatch/SetAlarmState.hs b/gen/Network/AWS/CloudWatch/SetAlarmState.hs
--- a/gen/Network/AWS/CloudWatch/SetAlarmState.hs
+++ b/gen/Network/AWS/CloudWatch/SetAlarmState.hs
@@ -20,7 +20,7 @@
 -- Stability   : experimental
 -- Portability : non-portable (GHC extensions)
 
--- | Temporarily sets the state of an alarm. When the updated StateValue differs
+-- | Temporarily sets the state of an alarm. When the updated 'StateValue' differs
 -- from the previous value, the action configured for the appropriate state is
 -- invoked. This is not a permanent change. The next periodic alarm check (in
 -- about a minute) will set the alarm to its actual state.
@@ -84,13 +84,13 @@
 sasAlarmName :: Lens' SetAlarmState Text
 sasAlarmName = lens _sasAlarmName (\s a -> s { _sasAlarmName = a })
 
--- | The reason that this alarm is set to this specific state (in
--- human-readable text format).
+-- | The reason that this alarm is set to this specific state (in human-readable
+-- text format)
 sasStateReason :: Lens' SetAlarmState Text
 sasStateReason = lens _sasStateReason (\s a -> s { _sasStateReason = a })
 
 -- | The reason that this alarm is set to this specific state (in
--- machine-readable JSON format).
+-- machine-readable JSON format)
 sasStateReasonData :: Lens' SetAlarmState (Maybe Text)
 sasStateReasonData =
     lens _sasStateReasonData (\s a -> s { _sasStateReasonData = a })
diff --git a/gen/Network/AWS/CloudWatch/Types.hs b/gen/Network/AWS/CloudWatch/Types.hs
--- a/gen/Network/AWS/CloudWatch/Types.hs
+++ b/gen/Network/AWS/CloudWatch/Types.hs
@@ -219,7 +219,7 @@
     { _maActionsEnabled                     :: Maybe Bool
     , _maAlarmActions                       :: List "OKActions" Text
     , _maAlarmArn                           :: Maybe Text
-    , _maAlarmConfigurationUpdatedTimestamp :: Maybe RFC822
+    , _maAlarmConfigurationUpdatedTimestamp :: Maybe ISO8601
     , _maAlarmDescription                   :: Maybe Text
     , _maAlarmName                          :: Maybe Text
     , _maComparisonOperator                 :: Maybe ComparisonOperator
@@ -232,7 +232,7 @@
     , _maPeriod                             :: Maybe Nat
     , _maStateReason                        :: Maybe Text
     , _maStateReasonData                    :: Maybe Text
-    , _maStateUpdatedTimestamp              :: Maybe RFC822
+    , _maStateUpdatedTimestamp              :: Maybe ISO8601
     , _maStateValue                         :: Maybe StateValue
     , _maStatistic                          :: Maybe Statistic
     , _maThreshold                          :: Maybe Double
@@ -315,10 +315,10 @@
 maActionsEnabled :: Lens' MetricAlarm (Maybe Bool)
 maActionsEnabled = lens _maActionsEnabled (\s a -> s { _maActionsEnabled = a })
 
--- | The list of actions to execute when this alarm transitions into an ALARM
--- state from any other state. Each action is specified as an Amazon
--- Resource Number (ARN). Currently the only actions supported are
--- publishing to an Amazon SNS topic and triggering an Auto Scaling policy.
+-- | The list of actions to execute when this alarm transitions into an 'ALARM'
+-- state from any other state. Each action is specified as an Amazon Resource
+-- Number (ARN). Currently the only actions supported are publishing to an
+-- Amazon SNS topic and triggering an Auto Scaling policy.
 maAlarmActions :: Lens' MetricAlarm [Text]
 maAlarmActions = lens _maAlarmActions (\s a -> s { _maAlarmActions = a }) . _List
 
@@ -327,10 +327,10 @@
 maAlarmArn = lens _maAlarmArn (\s a -> s { _maAlarmArn = a })
 
 -- | The time stamp of the last update to the alarm configuration. Amazon
--- CloudWatch uses Coordinated Universal Time (UTC) when returning time
--- stamps, which do not accommodate seasonal adjustments such as daylight
--- savings time. For more information, see Time stamps in the Amazon
--- CloudWatch Developer Guide.
+-- CloudWatch uses Coordinated Universal Time (UTC) when returning time stamps,
+-- which do not accommodate seasonal adjustments such as daylight savings time.
+-- For more information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp Time stamps> in the /Amazon CloudWatch Developer Guide/
+-- .
 maAlarmConfigurationUpdatedTimestamp :: Lens' MetricAlarm (Maybe UTCTime)
 maAlarmConfigurationUpdatedTimestamp =
     lens _maAlarmConfigurationUpdatedTimestamp
@@ -346,9 +346,7 @@
 maAlarmName :: Lens' MetricAlarm (Maybe Text)
 maAlarmName = lens _maAlarmName (\s a -> s { _maAlarmName = a })
 
--- | The arithmetic operation to use when comparing the specified Statistic
--- and Threshold. The specified Statistic value is used as the first
--- operand.
+-- | The arithmetic operation to use when comparing the specified 'Statistic' and 'Threshold'. The specified 'Statistic' value is used as the first operand.
 maComparisonOperator :: Lens' MetricAlarm (Maybe ComparisonOperator)
 maComparisonOperator =
     lens _maComparisonOperator (\s a -> s { _maComparisonOperator = a })
@@ -364,11 +362,11 @@
     lens _maEvaluationPeriods (\s a -> s { _maEvaluationPeriods = a })
         . mapping _Nat
 
--- | The list of actions to execute when this alarm transitions into an
--- INSUFFICIENT_DATA state from any other state. Each action is specified as
--- an Amazon Resource Number (ARN). Currently the only actions supported are
--- publishing to an Amazon SNS topic or triggering an Auto Scaling policy.
--- The current WSDL lists this attribute as UnknownActions.
+-- | The list of actions to execute when this alarm transitions into an 'INSUFFICIENT_DATA' state from any other state. Each action is specified as an Amazon Resource
+-- Number (ARN). Currently the only actions supported are publishing to an
+-- Amazon SNS topic or triggering an Auto Scaling policy.
+--
+-- The current WSDL lists this attribute as 'UnknownActions'.
 maInsufficientDataActions :: Lens' MetricAlarm [Text]
 maInsufficientDataActions =
     lens _maInsufficientDataActions
@@ -383,10 +381,10 @@
 maNamespace :: Lens' MetricAlarm (Maybe Text)
 maNamespace = lens _maNamespace (\s a -> s { _maNamespace = a })
 
--- | The list of actions to execute when this alarm transitions into an OK
--- state from any other state. Each action is specified as an Amazon
--- Resource Number (ARN). Currently the only actions supported are
--- publishing to an Amazon SNS topic and triggering an Auto Scaling policy.
+-- | The list of actions to execute when this alarm transitions into an 'OK' state
+-- from any other state. Each action is specified as an Amazon Resource Number
+-- (ARN). Currently the only actions supported are publishing to an Amazon SNS
+-- topic and triggering an Auto Scaling policy.
 maOKActions :: Lens' MetricAlarm [Text]
 maOKActions = lens _maOKActions (\s a -> s { _maOKActions = a }) . _List
 
@@ -398,16 +396,15 @@
 maStateReason :: Lens' MetricAlarm (Maybe Text)
 maStateReason = lens _maStateReason (\s a -> s { _maStateReason = a })
 
--- | An explanation for the alarm's state in machine-readable JSON format.
+-- | An explanation for the alarm's state in machine-readable JSON format
 maStateReasonData :: Lens' MetricAlarm (Maybe Text)
 maStateReasonData =
     lens _maStateReasonData (\s a -> s { _maStateReasonData = a })
 
 -- | The time stamp of the last update to the alarm's state. Amazon CloudWatch
--- uses Coordinated Universal Time (UTC) when returning time stamps, which
--- do not accommodate seasonal adjustments such as daylight savings time.
--- For more information, see Time stamps in the Amazon CloudWatch Developer
--- Guide.
+-- uses Coordinated Universal Time (UTC) when returning time stamps, which do
+-- not accommodate seasonal adjustments such as daylight savings time. For more
+-- information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp Time stamps> in the /Amazon CloudWatch Developer Guide/.
 maStateUpdatedTimestamp :: Lens' MetricAlarm (Maybe UTCTime)
 maStateUpdatedTimestamp =
     lens _maStateUpdatedTimestamp (\s a -> s { _maStateUpdatedTimestamp = a })
@@ -487,9 +484,12 @@
 instance Hashable HistoryItemType
 
 instance FromText HistoryItemType where
-    parser = match "Action"              Action
-         <|> match "ConfigurationUpdate" ConfigurationUpdate
-         <|> match "StateUpdate"         StateUpdate
+    parser = takeText >>= \case
+        "Action"              -> pure Action
+        "ConfigurationUpdate" -> pure ConfigurationUpdate
+        "StateUpdate"         -> pure StateUpdate
+        e                     -> fail $
+            "Failure parsing HistoryItemType from " ++ show e
 
 instance ToText HistoryItemType where
     toText = \case
@@ -504,12 +504,11 @@
 instance FromXML HistoryItemType where
     parseXML = parseXMLText "HistoryItemType"
 
-
 data MetricDatum = MetricDatum
     { _mdDimensions      :: List "Dimensions" Dimension
     , _mdMetricName      :: Text
     , _mdStatisticValues :: Maybe StatisticSet
-    , _mdTimestamp       :: Maybe RFC822
+    , _mdTimestamp       :: Maybe ISO8601
     , _mdUnit            :: Maybe StandardUnit
     , _mdValue           :: Maybe Double
     } deriving (Eq, Show)
@@ -556,11 +555,11 @@
 mdStatisticValues =
     lens _mdStatisticValues (\s a -> s { _mdStatisticValues = a })
 
--- | The time stamp used for the metric. If not specified, the default value
--- is set to the time the metric data was received. Amazon CloudWatch uses
+-- | The time stamp used for the metric. If not specified, the default value is
+-- set to the time the metric data was received. Amazon CloudWatch uses
 -- Coordinated Universal Time (UTC) when returning time stamps, which do not
 -- accommodate seasonal adjustments such as daylight savings time. For more
--- information, see Time stamps in the Amazon CloudWatch Developer Guide.
+-- information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp Time stamps> in the /Amazon CloudWatch Developer Guide/.
 mdTimestamp :: Lens' MetricDatum (Maybe UTCTime)
 mdTimestamp = lens _mdTimestamp (\s a -> s { _mdTimestamp = a }) . mapping _Time
 
@@ -568,11 +567,12 @@
 mdUnit :: Lens' MetricDatum (Maybe StandardUnit)
 mdUnit = lens _mdUnit (\s a -> s { _mdUnit = a })
 
--- | The value for the metric. Although the Value parameter accepts numbers of
--- type Double, Amazon CloudWatch truncates values with very large
--- exponents. Values with base-10 exponents greater than 126 (1 x 10^126)
--- are truncated. Likewise, values with base-10 exponents less than -130 (1
--- x 10^-130) are also truncated.
+-- | The value for the metric.
+--
+-- Although the 'Value' parameter accepts numbers of type 'Double', Amazon
+-- CloudWatch truncates values with very large exponents. Values with base-10
+-- exponents greater than 126 (1 x 10^126) are truncated. Likewise, values with
+-- base-10 exponents less than -130 (1 x 10^-130) are also truncated.
 mdValue :: Lens' MetricDatum (Maybe Double)
 mdValue = lens _mdValue (\s a -> s { _mdValue = a })
 
@@ -628,33 +628,36 @@
 instance Hashable StandardUnit
 
 instance FromText StandardUnit where
-    parser = match "Bits"             Bits
-         <|> match "Bits/Second"      BitsSecond
-         <|> match "Bytes"            Bytes
-         <|> match "Bytes/Second"     BytesSecond
-         <|> match "Count"            Count
-         <|> match "Count/Second"     CountSecond
-         <|> match "Gigabits"         Gigabits
-         <|> match "Gigabits/Second"  GigabitsSecond
-         <|> match "Gigabytes"        Gigabytes
-         <|> match "Gigabytes/Second" GigabytesSecond
-         <|> match "Kilobits"         Kilobits
-         <|> match "Kilobits/Second"  KilobitsSecond
-         <|> match "Kilobytes"        Kilobytes
-         <|> match "Kilobytes/Second" KilobytesSecond
-         <|> match "Megabits"         Megabits
-         <|> match "Megabits/Second"  MegabitsSecond
-         <|> match "Megabytes"        Megabytes
-         <|> match "Megabytes/Second" MegabytesSecond
-         <|> match "Microseconds"     Microseconds
-         <|> match "Milliseconds"     Milliseconds
-         <|> match "None"             None
-         <|> match "Percent"          Percent
-         <|> match "Seconds"          Seconds
-         <|> match "Terabits"         Terabits
-         <|> match "Terabits/Second"  TerabitsSecond
-         <|> match "Terabytes"        Terabytes
-         <|> match "Terabytes/Second" TerabytesSecond
+    parser = takeText >>= \case
+        "Bits"             -> pure Bits
+        "Bits/Second"      -> pure BitsSecond
+        "Bytes"            -> pure Bytes
+        "Bytes/Second"     -> pure BytesSecond
+        "Count"            -> pure Count
+        "Count/Second"     -> pure CountSecond
+        "Gigabits"         -> pure Gigabits
+        "Gigabits/Second"  -> pure GigabitsSecond
+        "Gigabytes"        -> pure Gigabytes
+        "Gigabytes/Second" -> pure GigabytesSecond
+        "Kilobits"         -> pure Kilobits
+        "Kilobits/Second"  -> pure KilobitsSecond
+        "Kilobytes"        -> pure Kilobytes
+        "Kilobytes/Second" -> pure KilobytesSecond
+        "Megabits"         -> pure Megabits
+        "Megabits/Second"  -> pure MegabitsSecond
+        "Megabytes"        -> pure Megabytes
+        "Megabytes/Second" -> pure MegabytesSecond
+        "Microseconds"     -> pure Microseconds
+        "Milliseconds"     -> pure Milliseconds
+        "None"             -> pure None
+        "Percent"          -> pure Percent
+        "Seconds"          -> pure Seconds
+        "Terabits"         -> pure Terabits
+        "Terabits/Second"  -> pure TerabitsSecond
+        "Terabytes"        -> pure Terabytes
+        "Terabytes/Second" -> pure TerabytesSecond
+        e                  -> fail $
+            "Failure parsing StandardUnit from " ++ show e
 
 instance ToText StandardUnit where
     toText = \case
@@ -693,7 +696,6 @@
 instance FromXML StandardUnit where
     parseXML = parseXMLText "StandardUnit"
 
-
 data Dimension = Dimension
     { _dName  :: Text
     , _dValue :: Text
@@ -719,7 +721,7 @@
 dName :: Lens' Dimension Text
 dName = lens _dName (\s a -> s { _dName = a })
 
--- | The value representing the dimension measurement.
+-- | The value representing the dimension measurement
 dValue :: Lens' Dimension Text
 dValue = lens _dValue (\s a -> s { _dValue = a })
 
@@ -744,10 +746,13 @@
 instance Hashable ComparisonOperator
 
 instance FromText ComparisonOperator where
-    parser = match "GreaterThanOrEqualToThreshold" GreaterThanOrEqualToThreshold
-         <|> match "GreaterThanThreshold"          GreaterThanThreshold
-         <|> match "LessThanOrEqualToThreshold"    LessThanOrEqualToThreshold
-         <|> match "LessThanThreshold"             LessThanThreshold
+    parser = takeText >>= \case
+        "GreaterThanOrEqualToThreshold" -> pure GreaterThanOrEqualToThreshold
+        "GreaterThanThreshold"          -> pure GreaterThanThreshold
+        "LessThanOrEqualToThreshold"    -> pure LessThanOrEqualToThreshold
+        "LessThanThreshold"             -> pure LessThanThreshold
+        e                               -> fail $
+            "Failure parsing ComparisonOperator from " ++ show e
 
 instance ToText ComparisonOperator where
     toText = \case
@@ -763,13 +768,12 @@
 instance FromXML ComparisonOperator where
     parseXML = parseXMLText "ComparisonOperator"
 
-
 data AlarmHistoryItem = AlarmHistoryItem
     { _ahiAlarmName       :: Maybe Text
     , _ahiHistoryData     :: Maybe Text
     , _ahiHistoryItemType :: Maybe HistoryItemType
     , _ahiHistorySummary  :: Maybe Text
-    , _ahiTimestamp       :: Maybe RFC822
+    , _ahiTimestamp       :: Maybe ISO8601
     } deriving (Eq, Show)
 
 -- | 'AlarmHistoryItem' constructor.
@@ -816,7 +820,7 @@
 -- | The time stamp for the alarm history item. Amazon CloudWatch uses
 -- Coordinated Universal Time (UTC) when returning time stamps, which do not
 -- accommodate seasonal adjustments such as daylight savings time. For more
--- information, see Time stamps in the Amazon CloudWatch Developer Guide.
+-- information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp Time stamps> in the /Amazon CloudWatch Developer Guide/.
 ahiTimestamp :: Lens' AlarmHistoryItem (Maybe UTCTime)
 ahiTimestamp = lens _ahiTimestamp (\s a -> s { _ahiTimestamp = a }) . mapping _Time
 
@@ -894,9 +898,12 @@
 instance Hashable StateValue
 
 instance FromText StateValue where
-    parser = match "ALARM"             Alarm
-         <|> match "INSUFFICIENT_DATA" InsufficientData
-         <|> match "OK"                Ok
+    parser = takeText >>= \case
+        "ALARM"             -> pure Alarm
+        "INSUFFICIENT_DATA" -> pure InsufficientData
+        "OK"                -> pure Ok
+        e                   -> fail $
+            "Failure parsing StateValue from " ++ show e
 
 instance ToText StateValue where
     toText = \case
@@ -911,14 +918,13 @@
 instance FromXML StateValue where
     parseXML = parseXMLText "StateValue"
 
-
 data Datapoint = Datapoint
     { _dAverage     :: Maybe Double
     , _dMaximum     :: Maybe Double
     , _dMinimum     :: Maybe Double
     , _dSampleCount :: Maybe Double
     , _dSum         :: Maybe Double
-    , _dTimestamp   :: Maybe RFC822
+    , _dTimestamp   :: Maybe ISO8601
     , _dUnit        :: Maybe StandardUnit
     } deriving (Eq, Show)
 
@@ -963,8 +969,8 @@
 dMinimum :: Lens' Datapoint (Maybe Double)
 dMinimum = lens _dMinimum (\s a -> s { _dMinimum = a })
 
--- | The number of metric values that contributed to the aggregate value of
--- this datapoint.
+-- | The number of metric values that contributed to the aggregate value of this
+-- datapoint.
 dSampleCount :: Lens' Datapoint (Maybe Double)
 dSampleCount = lens _dSampleCount (\s a -> s { _dSampleCount = a })
 
@@ -974,8 +980,7 @@
 
 -- | The time stamp used for the datapoint. Amazon CloudWatch uses Coordinated
 -- Universal Time (UTC) when returning time stamps, which do not accommodate
--- seasonal adjustments such as daylight savings time. For more information,
--- see Time stamps in the Amazon CloudWatch Developer Guide.
+-- seasonal adjustments such as daylight savings time. For more information, see <http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cloudwatch_concepts.html#about_timestamp Time stamps> in the /Amazon CloudWatch Developer Guide/.
 dTimestamp :: Lens' Datapoint (Maybe UTCTime)
 dTimestamp = lens _dTimestamp (\s a -> s { _dTimestamp = a }) . mapping _Time
 
@@ -1054,11 +1059,14 @@
 instance Hashable Statistic
 
 instance FromText Statistic where
-    parser = match "Average"     Average
-         <|> match "Maximum"     Maximum
-         <|> match "Minimum"     Minimum
-         <|> match "SampleCount" SampleCount
-         <|> match "Sum"         Sum
+    parser = takeText >>= \case
+        "Average"     -> pure Average
+        "Maximum"     -> pure Maximum
+        "Minimum"     -> pure Minimum
+        "SampleCount" -> pure SampleCount
+        "Sum"         -> pure Sum
+        e             -> fail $
+            "Failure parsing Statistic from " ++ show e
 
 instance ToText Statistic where
     toText = \case
@@ -1074,4 +1082,3 @@
 
 instance FromXML Statistic where
     parseXML = parseXMLText "Statistic"
-
