diff --git a/amazonka-dynamodb.cabal b/amazonka-dynamodb.cabal
--- a/amazonka-dynamodb.cabal
+++ b/amazonka-dynamodb.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-dynamodb
-version:               0.0.0
+version:               0.0.1
 synopsis:              Amazon DynamoDB SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -57,5 +57,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/DynamoDB/BatchGetItem.hs b/gen/Network/AWS/DynamoDB/BatchGetItem.hs
--- a/gen/Network/AWS/DynamoDB/BatchGetItem.hs
+++ b/gen/Network/AWS/DynamoDB/BatchGetItem.hs
@@ -86,7 +86,7 @@
 
 data BatchGetItem = BatchGetItem
     { _bgiRequestItems           :: Map Text KeysAndAttributes
-    , _bgiReturnConsumedCapacity :: Maybe Text
+    , _bgiReturnConsumedCapacity :: Maybe ReturnConsumedCapacity
     } deriving (Eq, Show)
 
 -- | 'BatchGetItem' constructor.
@@ -95,7 +95,7 @@
 --
 -- * 'bgiRequestItems' @::@ 'HashMap' 'Text' 'KeysAndAttributes'
 --
--- * 'bgiReturnConsumedCapacity' @::@ 'Maybe' 'Text'
+-- * 'bgiReturnConsumedCapacity' @::@ 'Maybe' 'ReturnConsumedCapacity'
 --
 batchGetItem :: BatchGetItem
 batchGetItem = BatchGetItem
@@ -121,7 +121,7 @@
 bgiRequestItems :: Lens' BatchGetItem (HashMap Text KeysAndAttributes)
 bgiRequestItems = lens _bgiRequestItems (\s a -> s { _bgiRequestItems = a }) . _Map
 
-bgiReturnConsumedCapacity :: Lens' BatchGetItem (Maybe Text)
+bgiReturnConsumedCapacity :: Lens' BatchGetItem (Maybe ReturnConsumedCapacity)
 bgiReturnConsumedCapacity =
     lens _bgiReturnConsumedCapacity
         (\s a -> s { _bgiReturnConsumedCapacity = a })
diff --git a/gen/Network/AWS/DynamoDB/BatchWriteItem.hs b/gen/Network/AWS/DynamoDB/BatchWriteItem.hs
--- a/gen/Network/AWS/DynamoDB/BatchWriteItem.hs
+++ b/gen/Network/AWS/DynamoDB/BatchWriteItem.hs
@@ -99,8 +99,8 @@
 
 data BatchWriteItem = BatchWriteItem
     { _bwiRequestItems                :: Map Text (List1 "RequestItems" WriteRequest)
-    , _bwiReturnConsumedCapacity      :: Maybe Text
-    , _bwiReturnItemCollectionMetrics :: Maybe Text
+    , _bwiReturnConsumedCapacity      :: Maybe ReturnConsumedCapacity
+    , _bwiReturnItemCollectionMetrics :: Maybe ReturnItemCollectionMetrics
     } deriving (Eq, Show)
 
 -- | 'BatchWriteItem' constructor.
@@ -109,9 +109,9 @@
 --
 -- * 'bwiRequestItems' @::@ 'HashMap' 'Text' ('NonEmpty' 'WriteRequest')
 --
--- * 'bwiReturnConsumedCapacity' @::@ 'Maybe' 'Text'
+-- * 'bwiReturnConsumedCapacity' @::@ 'Maybe' 'ReturnConsumedCapacity'
 --
--- * 'bwiReturnItemCollectionMetrics' @::@ 'Maybe' 'Text'
+-- * 'bwiReturnItemCollectionMetrics' @::@ 'Maybe' 'ReturnItemCollectionMetrics'
 --
 batchWriteItem :: BatchWriteItem
 batchWriteItem = BatchWriteItem
@@ -143,7 +143,7 @@
 bwiRequestItems :: Lens' BatchWriteItem (HashMap Text (NonEmpty WriteRequest))
 bwiRequestItems = lens _bwiRequestItems (\s a -> s { _bwiRequestItems = a }) . _Map
 
-bwiReturnConsumedCapacity :: Lens' BatchWriteItem (Maybe Text)
+bwiReturnConsumedCapacity :: Lens' BatchWriteItem (Maybe ReturnConsumedCapacity)
 bwiReturnConsumedCapacity =
     lens _bwiReturnConsumedCapacity
         (\s a -> s { _bwiReturnConsumedCapacity = a })
@@ -152,7 +152,7 @@
 -- collections, if any, that were modified during the operation are returned
 -- in the response. If set to NONE (the default), no statistics are
 -- returned.
-bwiReturnItemCollectionMetrics :: Lens' BatchWriteItem (Maybe Text)
+bwiReturnItemCollectionMetrics :: Lens' BatchWriteItem (Maybe ReturnItemCollectionMetrics)
 bwiReturnItemCollectionMetrics =
     lens _bwiReturnItemCollectionMetrics
         (\s a -> s { _bwiReturnItemCollectionMetrics = a })
