diff --git a/amazonka-emr.cabal b/amazonka-emr.cabal
--- a/amazonka-emr.cabal
+++ b/amazonka-emr.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-emr
-version:               0.0.0
+version:               0.0.1
 synopsis:              Amazon Elastic MapReduce SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -58,5 +58,5 @@
     other-modules:
 
     build-depends:
-          amazonka-core
-        , base          >= 4.7 && < 5
+          amazonka-core == 0.0.1.*
+        , base          >= 4.7     && < 5
diff --git a/gen/Network/AWS/EMR/DescribeJobFlows.hs b/gen/Network/AWS/EMR/DescribeJobFlows.hs
--- a/gen/Network/AWS/EMR/DescribeJobFlows.hs
+++ b/gen/Network/AWS/EMR/DescribeJobFlows.hs
@@ -63,8 +63,8 @@
     { _djfCreatedAfter  :: Maybe RFC822
     , _djfCreatedBefore :: Maybe RFC822
     , _djfJobFlowIds    :: List "Args" Text
-    , _djfJobFlowStates :: List "JobFlowStates" Text
-    } deriving (Eq, Ord, Show)
+    , _djfJobFlowStates :: List "JobFlowStates" JobFlowExecutionState
+    } deriving (Eq, Show)
 
 -- | 'DescribeJobFlows' constructor.
 --
@@ -76,7 +76,7 @@
 --
 -- * 'djfJobFlowIds' @::@ ['Text']
 --
--- * 'djfJobFlowStates' @::@ ['Text']
+-- * 'djfJobFlowStates' @::@ ['JobFlowExecutionState']
 --
 describeJobFlows :: DescribeJobFlows
 describeJobFlows = DescribeJobFlows
@@ -99,7 +99,7 @@
 djfJobFlowIds = lens _djfJobFlowIds (\s a -> s { _djfJobFlowIds = a }) . _List
 
 -- | Return only job flows whose state is contained in this list.
-djfJobFlowStates :: Lens' DescribeJobFlows [Text]
+djfJobFlowStates :: Lens' DescribeJobFlows [JobFlowExecutionState]
 djfJobFlowStates = lens _djfJobFlowStates (\s a -> s { _djfJobFlowStates = a }) . _List
 
 newtype DescribeJobFlowsResponse = DescribeJobFlowsResponse
diff --git a/gen/Network/AWS/EMR/ListClusters.hs b/gen/Network/AWS/EMR/ListClusters.hs
--- a/gen/Network/AWS/EMR/ListClusters.hs
+++ b/gen/Network/AWS/EMR/ListClusters.hs
@@ -54,17 +54,17 @@
 import qualified GHC.Exts
 
 data ListClusters = ListClusters