diff --git a/gen/Network/AWS/DynamoDB/DeleteItem.hs b/gen/Network/AWS/DynamoDB/DeleteItem.hs
--- a/gen/Network/AWS/DynamoDB/DeleteItem.hs
+++ b/gen/Network/AWS/DynamoDB/DeleteItem.hs
@@ -67,14 +67,14 @@
 
 data DeleteItem = DeleteItem
     { _diConditionExpression         :: Maybe Text
-    , _diConditionalOperator         :: Maybe Text
+    , _diConditionalOperator         :: Maybe ConditionalOperator
     , _diExpected                    :: Map Text ExpectedAttributeValue
     , _diExpressionAttributeNames    :: Map Text Text
     , _diExpressionAttributeValues   :: Map Text AttributeValue
     , _diKey                         :: Map Text AttributeValue
-    , _diReturnConsumedCapacity      :: Maybe Text
-    , _diReturnItemCollectionMetrics :: Maybe Text
-    , _diReturnValues                :: Maybe Text
+    , _diReturnConsumedCapacity      :: Maybe ReturnConsumedCapacity
+    , _diReturnItemCollectionMetrics :: Maybe ReturnItemCollectionMetrics
+    , _diReturnValues                :: Maybe ReturnValue
     , _diTableName                   :: Text
     } deriving (Eq, Show)
 
@@ -84,7 +84,7 @@
 --
 -- * 'diConditionExpression' @::@ 'Maybe' 'Text'
 --
--- * 'diConditionalOperator' @::@ 'Maybe' 'Text'
+-- * 'diConditionalOperator' @::@ 'Maybe' 'ConditionalOperator'
 --
 -- * 'diExpected' @::@ 'HashMap' 'Text' 'ExpectedAttributeValue'
 --
@@ -94,11 +94,11 @@
 --
 -- * 'diKey' @::@ 'HashMap' 'Text' 'AttributeValue'
 --
--- * 'diReturnConsumedCapacity' @::@ 'Maybe' 'Text'
+-- * 'diReturnConsumedCapacity' @::@ 'Maybe' 'ReturnConsumedCapacity'
 --
--- * 'diReturnItemCollectionMetrics' @::@ 'Maybe' 'Text'
+-- * 'diReturnItemCollectionMetrics' @::@ 'Maybe' 'ReturnItemCollectionMetrics'
 --
--- * 'diReturnValues' @::@ 'Maybe' 'Text'
+-- * 'diReturnValues' @::@ 'Maybe' 'ReturnValue'
 --
 -- * 'diTableName' @::@ 'Text'
 --
@@ -135,7 +135,7 @@
 -- one of the conditions evaluate to true, then the entire map evaluates to
 -- true. If you omit ConditionalOperator, then AND is the default. The
 -- operation will succeed only if the entire map evaluates to true.
-diConditionalOperator :: Lens' DeleteItem (Maybe Text)
+diConditionalOperator :: Lens' DeleteItem (Maybe ConditionalOperator)
 diConditionalOperator =
     lens _diConditionalOperator (\s a -> s { _diConditionalOperator = a })
 
@@ -305,7 +305,7 @@
 diKey :: Lens' DeleteItem (HashMap Text AttributeValue)
 diKey = lens _diKey (\s a -> s { _diKey = a }) . _Map
 
-diReturnConsumedCapacity :: Lens' DeleteItem (Maybe Text)
+diReturnConsumedCapacity :: Lens' DeleteItem (Maybe ReturnConsumedCapacity)
 diReturnConsumedCapacity =
     lens _diReturnConsumedCapacity
         (\s a -> s { _diReturnConsumedCapacity = a })
@@ -314,7 +314,7 @@
 -- collections, if any, that were modified during the operation are returned
 -- in the response. If set to NONE (the default), no statistics are
 -- returned.
-diReturnItemCollectionMetrics :: Lens' DeleteItem (Maybe Text)
+diReturnItemCollectionMetrics :: Lens' DeleteItem (Maybe ReturnItemCollectionMetrics)
 diReturnItemCollectionMetrics =
     lens _diReturnItemCollectionMetrics
         (\s a -> s { _diReturnItemCollectionMetrics = a })
@@ -324,7 +324,7 @@
 -- ReturnValues is not specified, or if its value is NONE, then nothing is
 -- returned. (This setting is the default for ReturnValues.) ALL_OLD - The
 -- content of the old item is returned.
-diReturnValues :: Lens' DeleteItem (Maybe Text)
+diReturnValues :: Lens' DeleteItem (Maybe ReturnValue)
 diReturnValues = lens _diReturnValues (\s a -> s { _diReturnValues = a })
 
 -- | The name of the table from which to delete the item.
diff --git a/gen/Network/AWS/DynamoDB/GetItem.hs b/gen/Network/AWS/DynamoDB/GetItem.hs
--- a/gen/Network/AWS/DynamoDB/GetItem.hs
+++ b/gen/Network/AWS/DynamoDB/GetItem.hs
@@ -63,7 +63,7 @@
     , _giExpressionAttributeNames :: Map Text Text
     , _giKey                      :: Map Text AttributeValue
     , _giProjectionExpression     :: Maybe Text
-    , _giReturnConsumedCapacity   :: Maybe Text
+    , _giReturnConsumedCapacity   :: Maybe ReturnConsumedCapacity
     , _giTableName                :: Text
     } deriving (Eq, Show)
 
@@ -81,7 +81,7 @@
 --
 -- * 'giProjectionExpression' @::@ 'Maybe' 'Text'
 --
--- * 'giReturnConsumedCapacity' @::@ 'Maybe' 'Text'
+-- * 'giReturnConsumedCapacity' @::@ 'Maybe' 'ReturnConsumedCapacity'
 --
 -- * 'giTableName' @::@ 'Text'
 --
@@ -155,7 +155,7 @@
 giProjectionExpression =
     lens _giProjectionExpression (\s a -> s { _giProjectionExpression = a })
 
-giReturnConsumedCapacity :: Lens' GetItem (Maybe Text)
+giReturnConsumedCapacity :: Lens' GetItem (Maybe ReturnConsumedCapacity)
 giReturnConsumedCapacity =
     lens _giReturnConsumedCapacity
         (\s a -> s { _giReturnConsumedCapacity = a })
diff --git a/gen/Network/AWS/DynamoDB/PutItem.hs b/gen/Network/AWS/DynamoDB/PutItem.hs
--- a/gen/Network/AWS/DynamoDB/PutItem.hs
+++ b/gen/Network/AWS/DynamoDB/PutItem.hs
@@ -73,14 +73,14 @@
 
 data PutItem = PutItem
     { _piConditionExpression         :: Maybe Text
-    , _piConditionalOperator         :: Maybe Text
+    , _piConditionalOperator         :: Maybe ConditionalOperator
     , _piExpected                    :: Map Text ExpectedAttributeValue
     , _piExpressionAttributeNames    :: Map Text Text
     , _piExpressionAttributeValues   :: Map Text AttributeValue
     , _piItem                        :: Map Text AttributeValue
-    , _piReturnConsumedCapacity      :: Maybe Text
-    , _piReturnItemCollectionMetrics :: Maybe Text
-    , _piReturnValues                :: Maybe Text
+    , _piReturnConsumedCapacity      :: Maybe ReturnConsumedCapacity
+    , _piReturnItemCollectionMetrics :: Maybe ReturnItemCollectionMetrics
+    , _piReturnValues                :: Maybe ReturnValue
     , _piTableName                   :: Text
     } deriving (Eq, Show)
 
@@ -90,7 +90,7 @@
 --
 -- * 'piConditionExpression' @::@ 'Maybe' 'Text'
 --
--- * 'piConditionalOperator' @::@ 'Maybe' 'Text'
+-- * 'piConditionalOperator' @::@ 'Maybe' 'ConditionalOperator'
 --
 -- * 'piExpected' @::@ 'HashMap' 'Text' 'ExpectedAttributeValue'
 --
@@ -100,11 +100,11 @@
 --
 -- * 'piItem' @::@ 'HashMap' 'Text' 'AttributeValue'
 --
--- * 'piReturnConsumedCapacity' @::@ 'Maybe' 'Text'
+-- * 'piReturnConsumedCapacity' @::@ 'Maybe' 'ReturnConsumedCapacity'
 --
--- * 'piReturnItemCollectionMetrics' @::@ 'Maybe' 'Text'
+-- * 'piReturnItemCollectionMetrics' @::@ 'Maybe' 'ReturnItemCollectionMetrics'
 --
--- * 'piReturnValues' @::@ 'Maybe' 'Text'
+-- * 'piReturnValues' @::@ 'Maybe' 'ReturnValue'
 --
 -- * 'piTableName' @::@ 'Text'
 --
@@ -141,7 +141,7 @@
 -- one of the conditions evaluate to true, then the entire map evaluates to
 -- true. If you omit ConditionalOperator, then AND is the default. The
 -- operation will succeed only if the entire map evaluates to true.
-piConditionalOperator :: Lens' PutItem (Maybe Text)
+piConditionalOperator :: Lens' PutItem (Maybe ConditionalOperator)
 piConditionalOperator =
     lens _piConditionalOperator (\s a -> s { _piConditionalOperator = a })
 
@@ -316,7 +316,7 @@
 piItem :: Lens' PutItem (HashMap Text AttributeValue)
 piItem = lens _piItem (\s a -> s { _piItem = a }) . _Map
 
-piReturnConsumedCapacity :: Lens' PutItem (Maybe Text)
+piReturnConsumedCapacity :: Lens' PutItem (Maybe ReturnConsumedCapacity)
 piReturnConsumedCapacity =
     lens _piReturnConsumedCapacity
         (\s a -> s { _piReturnConsumedCapacity = a })
@@ -325,7 +325,7 @@
 -- collections, if any, that were modified during the operation are returned
 -- in the response. If set to NONE (the default), no statistics are
 -- returned.
-piReturnItemCollectionMetrics :: Lens' PutItem (Maybe Text)
+piReturnItemCollectionMetrics :: Lens' PutItem (Maybe ReturnItemCollectionMetrics)
 piReturnItemCollectionMetrics =
     lens _piReturnItemCollectionMetrics
         (\s a -> s { _piReturnItemCollectionMetrics = a })
@@ -336,7 +336,7 @@
 -- NONE, then nothing is returned. (This setting is the default for
 -- ReturnValues.) ALL_OLD - If PutItem overwrote an attribute name-value
 -- pair, then the content of the old item is returned.
-piReturnValues :: Lens' PutItem (Maybe Text)
+piReturnValues :: Lens' PutItem (Maybe ReturnValue)
 piReturnValues = lens _piReturnValues (\s a -> s { _piReturnValues = a })
 
 -- | The name of the table to contain the item.