-    { _lcClusterStates :: List "ClusterStates" Text
+    { _lcClusterStates :: List "ClusterStates" ClusterState
     , _lcCreatedAfter  :: Maybe RFC822
     , _lcCreatedBefore :: Maybe RFC822
     , _lcMarker        :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'ListClusters' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'lcClusterStates' @::@ ['Text']
+-- * 'lcClusterStates' @::@ ['ClusterState']
 --
 -- * 'lcCreatedAfter' @::@ 'Maybe' 'UTCTime'
 --
@@ -81,7 +81,7 @@
     }
 
 -- | The cluster state filters to apply when listing clusters.
-lcClusterStates :: Lens' ListClusters [Text]
+lcClusterStates :: Lens' ListClusters [ClusterState]
 lcClusterStates = lens _lcClusterStates (\s a -> s { _lcClusterStates = a }) . _List
 
 -- | The creation date and time beginning value filter for listing clusters .
diff --git a/gen/Network/AWS/EMR/ListInstances.hs b/gen/Network/AWS/EMR/ListInstances.hs
--- a/gen/Network/AWS/EMR/ListInstances.hs
+++ b/gen/Network/AWS/EMR/ListInstances.hs
@@ -56,9 +56,9 @@
 data ListInstances = ListInstances
     { _liClusterId          :: Text
     , _liInstanceGroupId    :: Maybe Text
-    , _liInstanceGroupTypes :: List "InstanceGroupTypes" Text
+    , _liInstanceGroupTypes :: List "InstanceGroupTypes" InstanceGroupType
     , _liMarker             :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'ListInstances' constructor.
 --
@@ -68,7 +68,7 @@
 --
 -- * 'liInstanceGroupId' @::@ 'Maybe' 'Text'
 --
--- * 'liInstanceGroupTypes' @::@ ['Text']
+-- * 'liInstanceGroupTypes' @::@ ['InstanceGroupType']
 --
 -- * 'liMarker' @::@ 'Maybe' 'Text'
 --
@@ -91,7 +91,7 @@
     lens _liInstanceGroupId (\s a -> s { _liInstanceGroupId = a })
 
 -- | The type of instance group for which to list the instances.
-liInstanceGroupTypes :: Lens' ListInstances [Text]
+liInstanceGroupTypes :: Lens' ListInstances [InstanceGroupType]
 liInstanceGroupTypes =
     lens _liInstanceGroupTypes (\s a -> s { _liInstanceGroupTypes = a })
         . _List
diff --git a/gen/Network/AWS/EMR/ListSteps.hs b/gen/Network/AWS/EMR/ListSteps.hs
--- a/gen/Network/AWS/EMR/ListSteps.hs
+++ b/gen/Network/AWS/EMR/ListSteps.hs
@@ -51,8 +51,8 @@
 data ListSteps = ListSteps
     { _lsClusterId  :: Text
     , _lsMarker     :: Maybe Text
-    , _lsStepStates :: List "StepStates" Text
-    } deriving (Eq, Ord, Show)
+    , _lsStepStates :: List "StepStates" StepState
+    } deriving (Eq, Show)
 
 -- | 'ListSteps' constructor.
 --
@@ -62,7 +62,7 @@
 --
 -- * 'lsMarker' @::@ 'Maybe' 'Text'
 --
--- * 'lsStepStates' @::@ ['Text']
+-- * 'lsStepStates' @::@ ['StepState']
 --
 listSteps :: Text -- ^ 'lsClusterId'
           -> ListSteps
@@ -81,7 +81,7 @@
 lsMarker = lens _lsMarker (\s a -> s { _lsMarker = a })
 
 -- | The filter to limit the step list based on certain states.
-lsStepStates :: Lens' ListSteps [Text]
+lsStepStates :: Lens' ListSteps [StepState]
 lsStepStates = lens _lsStepStates (\s a -> s { _lsStepStates = a }) . _List
 
 data ListStepsResponse = ListStepsResponse
diff --git a/gen/Network/AWS/EMR/Types.hs b/gen/Network/AWS/EMR/Types.hs
--- a/gen/Network/AWS/EMR/Types.hs
+++ b/gen/Network/AWS/EMR/Types.hs
@@ -447,6 +447,10 @@
         OnDemand -> "ON_DEMAND"
         Spot     -> "SPOT"
 
+instance ToByteString MarketType
+instance ToHeader     MarketType
+instance ToQuery      MarketType
+
 instance FromJSON MarketType where
     parseJSON = parseJSONText "MarketType"
 
@@ -456,11 +460,11 @@
 data InstanceGroupConfig = InstanceGroupConfig
     { _igcBidPrice      :: Maybe Text
     , _igcInstanceCount :: Int
-    , _igcInstanceRole  :: Text
+    , _igcInstanceRole  :: InstanceRoleType
     , _igcInstanceType  :: Text
-    , _igcMarket        :: Maybe Text
+    , _igcMarket        :: Maybe MarketType
     , _igcName          :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'InstanceGroupConfig' constructor.
 --
@@ -470,15 +474,15 @@
 --
 -- * 'igcInstanceCount' @::@ 'Int'
 --
--- * 'igcInstanceRole' @::@ 'Text'
+-- * 'igcInstanceRole' @::@ 'InstanceRoleType'
 --
 -- * 'igcInstanceType' @::@ 'Text'
 --
--- * 'igcMarket' @::@ 'Maybe' 'Text'
+-- * 'igcMarket' @::@ 'Maybe' 'MarketType'
 --
 -- * 'igcName' @::@ 'Maybe' 'Text'
 --
-instanceGroupConfig :: Text -- ^ 'igcInstanceRole'
+instanceGroupConfig :: InstanceRoleType -- ^ 'igcInstanceRole'
                     -> Text -- ^ 'igcInstanceType'
                     -> Int -- ^ 'igcInstanceCount'
                     -> InstanceGroupConfig
@@ -501,7 +505,7 @@
 igcInstanceCount = lens _igcInstanceCount (\s a -> s { _igcInstanceCount = a })
 
 -- | The role of the instance group in the cluster.
-igcInstanceRole :: Lens' InstanceGroupConfig Text
+igcInstanceRole :: Lens' InstanceGroupConfig InstanceRoleType
 igcInstanceRole = lens _igcInstanceRole (\s a -> s { _igcInstanceRole = a })
 
 -- | The Amazon EC2 instance type for all instances in the instance group.
@@ -509,7 +513,7 @@
 igcInstanceType = lens _igcInstanceType (\s a -> s { _igcInstanceType = a })
 
 -- | Market type of the Amazon EC2 instances used to create a cluster node.
-igcMarket :: Lens' InstanceGroupConfig (Maybe Text)
+igcMarket :: Lens' InstanceGroupConfig (Maybe MarketType)
 igcMarket = lens _igcMarket (\s a -> s { _igcMarket = a })
 
 -- | Friendly name given to the instance group.
@@ -536,15 +540,15 @@
         ]
 
 data InstanceStateChangeReason = InstanceStateChangeReason
-    { _iscrCode    :: Maybe Text
+    { _iscrCode    :: Maybe InstanceStateChangeReasonCode
     , _iscrMessage :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'InstanceStateChangeReason' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'iscrCode' @::@ 'Maybe' 'Text'
+-- * 'iscrCode' @::@ 'Maybe' 'InstanceStateChangeReasonCode'
 --
 -- * 'iscrMessage' @::@ 'Maybe' 'Text'
 --
@@ -555,7 +559,7 @@
     }
 
 -- | The programmable code for the state change reason.
-iscrCode :: Lens' InstanceStateChangeReason (Maybe Text)
+iscrCode :: Lens' InstanceStateChangeReason (Maybe InstanceStateChangeReasonCode)
 iscrCode = lens _iscrCode (\s a -> s { _iscrCode = a })
 
 -- | The status change reason description.
@@ -889,6 +893,10 @@
         Pending     -> "PENDING"
         Running     -> "RUNNING"
 
+instance ToByteString StepExecutionState
+instance ToHeader     StepExecutionState
+instance ToQuery      StepExecutionState
+
 instance FromJSON StepExecutionState where
     parseJSON = parseJSONText "StepExecutionState"
 
@@ -917,6 +925,10 @@
         AOFTerminateCluster -> "TERMINATE_CLUSTER"
         AOFTerminateJobFlow -> "TERMINATE_JOB_FLOW"
 
+instance ToByteString ActionOnFailure
+instance ToHeader     ActionOnFailure
+instance ToQuery      ActionOnFailure
+
 instance FromJSON ActionOnFailure where
     parseJSON = parseJSONText "ActionOnFailure"
 
@@ -924,15 +936,15 @@
     toJSON = toJSONText
 
 data ClusterStateChangeReason = ClusterStateChangeReason
-    { _cscrCode    :: Maybe Text
+    { _cscrCode    :: Maybe ClusterStateChangeReasonCode
     , _cscrMessage :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'ClusterStateChangeReason' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'cscrCode' @::@ 'Maybe' 'Text'
+-- * 'cscrCode' @::@ 'Maybe' 'ClusterStateChangeReasonCode'
 --
 -- * 'cscrMessage' @::@ 'Maybe' 'Text'
 --
@@ -943,7 +955,7 @@
     }
 
 -- | The programmatic code for the state change reason.
-cscrCode :: Lens' ClusterStateChangeReason (Maybe Text)
+cscrCode :: Lens' ClusterStateChangeReason (Maybe ClusterStateChangeReasonCode)
 cscrCode = lens _cscrCode (\s a -> s { _cscrCode = a })
 
 -- | The descriptive message for the state change reason.
@@ -1067,8 +1079,8 @@
     , _jfesdLastStateChangeReason :: Maybe Text
     , _jfesdReadyDateTime         :: Maybe RFC822
     , _jfesdStartDateTime         :: Maybe RFC822
-    , _jfesdState                 :: Text
-    } deriving (Eq, Ord, Show)
+    , _jfesdState                 :: JobFlowExecutionState
+    } deriving (Eq, Show)
 
 -- | 'JobFlowExecutionStatusDetail' constructor.
 --
@@ -1084,9 +1096,9 @@
 --
 -- * 'jfesdStartDateTime' @::@ 'Maybe' 'UTCTime'
 --
--- * 'jfesdState' @::@ 'Text'
+-- * 'jfesdState' @::@ 'JobFlowExecutionState'
 --
-jobFlowExecutionStatusDetail :: Text -- ^ 'jfesdState'
+jobFlowExecutionStatusDetail :: JobFlowExecutionState -- ^ 'jfesdState'
                              -> UTCTime -- ^ 'jfesdCreationDateTime'
                              -> JobFlowExecutionStatusDetail
 jobFlowExecutionStatusDetail p1 p2 = JobFlowExecutionStatusDetail
@@ -1128,7 +1140,7 @@
         . mapping _Time
 
 -- | The state of the job flow.
-jfesdState :: Lens' JobFlowExecutionStatusDetail Text
+jfesdState :: Lens' JobFlowExecutionStatusDetail JobFlowExecutionState
 jfesdState = lens _jfesdState (\s a -> s { _jfesdState = a })
 
 instance FromJSON JobFlowExecutionStatusDetail where
@@ -1151,7 +1163,7 @@
         ]
 
 data InstanceGroupStatus = InstanceGroupStatus
-    { _igsState             :: Maybe Text
+    { _igsState             :: Maybe InstanceGroupState
     , _igsStateChangeReason :: Maybe InstanceGroupStateChangeReason
     , _igsTimeline          :: Maybe InstanceGroupTimeline
     } deriving (Eq, Show)
@@ -1160,7 +1172,7 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'igsState' @::@ 'Maybe' 'Text'
+-- * 'igsState' @::@ 'Maybe' 'InstanceGroupState'
 --
 -- * 'igsStateChangeReason' @::@ 'Maybe' 'InstanceGroupStateChangeReason'
 --
@@ -1174,7 +1186,7 @@
     }
 
 -- | The current state of the instance group.
-igsState :: Lens' InstanceGroupStatus (Maybe Text)
+igsState :: Lens' InstanceGroupStatus (Maybe InstanceGroupState)
 igsState = lens _igsState (\s a -> s { _igsState = a })
 
 -- | The status change reason details for the instance group.
@@ -1493,6 +1505,10 @@
 instance ToText StepStateChangeReasonCode where
     toText None = "NONE"
 
+instance ToByteString StepStateChangeReasonCode
+instance ToHeader     StepStateChangeReasonCode
+instance ToQuery      StepStateChangeReasonCode
+
 instance FromJSON StepStateChangeReasonCode where
     parseJSON = parseJSONText "StepStateChangeReasonCode"
 