diff --git a/gen/Network/AWS/DynamoDB/Query.hs b/gen/Network/AWS/DynamoDB/Query.hs
--- a/gen/Network/AWS/DynamoDB/Query.hs
+++ b/gen/Network/AWS/DynamoDB/Query.hs
@@ -83,7 +83,7 @@
 
 data Query = Query
     { _qAttributesToGet           :: List1 "AttributesToGet" Text
-    , _qConditionalOperator       :: Maybe Text
+    , _qConditionalOperator       :: Maybe ConditionalOperator
     , _qConsistentRead            :: Maybe Bool
     , _qExclusiveStartKey         :: Map Text AttributeValue
     , _qExpressionAttributeNames  :: Map Text Text
@@ -94,9 +94,9 @@
     , _qLimit                     :: Maybe Nat
     , _qProjectionExpression      :: Maybe Text
     , _qQueryFilter               :: Map Text Condition
-    , _qReturnConsumedCapacity    :: Maybe Text
+    , _qReturnConsumedCapacity    :: Maybe ReturnConsumedCapacity
     , _qScanIndexForward          :: Maybe Bool
-    , _qSelect                    :: Maybe Text
+    , _qSelect                    :: Maybe Select
     , _qTableName                 :: Text
     } deriving (Eq, Show)
 
@@ -106,7 +106,7 @@
 --
 -- * 'qAttributesToGet' @::@ 'NonEmpty' 'Text'
 --
--- * 'qConditionalOperator' @::@ 'Maybe' 'Text'
+-- * 'qConditionalOperator' @::@ 'Maybe' 'ConditionalOperator'
 --
 -- * 'qConsistentRead' @::@ 'Maybe' 'Bool'
 --
@@ -128,11 +128,11 @@
 --
 -- * 'qQueryFilter' @::@ 'HashMap' 'Text' 'Condition'
 --
--- * 'qReturnConsumedCapacity' @::@ 'Maybe' 'Text'
+-- * 'qReturnConsumedCapacity' @::@ 'Maybe' 'ReturnConsumedCapacity'
 --
 -- * 'qScanIndexForward' @::@ 'Maybe' 'Bool'
 --
--- * 'qSelect' @::@ 'Maybe' 'Text'
+-- * 'qSelect' @::@ 'Maybe' 'Select'
 --
 -- * 'qTableName' @::@ 'Text'
 --
@@ -192,7 +192,7 @@
 -- one of the conditions evaluate to true, then the entire map evaluates to
 -- true. If you omit ConditionalOperator, then AND is the default. The
 -- operation will succeed only if the entire map evaluates to true.
-qConditionalOperator :: Lens' Query (Maybe Text)
+qConditionalOperator :: Lens' Query (Maybe ConditionalOperator)
 qConditionalOperator =
     lens _qConditionalOperator (\s a -> s { _qConditionalOperator = a })
 
@@ -374,7 +374,7 @@
 qQueryFilter :: Lens' Query (HashMap Text Condition)
 qQueryFilter = lens _qQueryFilter (\s a -> s { _qQueryFilter = a }) . _Map
 
-qReturnConsumedCapacity :: Lens' Query (Maybe Text)
+qReturnConsumedCapacity :: Lens' Query (Maybe ReturnConsumedCapacity)
 qReturnConsumedCapacity =
     lens _qReturnConsumedCapacity (\s a -> s { _qReturnConsumedCapacity = a })
 
@@ -420,7 +420,7 @@
 -- single request, unless the value for Select is SPECIFIC_ATTRIBUTES. (This
 -- usage is equivalent to specifying AttributesToGet without any value for
 -- Select.).
-qSelect :: Lens' Query (Maybe Text)
+qSelect :: Lens' Query (Maybe Select)
 qSelect = lens _qSelect (\s a -> s { _qSelect = a })
 
 -- | The name of the table containing the requested items.
diff --git a/gen/Network/AWS/DynamoDB/Scan.hs b/gen/Network/AWS/DynamoDB/Scan.hs
--- a/gen/Network/AWS/DynamoDB/Scan.hs
+++ b/gen/Network/AWS/DynamoDB/Scan.hs
@@ -75,17 +75,17 @@
 
 data Scan = Scan
     { _sAttributesToGet           :: List1 "AttributesToGet" Text
-    , _sConditionalOperator       :: Maybe Text
+    , _sConditionalOperator       :: Maybe ConditionalOperator
     , _sExclusiveStartKey         :: Map Text AttributeValue
     , _sExpressionAttributeNames  :: Map Text Text
     , _sExpressionAttributeValues :: Map Text AttributeValue
     , _sFilterExpression          :: Maybe Text
     , _sLimit                     :: Maybe Nat
     , _sProjectionExpression      :: Maybe Text
-    , _sReturnConsumedCapacity    :: Maybe Text
+    , _sReturnConsumedCapacity    :: Maybe ReturnConsumedCapacity
     , _sScanFilter                :: Map Text Condition
     , _sSegment                   :: Maybe Nat
-    , _sSelect                    :: Maybe Text
+    , _sSelect                    :: Maybe Select
     , _sTableName                 :: Text
     , _sTotalSegments             :: Maybe Nat
     } deriving (Eq, Show)
@@ -96,7 +96,7 @@
 --
 -- * 'sAttributesToGet' @::@ 'NonEmpty' 'Text'
 --
--- * 'sConditionalOperator' @::@ 'Maybe' 'Text'
+-- * 'sConditionalOperator' @::@ 'Maybe' 'ConditionalOperator'
 --
 -- * 'sExclusiveStartKey' @::@ 'HashMap' 'Text' 'AttributeValue'
 --
@@ -110,13 +110,13 @@
 --
 -- * 'sProjectionExpression' @::@ 'Maybe' 'Text'
 --
--- * 'sReturnConsumedCapacity' @::@ 'Maybe' 'Text'
+-- * 'sReturnConsumedCapacity' @::@ 'Maybe' 'ReturnConsumedCapacity'
 --
 -- * 'sScanFilter' @::@ 'HashMap' 'Text' 'Condition'
 --
 -- * 'sSegment' @::@ 'Maybe' 'Natural'
 --