@@ -1530,6 +1546,10 @@
         CSTerminating          -> "TERMINATING"
         CSWaiting              -> "WAITING"
 
+instance ToByteString ClusterState
+instance ToHeader     ClusterState
+instance ToQuery      ClusterState
+
 instance FromJSON ClusterState where
     parseJSON = parseJSONText "ClusterState"
 
@@ -1631,6 +1651,10 @@
         JFESTerminated    -> "TERMINATED"
         JFESWaiting       -> "WAITING"
 
+instance ToByteString JobFlowExecutionState
+instance ToHeader     JobFlowExecutionState
+instance ToQuery      JobFlowExecutionState
+
 instance FromJSON JobFlowExecutionState where
     parseJSON = parseJSONText "JobFlowExecutionState"
 
@@ -1679,15 +1703,15 @@
         ]
 
 data InstanceGroupStateChangeReason = InstanceGroupStateChangeReason
-    { _igscrCode    :: Maybe Text
+    { _igscrCode    :: Maybe InstanceGroupStateChangeReasonCode
     , _igscrMessage :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'InstanceGroupStateChangeReason' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'igscrCode' @::@ 'Maybe' 'Text'
+-- * 'igscrCode' @::@ 'Maybe' 'InstanceGroupStateChangeReasonCode'
 --
 -- * 'igscrMessage' @::@ 'Maybe' 'Text'
 --
@@ -1698,7 +1722,7 @@
     }
 
 -- | The programmable code for the state change reason.
-igscrCode :: Lens' InstanceGroupStateChangeReason (Maybe Text)
+igscrCode :: Lens' InstanceGroupStateChangeReason (Maybe InstanceGroupStateChangeReasonCode)
 igscrCode = lens _igscrCode (\s a -> s { _igscrCode = a })
 
 -- | The status change reason description.
@@ -1735,6 +1759,10 @@
         Master -> "MASTER"
         Task   -> "TASK"
 
+instance ToByteString InstanceGroupType
+instance ToHeader     InstanceGroupType
+instance ToQuery      InstanceGroupType
+
 instance FromJSON InstanceGroupType where
     parseJSON = parseJSONText "InstanceGroupType"
 
@@ -1763,6 +1791,10 @@
         InternalError     -> "INTERNAL_ERROR"
         ValidationError   -> "VALIDATION_ERROR"
 
+instance ToByteString InstanceGroupStateChangeReasonCode
+instance ToHeader     InstanceGroupStateChangeReasonCode
+instance ToQuery      InstanceGroupStateChangeReasonCode
+
 instance FromJSON InstanceGroupStateChangeReasonCode where
     parseJSON = parseJSONText "InstanceGroupStateChangeReasonCode"
 
@@ -1770,7 +1802,7 @@
     toJSON = toJSONText
 
 data StepStatus = StepStatus
-    { _ssState             :: Maybe Text
+    { _ssState             :: Maybe StepState
     , _ssStateChangeReason :: Maybe StepStateChangeReason
     , _ssTimeline          :: Maybe StepTimeline
     } deriving (Eq, Show)
@@ -1779,7 +1811,7 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'ssState' @::@ 'Maybe' 'Text'
+-- * 'ssState' @::@ 'Maybe' 'StepState'
 --
 -- * 'ssStateChangeReason' @::@ 'Maybe' 'StepStateChangeReason'
 --
@@ -1793,7 +1825,7 @@
     }
 
 -- | The execution state of the cluster step.
-ssState :: Lens' StepStatus (Maybe Text)
+ssState :: Lens' StepStatus (Maybe StepState)
 ssState = lens _ssState (\s a -> s { _ssState = a })
 
 -- | The reason for the step execution status change.
@@ -1906,6 +1938,10 @@
         IGSTerminated    -> "TERMINATED"
         IGSTerminating   -> "TERMINATING"
 
+instance ToByteString InstanceGroupState
+instance ToHeader     InstanceGroupState
+instance ToQuery      InstanceGroupState
+
 instance FromJSON InstanceGroupState where
     parseJSON = parseJSONText "InstanceGroupState"
 
@@ -2116,16 +2152,16 @@
     , _igdEndDateTime           :: Maybe RFC822
     , _igdInstanceGroupId       :: Maybe Text
     , _igdInstanceRequestCount  :: Int
-    , _igdInstanceRole          :: Text
+    , _igdInstanceRole          :: InstanceRoleType
     , _igdInstanceRunningCount  :: Int
     , _igdInstanceType          :: Text
     , _igdLastStateChangeReason :: Maybe Text
-    , _igdMarket                :: Text
+    , _igdMarket                :: MarketType
     , _igdName                  :: Maybe Text
     , _igdReadyDateTime         :: Maybe RFC822
     , _igdStartDateTime         :: Maybe RFC822
-    , _igdState                 :: Text
-    } deriving (Eq, Ord, Show)
+    , _igdState                 :: InstanceGroupState
+    } deriving (Eq, Show)
 
 -- | 'InstanceGroupDetail' constructor.
 --