--- * 'sSelect' @::@ 'Maybe' 'Text'
+-- * 'sSelect' @::@ 'Maybe' 'Select'
 --
 -- * 'sTableName' @::@ 'Text'
 --
@@ -165,7 +165,7 @@
 -- one of the conditions evaluate to true, then the entire map evaluates to
 -- true. If you omit ConditionalOperator, then AND is the default. The
 -- operation will succeed only if the entire map evaluates to true.
-sConditionalOperator :: Lens' Scan (Maybe Text)
+sConditionalOperator :: Lens' Scan (Maybe ConditionalOperator)
 sConditionalOperator =
     lens _sConditionalOperator (\s a -> s { _sConditionalOperator = a })
 
@@ -240,7 +240,7 @@
 sProjectionExpression =
     lens _sProjectionExpression (\s a -> s { _sProjectionExpression = a })
 
-sReturnConsumedCapacity :: Lens' Scan (Maybe Text)
+sReturnConsumedCapacity :: Lens' Scan (Maybe ReturnConsumedCapacity)
 sReturnConsumedCapacity =
     lens _sReturnConsumedCapacity (\s a -> s { _sReturnConsumedCapacity = a })
 
@@ -299,7 +299,7 @@
 -- in a single request, unless the value for Select is SPECIFIC_ATTRIBUTES.
 -- (This usage is equivalent to specifying AttributesToGet without any value
 -- for Select.).
-sSelect :: Lens' Scan (Maybe Text)
+sSelect :: Lens' Scan (Maybe Select)
 sSelect = lens _sSelect (\s a -> s { _sSelect = a })
 
 -- | The name of the table containing the requested items.
diff --git a/gen/Network/AWS/DynamoDB/Types.hs b/gen/Network/AWS/DynamoDB/Types.hs
--- a/gen/Network/AWS/DynamoDB/Types.hs
+++ b/gen/Network/AWS/DynamoDB/Types.hs
@@ -402,6 +402,10 @@
         Hash  -> "HASH"
         Range -> "RANGE"
 
+instance ToByteString KeyType
+instance ToHeader     KeyType
+instance ToQuery      KeyType
+
 instance FromJSON KeyType where
     parseJSON = parseJSONText "KeyType"
 
@@ -548,6 +552,10 @@
         Deleting -> "DELETING"
         Updating -> "UPDATING"
 
+instance ToByteString IndexStatus
+instance ToHeader     IndexStatus
+instance ToQuery      IndexStatus
+
 instance FromJSON IndexStatus where
     parseJSON = parseJSONText "IndexStatus"
 
@@ -625,6 +633,10 @@
         TSDeleting -> "DELETING"
         TSUpdating -> "UPDATING"
 
+instance ToByteString TableStatus
+instance ToHeader     TableStatus
+instance ToQuery      TableStatus
+
 instance FromJSON TableStatus where
     parseJSON = parseJSONText "TableStatus"
 
@@ -650,6 +662,10 @@
         Include  -> "INCLUDE"
         KeysOnly -> "KEYS_ONLY"
 
+instance ToByteString ProjectionType
+instance ToHeader     ProjectionType
+instance ToQuery      ProjectionType
+
 instance FromJSON ProjectionType where
     parseJSON = parseJSONText "ProjectionType"
 
@@ -666,7 +682,7 @@
     , _tdProvisionedThroughput  :: Maybe ProvisionedThroughputDescription
     , _tdTableName              :: Maybe Text
     , _tdTableSizeBytes         :: Maybe Integer
-    , _tdTableStatus            :: Maybe Text
+    , _tdTableStatus            :: Maybe TableStatus
     } deriving (Eq, Show)
 
 -- | 'TableDescription' constructor.
@@ -691,7 +707,7 @@
 --
 -- * 'tdTableSizeBytes' @::@ 'Maybe' 'Integer'
 --
--- * 'tdTableStatus' @::@ 'Maybe' 'Text'
+-- * 'tdTableStatus' @::@ 'Maybe' 'TableStatus'
 --
 tableDescription :: NonEmpty KeySchemaElement -- ^ 'tdKeySchema'
                  -> TableDescription
@@ -828,7 +844,7 @@
 -- updated, as the result of an UpdateTable operation. DELETING - The table
 -- is being deleted, as the result of a DeleteTable operation. ACTIVE - The
 -- table is ready for use.
-tdTableStatus :: Lens' TableDescription (Maybe Text)
+tdTableStatus :: Lens' TableDescription (Maybe TableStatus)
 tdTableStatus = lens _tdTableStatus (\s a -> s { _tdTableStatus = a })
 
 instance FromJSON TableDescription where
@@ -975,6 +991,10 @@
         None    -> "NONE"
         Total   -> "TOTAL"
 
+instance ToByteString ReturnConsumedCapacity
+instance ToHeader     ReturnConsumedCapacity
+instance ToQuery      ReturnConsumedCapacity
+
 instance FromJSON ReturnConsumedCapacity where
     parseJSON = parseJSONText "ReturnConsumedCapacity"
 
@@ -997,6 +1017,10 @@
         RICMNone -> "NONE"
         RICMSize -> "SIZE"
 
+instance ToByteString ReturnItemCollectionMetrics
+instance ToHeader     ReturnItemCollectionMetrics
+instance ToQuery      ReturnItemCollectionMetrics
+
 instance FromJSON ReturnItemCollectionMetrics where
     parseJSON = parseJSONText "ReturnItemCollectionMetrics"
 