@@ -2141,7 +2177,7 @@
 --
 -- * 'igdInstanceRequestCount' @::@ 'Int'
 --
--- * 'igdInstanceRole' @::@ 'Text'
+-- * 'igdInstanceRole' @::@ 'InstanceRoleType'
 --
 -- * 'igdInstanceRunningCount' @::@ 'Int'
 --
@@ -2149,7 +2185,7 @@
 --
 -- * 'igdLastStateChangeReason' @::@ 'Maybe' 'Text'
 --
--- * 'igdMarket' @::@ 'Text'
+-- * 'igdMarket' @::@ 'MarketType'
 --
 -- * 'igdName' @::@ 'Maybe' 'Text'
 --
@@ -2157,14 +2193,14 @@
 --
 -- * 'igdStartDateTime' @::@ 'Maybe' 'UTCTime'
 --
--- * 'igdState' @::@ 'Text'
+-- * 'igdState' @::@ 'InstanceGroupState'
 --
-instanceGroupDetail :: Text -- ^ 'igdMarket'
-                    -> Text -- ^ 'igdInstanceRole'
+instanceGroupDetail :: MarketType -- ^ 'igdMarket'
+                    -> InstanceRoleType -- ^ 'igdInstanceRole'
                     -> Text -- ^ 'igdInstanceType'
                     -> Int -- ^ 'igdInstanceRequestCount'
                     -> Int -- ^ 'igdInstanceRunningCount'
-                    -> Text -- ^ 'igdState'
+                    -> InstanceGroupState -- ^ 'igdState'
                     -> UTCTime -- ^ 'igdCreationDateTime'
                     -> InstanceGroupDetail
 instanceGroupDetail p1 p2 p3 p4 p5 p6 p7 = InstanceGroupDetail
@@ -2210,7 +2246,7 @@
     lens _igdInstanceRequestCount (\s a -> s { _igdInstanceRequestCount = a })
 
 -- | Instance group role in the cluster.
-igdInstanceRole :: Lens' InstanceGroupDetail Text
+igdInstanceRole :: Lens' InstanceGroupDetail InstanceRoleType
 igdInstanceRole = lens _igdInstanceRole (\s a -> s { _igdInstanceRole = a })
 
 -- | Actual count of running instances.
@@ -2229,7 +2265,7 @@
         (\s a -> s { _igdLastStateChangeReason = a })
 
 -- | Market type of the Amazon EC2 instances used to create a cluster node.
-igdMarket :: Lens' InstanceGroupDetail Text
+igdMarket :: Lens' InstanceGroupDetail MarketType
 igdMarket = lens _igdMarket (\s a -> s { _igdMarket = a })
 
 -- | Friendly name for the instance group.
@@ -2246,7 +2282,7 @@
 
 -- | State of instance group. The following values are deprecated: STARTING,
 -- TERMINATED, and FAILED.
-igdState :: Lens' InstanceGroupDetail Text
+igdState :: Lens' InstanceGroupDetail InstanceGroupState
 igdState = lens _igdState (\s a -> s { _igdState = a })
 
 instance FromJSON InstanceGroupDetail where
@@ -2285,15 +2321,15 @@
         ]
 
 data StepStateChangeReason = StepStateChangeReason
-    { _sscrCode    :: Maybe Text
+    { _sscrCode    :: Maybe StepStateChangeReasonCode
     , _sscrMessage :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    } deriving (Eq, Show)
 
 -- | 'StepStateChangeReason' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'sscrCode' @::@ 'Maybe' 'Text'
+-- * 'sscrCode' @::@ 'Maybe' 'StepStateChangeReasonCode'
 --
 -- * 'sscrMessage' @::@ 'Maybe' 'Text'
 --
@@ -2304,7 +2340,7 @@
     }
 
 -- | The programmable code for the state change reason.
-sscrCode :: Lens' StepStateChangeReason (Maybe Text)
+sscrCode :: Lens' StepStateChangeReason (Maybe StepStateChangeReasonCode)
 sscrCode = lens _sscrCode (\s a -> s { _sscrCode = a })
 
 -- | The descriptive message for the state change reason.
@@ -2353,6 +2389,10 @@
         CSCRCUserRequest       -> "USER_REQUEST"
         CSCRCValidationError   -> "VALIDATION_ERROR"
 
+instance ToByteString ClusterStateChangeReasonCode
+instance ToHeader     ClusterStateChangeReasonCode
+instance ToQuery      ClusterStateChangeReasonCode
+
 instance FromJSON ClusterStateChangeReasonCode where
     parseJSON = parseJSONText "ClusterStateChangeReasonCode"
 
@@ -2360,7 +2400,7 @@
     toJSON = toJSONText
 
 data Step = Step