@@ -1004,7 +1028,7 @@
     toJSON = toJSONText
 
 data AttributeValueUpdate = AttributeValueUpdate
-    { _avuAction :: Maybe Text
+    { _avuAction :: Maybe AttributeAction
     , _avuValue  :: Maybe AttributeValue
     } deriving (Eq, Show)
 
@@ -1012,7 +1036,7 @@
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'avuAction' @::@ 'Maybe' 'Text'
+-- * 'avuAction' @::@ 'Maybe' 'AttributeAction'
 --
 -- * 'avuValue' @::@ 'Maybe' 'AttributeValue'
 --
@@ -1056,7 +1080,7 @@
 -- with the supplied primary key and number (or set of numbers) for the
 -- attribute value. The only data types allowed are number and number set;
 -- no other data types can be specified.
-avuAction :: Lens' AttributeValueUpdate (Maybe Text)
+avuAction :: Lens' AttributeValueUpdate (Maybe AttributeAction)
 avuAction = lens _avuAction (\s a -> s { _avuAction = a })
 
 avuValue :: Lens' AttributeValueUpdate (Maybe AttributeValue)
@@ -1075,7 +1099,7 @@
 
 data ExpectedAttributeValue = ExpectedAttributeValue
     { _eavAttributeValueList :: List "AttributeValueList" AttributeValue
-    , _eavComparisonOperator :: Maybe Text
+    , _eavComparisonOperator :: Maybe ComparisonOperator
     , _eavExists             :: Maybe Bool
     , _eavValue              :: Maybe AttributeValue
     } deriving (Eq, Show)
@@ -1086,7 +1110,7 @@
 --
 -- * 'eavAttributeValueList' @::@ ['AttributeValue']
 --
--- * 'eavComparisonOperator' @::@ 'Maybe' 'Text'
+-- * 'eavComparisonOperator' @::@ 'Maybe' 'ComparisonOperator'
 --
 -- * 'eavExists' @::@ 'Maybe' 'Bool'
 --
@@ -1196,7 +1220,7 @@
 -- a different type than the one specified in the request, the value does
 -- not match. For example, {"S":"6"} does not compare to {"N":"6"}. Also,
 -- {"N":"6"} does not compare to {"NS":["6", "2", "1"]}.
-eavComparisonOperator :: Lens' ExpectedAttributeValue (Maybe Text)
+eavComparisonOperator :: Lens' ExpectedAttributeValue (Maybe ComparisonOperator)
 eavComparisonOperator =
     lens _eavComparisonOperator (\s a -> s { _eavComparisonOperator = a })
 
@@ -1239,8 +1263,8 @@
 
 data AttributeDefinition = AttributeDefinition
     { _adAttributeName :: Text
-    , _adAttributeType :: Text
-    } deriving (Eq, Ord, Show)
+    , _adAttributeType :: ScalarAttributeType
+    } deriving (Eq, Show)
 
 -- | 'AttributeDefinition' constructor.
 --
@@ -1248,10 +1272,10 @@
 --
 -- * 'adAttributeName' @::@ 'Text'
 --
--- * 'adAttributeType' @::@ 'Text'
+-- * 'adAttributeType' @::@ 'ScalarAttributeType'
 --
 attributeDefinition :: Text -- ^ 'adAttributeName'