-    { _sActionOnFailure :: Maybe Text
+    { _sActionOnFailure :: Maybe ActionOnFailure
     , _sConfig          :: Maybe HadoopStepConfig
     , _sId              :: Maybe Text
     , _sName            :: Maybe Text
@@ -2371,7 +2411,7 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'sActionOnFailure' @::@ 'Maybe' 'Text'
+-- * 'sActionOnFailure' @::@ 'Maybe' 'ActionOnFailure'
 --
 -- * 'sConfig' @::@ 'Maybe' 'HadoopStepConfig'
 --
@@ -2392,7 +2432,7 @@
 
 -- | This specifies what action to take when the cluster step fails. Possible
 -- values are TERMINATE_CLUSTER, CANCEL_AND_WAIT, and CONTINUE.
-sActionOnFailure :: Lens' Step (Maybe Text)
+sActionOnFailure :: Lens' Step (Maybe ActionOnFailure)
 sActionOnFailure = lens _sActionOnFailure (\s a -> s { _sActionOnFailure = a })
 
 -- | The Hadoop job configuration of the cluster step.
@@ -2456,6 +2496,10 @@
         SSPending     -> "PENDING"
         SSRunning     -> "RUNNING"
 
+instance ToByteString StepState
+instance ToHeader     StepState
+instance ToQuery      StepState
+
 instance FromJSON StepState where
     parseJSON = parseJSONText "StepState"
 
@@ -2547,8 +2591,8 @@
     , _sesdEndDateTime           :: Maybe RFC822
     , _sesdLastStateChangeReason :: Maybe Text
     , _sesdStartDateTime         :: Maybe RFC822
-    , _sesdState                 :: Text
-    } deriving (Eq, Ord, Show)
+    , _sesdState                 :: StepExecutionState
+    } deriving (Eq, Show)
 
 -- | 'StepExecutionStatusDetail' constructor.
 --
@@ -2562,9 +2606,9 @@
 --
 -- * 'sesdStartDateTime' @::@ 'Maybe' 'UTCTime'
 --
--- * 'sesdState' @::@ 'Text'
+-- * 'sesdState' @::@ 'StepExecutionState'
 --
-stepExecutionStatusDetail :: Text -- ^ 'sesdState'
+stepExecutionStatusDetail :: StepExecutionState -- ^ 'sesdState'
                           -> UTCTime -- ^ 'sesdCreationDateTime'
                           -> StepExecutionStatusDetail
 stepExecutionStatusDetail p1 p2 = StepExecutionStatusDetail
@@ -2598,7 +2642,7 @@
         . mapping _Time
 
 -- | The state of the job flow step.
-sesdState :: Lens' StepExecutionStatusDetail Text
+sesdState :: Lens' StepExecutionStatusDetail StepExecutionState
 sesdState = lens _sesdState (\s a -> s { _sesdState = a })
 
 instance FromJSON StepExecutionStatusDetail where
@@ -2619,7 +2663,7 @@
         ]
 
 data InstanceStatus = InstanceStatus
-    { _isState             :: Maybe Text
+    { _isState             :: Maybe InstanceState
     , _isStateChangeReason :: Maybe InstanceStateChangeReason
     , _isTimeline          :: Maybe InstanceTimeline
     } deriving (Eq, Show)
@@ -2628,7 +2672,7 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'isState' @::@ 'Maybe' 'Text'
+-- * 'isState' @::@ 'Maybe' 'InstanceState'
 --
 -- * 'isStateChangeReason' @::@ 'Maybe' 'InstanceStateChangeReason'
 --
@@ -2642,7 +2686,7 @@
     }
 
 -- | The current state of the instance.
-isState :: Lens' InstanceStatus (Maybe Text)
+isState :: Lens' InstanceStatus (Maybe InstanceState)
 isState = lens _isState (\s a -> s { _isState = a })
 
 -- | The details of the status change reason for the instance.
@@ -2686,6 +2730,10 @@
         IRTMaster -> "MASTER"
         IRTTask   -> "TASK"
 
+instance ToByteString InstanceRoleType
+instance ToHeader     InstanceRoleType
+instance ToQuery      InstanceRoleType
+
 instance FromJSON InstanceRoleType where
     parseJSON = parseJSONText "InstanceRoleType"
 
@@ -2835,7 +2883,7 @@
         ]
 
 data StepConfig = StepConfig
-    { _scActionOnFailure :: Maybe Text
+    { _scActionOnFailure :: Maybe ActionOnFailure
     , _scHadoopJarStep   :: HadoopJarStepConfig
     , _scName            :: Text
     } deriving (Eq, Show)
@@ -2844,7 +2892,7 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'scActionOnFailure' @::@ 'Maybe' 'Text'
+-- * 'scActionOnFailure' @::@ 'Maybe' 'ActionOnFailure'
 --
 -- * 'scHadoopJarStep' @::@ 'HadoopJarStepConfig'
 --
@@ -2860,7 +2908,7 @@
     }
 
 -- | The action to take if the job flow step fails.