-                    -> Text -- ^ 'adAttributeType'
+                    -> ScalarAttributeType -- ^ 'adAttributeType'
                     -> AttributeDefinition
 attributeDefinition p1 p2 = AttributeDefinition
     { _adAttributeName = p1
@@ -1263,7 +1287,7 @@
 adAttributeName = lens _adAttributeName (\s a -> s { _adAttributeName = a })
 
 -- | The data type for the attribute.
-adAttributeType :: Lens' AttributeDefinition Text
+adAttributeType :: Lens' AttributeDefinition ScalarAttributeType
 adAttributeType = lens _adAttributeType (\s a -> s { _adAttributeType = a })
 
 instance FromJSON AttributeDefinition where
@@ -1326,6 +1350,10 @@
         NotNull     -> "NOT_NULL"
         Null        -> "NULL"
 
+instance ToByteString ComparisonOperator
+instance ToHeader     ComparisonOperator
+instance ToQuery      ComparisonOperator
+
 instance FromJSON ComparisonOperator where
     parseJSON = parseJSONText "ComparisonOperator"
 
@@ -1357,6 +1385,10 @@
         RVUpdatedNew -> "UPDATED_NEW"
         RVUpdatedOld -> "UPDATED_OLD"
 
+instance ToByteString ReturnValue
+instance ToHeader     ReturnValue
+instance ToQuery      ReturnValue
+
 instance FromJSON ReturnValue where
     parseJSON = parseJSONText "ReturnValue"
 
@@ -1418,7 +1450,7 @@
 data GlobalSecondaryIndexDescription = GlobalSecondaryIndexDescription
     { _gsidIndexName             :: Maybe Text
     , _gsidIndexSizeBytes        :: Maybe Integer
-    , _gsidIndexStatus           :: Maybe Text
+    , _gsidIndexStatus           :: Maybe IndexStatus
     , _gsidItemCount             :: Maybe Integer
     , _gsidKeySchema             :: List1 "KeySchema" KeySchemaElement
     , _gsidProjection            :: Maybe Projection
@@ -1433,7 +1465,7 @@
 --
 -- * 'gsidIndexSizeBytes' @::@ 'Maybe' 'Integer'
 --
--- * 'gsidIndexStatus' @::@ 'Maybe' 'Text'
+-- * 'gsidIndexStatus' @::@ 'Maybe' 'IndexStatus'
 --
 -- * 'gsidItemCount' @::@ 'Maybe' 'Integer'
 --
@@ -1471,7 +1503,7 @@
 -- UPDATING - The index is being updated, as the result of a CreateTable or
 -- UpdateTable operation. DELETING - The index is being deleted, as the
 -- result of a DeleteTable operation. ACTIVE - The index is ready for use.
-gsidIndexStatus :: Lens' GlobalSecondaryIndexDescription (Maybe Text)
+gsidIndexStatus :: Lens' GlobalSecondaryIndexDescription (Maybe IndexStatus)
 gsidIndexStatus = lens _gsidIndexStatus (\s a -> s { _gsidIndexStatus = a })
 
 -- | The number of items in the specified index. DynamoDB updates this value
@@ -1824,6 +1856,10 @@
         Delete' -> "DELETE"
         Put     -> "PUT"
 
+instance ToByteString AttributeAction
+instance ToHeader     AttributeAction
+instance ToQuery      AttributeAction
+
 instance FromJSON AttributeAction where
     parseJSON = parseJSONText "AttributeAction"
 
@@ -1849,6 +1885,10 @@
         N -> "N"
         S -> "S"
 
+instance ToByteString ScalarAttributeType
+instance ToHeader     ScalarAttributeType
+instance ToQuery      ScalarAttributeType
+
 instance FromJSON ScalarAttributeType where
     parseJSON = parseJSONText "ScalarAttributeType"
 
@@ -1857,8 +1897,8 @@
 
 data Projection = Projection
     { _pNonKeyAttributes :: List1 "NonKeyAttributes" Text
-    , _pProjectionType   :: Maybe Text
-    } deriving (Eq, Ord, Show)
+    , _pProjectionType   :: Maybe ProjectionType
+    } deriving (Eq, Show)
 
 -- | 'Projection' constructor.
 --
@@ -1866,7 +1906,7 @@
 --
 -- * 'pNonKeyAttributes' @::@ 'NonEmpty' 'Text'
 --
--- * 'pProjectionType' @::@ 'Maybe' 'Text'
+-- * 'pProjectionType' @::@ 'Maybe' 'ProjectionType'
 --
 projection :: NonEmpty Text -- ^ 'pNonKeyAttributes'
            -> Projection
@@ -1890,7 +1930,7 @@
 -- the specified table attributes are projected into the index. The list of
 -- projected attributes are in NonKeyAttributes. ALL - All of the table
 -- attributes are projected into the index.
-pProjectionType :: Lens' Projection (Maybe Text)
+pProjectionType :: Lens' Projection (Maybe ProjectionType)
 pProjectionType = lens _pProjectionType (\s a -> s { _pProjectionType = a })
 
 instance FromJSON Projection where
@@ -1926,6 +1966,10 @@
         Count                  -> "COUNT"
         SpecificAttributes     -> "SPECIFIC_ATTRIBUTES"
 
+instance ToByteString Select
+instance ToHeader     Select
+instance ToQuery      Select
+
 instance FromJSON Select where
     parseJSON = parseJSONText "Select"
 
@@ -1934,8 +1978,8 @@
 
 data KeySchemaElement = KeySchemaElement
     { _kseAttributeName :: Text
-    , _kseKeyType       :: Text
-    } deriving (Eq, Ord, Show)
+    , _kseKeyType       :: KeyType
+    } deriving (Eq, Show)
 
 -- | 'KeySchemaElement' constructor.
 --
@@ -1943,10 +1987,10 @@
 --
 -- * 'kseAttributeName' @::@ 'Text'
 --
--- * 'kseKeyType' @::@ 'Text'
+-- * 'kseKeyType' @::@ 'KeyType'
 --
 keySchemaElement :: Text -- ^ 'kseAttributeName'
-                 -> Text -- ^ 'kseKeyType'
+                 -> KeyType -- ^ 'kseKeyType'
                  -> KeySchemaElement
 keySchemaElement p1 p2 = KeySchemaElement
     { _kseAttributeName = p1
@@ -1959,7 +2003,7 @@
 
 -- | The attribute data, consisting of the data type and the attribute value
 -- itself.
-kseKeyType :: Lens' KeySchemaElement Text
+kseKeyType :: Lens' KeySchemaElement KeyType
 kseKeyType = lens _kseKeyType (\s a -> s { _kseKeyType = a })
 
 instance FromJSON KeySchemaElement where
@@ -2080,7 +2124,7 @@
 
 data Condition = Condition
     { _cAttributeValueList :: List "AttributeValueList" AttributeValue
-    , _cComparisonOperator :: Text
+    , _cComparisonOperator :: ComparisonOperator
     } deriving (Eq, Show)
 
 -- | 'Condition' constructor.
@@ -2089,9 +2133,9 @@
 --
 -- * 'cAttributeValueList' @::@ ['AttributeValue']
 --
--- * 'cComparisonOperator' @::@ 'Text'
+-- * 'cComparisonOperator' @::@ 'ComparisonOperator'
 --
-condition :: Text -- ^ 'cComparisonOperator'
+condition :: ComparisonOperator -- ^ 'cComparisonOperator'
           -> Condition
 condition p1 = Condition
     { _cComparisonOperator = p1
@@ -2194,7 +2238,7 @@
 -- to {"NS":["6", "2", "1"]} For usage examples of AttributeValueList and
 -- ComparisonOperator, see Legacy Conditional Parameters in the Amazon
 -- DynamoDB Developer Guide.
-cComparisonOperator :: Lens' Condition Text
+cComparisonOperator :: Lens' Condition ComparisonOperator
 cComparisonOperator =
     lens _cComparisonOperator (\s a -> s { _cComparisonOperator = a })
 
@@ -2224,6 +2268,10 @@
     toText = \case
         And -> "AND"
         Or  -> "OR"
+
+instance ToByteString ConditionalOperator
+instance ToHeader     ConditionalOperator
+instance ToQuery      ConditionalOperator
 
 instance FromJSON ConditionalOperator where
     parseJSON = parseJSONText "ConditionalOperator"
diff --git a/gen/Network/AWS/DynamoDB/UpdateItem.hs b/gen/Network/AWS/DynamoDB/UpdateItem.hs
--- a/gen/Network/AWS/DynamoDB/UpdateItem.hs
+++ b/gen/Network/AWS/DynamoDB/UpdateItem.hs
@@ -67,14 +67,14 @@
 data UpdateItem = UpdateItem
     { _uiAttributeUpdates            :: Map Text AttributeValueUpdate
     , _uiConditionExpression         :: Maybe Text
-    , _uiConditionalOperator         :: Maybe Text
+    , _uiConditionalOperator         :: Maybe ConditionalOperator
     , _uiExpected                    :: Map Text ExpectedAttributeValue
     , _uiExpressionAttributeNames    :: Map Text Text
     , _uiExpressionAttributeValues   :: Map Text AttributeValue
     , _uiKey                         :: Map Text AttributeValue
-    , _uiReturnConsumedCapacity      :: Maybe Text
-    , _uiReturnItemCollectionMetrics :: Maybe Text
-    , _uiReturnValues                :: Maybe Text
+    , _uiReturnConsumedCapacity      :: Maybe ReturnConsumedCapacity
+    , _uiReturnItemCollectionMetrics :: Maybe ReturnItemCollectionMetrics
+    , _uiReturnValues                :: Maybe ReturnValue
     , _uiTableName                   :: Text
     , _uiUpdateExpression            :: Maybe Text
     } deriving (Eq, Show)
@@ -87,7 +87,7 @@
 --
 -- * 'uiConditionExpression' @::@ 'Maybe' 'Text'
 --
--- * 'uiConditionalOperator' @::@ 'Maybe' 'Text'
+-- * 'uiConditionalOperator' @::@ 'Maybe' 'ConditionalOperator'
 --
 -- * 'uiExpected' @::@ 'HashMap' 'Text' 'ExpectedAttributeValue'
 --
@@ -97,11 +97,11 @@
 --
 -- * 'uiKey' @::@ 'HashMap' 'Text' 'AttributeValue'
 --
--- * 'uiReturnConsumedCapacity' @::@ 'Maybe' 'Text'
+-- * 'uiReturnConsumedCapacity' @::@ 'Maybe' 'ReturnConsumedCapacity'
 --
--- * 'uiReturnItemCollectionMetrics' @::@ 'Maybe' 'Text'
+-- * 'uiReturnItemCollectionMetrics' @::@ 'Maybe' 'ReturnItemCollectionMetrics'
 --
--- * 'uiReturnValues' @::@ 'Maybe' 'Text'
+-- * 'uiReturnValues' @::@ 'Maybe' 'ReturnValue'
 --
 -- * 'uiTableName' @::@ 'Text'
 --
@@ -195,7 +195,7 @@
 -- one of the conditions evaluate to true, then the entire map evaluates to
 -- true. If you omit ConditionalOperator, then AND is the default. The
 -- operation will succeed only if the entire map evaluates to true.
-uiConditionalOperator :: Lens' UpdateItem (Maybe Text)
+uiConditionalOperator :: Lens' UpdateItem (Maybe ConditionalOperator)
 uiConditionalOperator =
     lens _uiConditionalOperator (\s a -> s { _uiConditionalOperator = a })
 
@@ -365,7 +365,7 @@
 uiKey :: Lens' UpdateItem (HashMap Text AttributeValue)
 uiKey = lens _uiKey (\s a -> s { _uiKey = a }) . _Map
 
-uiReturnConsumedCapacity :: Lens' UpdateItem (Maybe Text)
+uiReturnConsumedCapacity :: Lens' UpdateItem (Maybe ReturnConsumedCapacity)
 uiReturnConsumedCapacity =
     lens _uiReturnConsumedCapacity
         (\s a -> s { _uiReturnConsumedCapacity = a })
@@ -374,7 +374,7 @@
 -- collections, if any, that were modified during the operation are returned
 -- in the response. If set to NONE (the default), no statistics are
 -- returned.
-uiReturnItemCollectionMetrics :: Lens' UpdateItem (Maybe Text)
+uiReturnItemCollectionMetrics :: Lens' UpdateItem (Maybe ReturnItemCollectionMetrics)
 uiReturnItemCollectionMetrics =
     lens _uiReturnItemCollectionMetrics
         (\s a -> s { _uiReturnItemCollectionMetrics = a })
@@ -388,7 +388,7 @@
 -- versions of only the updated attributes are returned. ALL_NEW - All of
 -- the attributes of the new version of the item are returned. UPDATED_NEW -
 -- The new versions of only the updated attributes are returned.
-uiReturnValues :: Lens' UpdateItem (Maybe Text)
+uiReturnValues :: Lens' UpdateItem (Maybe ReturnValue)
 uiReturnValues = lens _uiReturnValues (\s a -> s { _uiReturnValues = a })
 
 -- | The name of the table containing the item to update.