-scActionOnFailure :: Lens' StepConfig (Maybe Text)
+scActionOnFailure :: Lens' StepConfig (Maybe ActionOnFailure)
 scActionOnFailure =
     lens _scActionOnFailure (\s a -> s { _scActionOnFailure = a })
 
@@ -2888,9 +2936,9 @@
 data InstanceGroup = InstanceGroup
     { _igBidPrice               :: Maybe Text
     , _igId                     :: Maybe Text
-    , _igInstanceGroupType      :: Maybe Text
+    , _igInstanceGroupType      :: Maybe InstanceGroupType
     , _igInstanceType           :: Maybe Text
-    , _igMarket                 :: Maybe Text
+    , _igMarket                 :: Maybe MarketType
     , _igName                   :: Maybe Text
     , _igRequestedInstanceCount :: Maybe Int
     , _igRunningInstanceCount   :: Maybe Int
@@ -2905,11 +2953,11 @@
 --
 -- * 'igId' @::@ 'Maybe' 'Text'
 --
--- * 'igInstanceGroupType' @::@ 'Maybe' 'Text'
+-- * 'igInstanceGroupType' @::@ 'Maybe' 'InstanceGroupType'
 --
 -- * 'igInstanceType' @::@ 'Maybe' 'Text'
 --
--- * 'igMarket' @::@ 'Maybe' 'Text'
+-- * 'igMarket' @::@ 'Maybe' 'MarketType'
 --
 -- * 'igName' @::@ 'Maybe' 'Text'
 --
@@ -2942,7 +2990,7 @@
 igId = lens _igId (\s a -> s { _igId = a })
 
 -- | The type of the instance group. Valid values are MASTER, CORE or TASK.
-igInstanceGroupType :: Lens' InstanceGroup (Maybe Text)
+igInstanceGroupType :: Lens' InstanceGroup (Maybe InstanceGroupType)
 igInstanceGroupType =
     lens _igInstanceGroupType (\s a -> s { _igInstanceGroupType = a })
 
@@ -2952,7 +3000,7 @@
 
 -- | The marketplace to provision instances for this group. Valid values are
 -- ON_DEMAND or SPOT.
-igMarket :: Lens' InstanceGroup (Maybe Text)
+igMarket :: Lens' InstanceGroup (Maybe MarketType)
 igMarket = lens _igMarket (\s a -> s { _igMarket = a })
 
 -- | The name of the instance group.
@@ -3268,7 +3316,7 @@
         ]
 
 data ClusterStatus = ClusterStatus
-    { _csState             :: Maybe Text
+    { _csState             :: Maybe ClusterState
     , _csStateChangeReason :: Maybe ClusterStateChangeReason
     , _csTimeline          :: Maybe ClusterTimeline
     } deriving (Eq, Show)
@@ -3277,7 +3325,7 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'csState' @::@ 'Maybe' 'Text'
+-- * 'csState' @::@ 'Maybe' 'ClusterState'
 --
 -- * 'csStateChangeReason' @::@ 'Maybe' 'ClusterStateChangeReason'
 --
@@ -3291,7 +3339,7 @@
     }
 
 -- | The current state of the cluster.
-csState :: Lens' ClusterStatus (Maybe Text)
+csState :: Lens' ClusterStatus (Maybe ClusterState)
 csState = lens _csState (\s a -> s { _csState = a })
 
 -- | The reason for the cluster status change.
@@ -3342,6 +3390,10 @@
         ISRunning             -> "RUNNING"
         ISTerminated          -> "TERMINATED"
 
+instance ToByteString InstanceState
+instance ToHeader     InstanceState
+instance ToQuery      InstanceState
+
 instance FromJSON InstanceState where
     parseJSON = parseJSONText "InstanceState"
 
@@ -3422,6 +3474,10 @@
         ISCRCInstanceFailure   -> "INSTANCE_FAILURE"
         ISCRCInternalError     -> "INTERNAL_ERROR"
         ISCRCValidationError   -> "VALIDATION_ERROR"
+
+instance ToByteString InstanceStateChangeReasonCode
+instance ToHeader     InstanceStateChangeReasonCode
+instance ToQuery      InstanceStateChangeReasonCode
 
 instance FromJSON InstanceStateChangeReasonCode where
     parseJSON = parseJSONText "InstanceStateChangeReasonCode"
