diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier.hs b/gen/Stratosphere/Comprehend/DocumentClassifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier.hs
@@ -0,0 +1,144 @@
+module Stratosphere.Comprehend.DocumentClassifier (
+        module Exports, DocumentClassifier(..), mkDocumentClassifier
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierInputDataConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierOutputDataConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.Comprehend.DocumentClassifier.VpcConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data DocumentClassifier
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html>
+    DocumentClassifier {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-dataaccessrolearn>
+                        dataAccessRoleArn :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-documentclassifiername>
+                        documentClassifierName :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-inputdataconfig>
+                        inputDataConfig :: DocumentClassifierInputDataConfigProperty,
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-languagecode>
+                        languageCode :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-mode>
+                        mode :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-modelkmskeyid>
+                        modelKmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-modelpolicy>
+                        modelPolicy :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-outputdataconfig>
+                        outputDataConfig :: (Prelude.Maybe DocumentClassifierOutputDataConfigProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-tags>
+                        tags :: (Prelude.Maybe [Tag]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-versionname>
+                        versionName :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-volumekmskeyid>
+                        volumeKmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-documentclassifier.html#cfn-comprehend-documentclassifier-vpcconfig>
+                        vpcConfig :: (Prelude.Maybe VpcConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDocumentClassifier ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> DocumentClassifierInputDataConfigProperty
+        -> Value Prelude.Text -> DocumentClassifier
+mkDocumentClassifier
+  dataAccessRoleArn
+  documentClassifierName
+  inputDataConfig
+  languageCode
+  = DocumentClassifier
+      {haddock_workaround_ = (), dataAccessRoleArn = dataAccessRoleArn,
+       documentClassifierName = documentClassifierName,
+       inputDataConfig = inputDataConfig, languageCode = languageCode,
+       mode = Prelude.Nothing, modelKmsKeyId = Prelude.Nothing,
+       modelPolicy = Prelude.Nothing, outputDataConfig = Prelude.Nothing,
+       tags = Prelude.Nothing, versionName = Prelude.Nothing,
+       volumeKmsKeyId = Prelude.Nothing, vpcConfig = Prelude.Nothing}
+instance ToResourceProperties DocumentClassifier where
+  toResourceProperties DocumentClassifier {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::DocumentClassifier",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DataAccessRoleArn" JSON..= dataAccessRoleArn,
+                            "DocumentClassifierName" JSON..= documentClassifierName,
+                            "InputDataConfig" JSON..= inputDataConfig,
+                            "LanguageCode" JSON..= languageCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Mode" Prelude.<$> mode,
+                               (JSON..=) "ModelKmsKeyId" Prelude.<$> modelKmsKeyId,
+                               (JSON..=) "ModelPolicy" Prelude.<$> modelPolicy,
+                               (JSON..=) "OutputDataConfig" Prelude.<$> outputDataConfig,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "VersionName" Prelude.<$> versionName,
+                               (JSON..=) "VolumeKmsKeyId" Prelude.<$> volumeKmsKeyId,
+                               (JSON..=) "VpcConfig" Prelude.<$> vpcConfig]))}
+instance JSON.ToJSON DocumentClassifier where
+  toJSON DocumentClassifier {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DataAccessRoleArn" JSON..= dataAccessRoleArn,
+               "DocumentClassifierName" JSON..= documentClassifierName,
+               "InputDataConfig" JSON..= inputDataConfig,
+               "LanguageCode" JSON..= languageCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "Mode" Prelude.<$> mode,
+                  (JSON..=) "ModelKmsKeyId" Prelude.<$> modelKmsKeyId,
+                  (JSON..=) "ModelPolicy" Prelude.<$> modelPolicy,
+                  (JSON..=) "OutputDataConfig" Prelude.<$> outputDataConfig,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "VersionName" Prelude.<$> versionName,
+                  (JSON..=) "VolumeKmsKeyId" Prelude.<$> volumeKmsKeyId,
+                  (JSON..=) "VpcConfig" Prelude.<$> vpcConfig])))
+instance Property "DataAccessRoleArn" DocumentClassifier where
+  type PropertyType "DataAccessRoleArn" DocumentClassifier = Value Prelude.Text
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {dataAccessRoleArn = newValue, ..}
+instance Property "DocumentClassifierName" DocumentClassifier where
+  type PropertyType "DocumentClassifierName" DocumentClassifier = Value Prelude.Text
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {documentClassifierName = newValue, ..}
+instance Property "InputDataConfig" DocumentClassifier where
+  type PropertyType "InputDataConfig" DocumentClassifier = DocumentClassifierInputDataConfigProperty
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {inputDataConfig = newValue, ..}
+instance Property "LanguageCode" DocumentClassifier where
+  type PropertyType "LanguageCode" DocumentClassifier = Value Prelude.Text
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {languageCode = newValue, ..}
+instance Property "Mode" DocumentClassifier where
+  type PropertyType "Mode" DocumentClassifier = Value Prelude.Text
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {mode = Prelude.pure newValue, ..}
+instance Property "ModelKmsKeyId" DocumentClassifier where
+  type PropertyType "ModelKmsKeyId" DocumentClassifier = Value Prelude.Text
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {modelKmsKeyId = Prelude.pure newValue, ..}
+instance Property "ModelPolicy" DocumentClassifier where
+  type PropertyType "ModelPolicy" DocumentClassifier = Value Prelude.Text
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {modelPolicy = Prelude.pure newValue, ..}
+instance Property "OutputDataConfig" DocumentClassifier where
+  type PropertyType "OutputDataConfig" DocumentClassifier = DocumentClassifierOutputDataConfigProperty
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {outputDataConfig = Prelude.pure newValue, ..}
+instance Property "Tags" DocumentClassifier where
+  type PropertyType "Tags" DocumentClassifier = [Tag]
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {tags = Prelude.pure newValue, ..}
+instance Property "VersionName" DocumentClassifier where
+  type PropertyType "VersionName" DocumentClassifier = Value Prelude.Text
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {versionName = Prelude.pure newValue, ..}
+instance Property "VolumeKmsKeyId" DocumentClassifier where
+  type PropertyType "VolumeKmsKeyId" DocumentClassifier = Value Prelude.Text
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {volumeKmsKeyId = Prelude.pure newValue, ..}
+instance Property "VpcConfig" DocumentClassifier where
+  type PropertyType "VpcConfig" DocumentClassifier = VpcConfigProperty
+  set newValue DocumentClassifier {..}
+    = DocumentClassifier {vpcConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/AugmentedManifestsListItemProperty.hs b/gen/Stratosphere/Comprehend/DocumentClassifier/AugmentedManifestsListItemProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/AugmentedManifestsListItemProperty.hs
@@ -0,0 +1,56 @@
+module Stratosphere.Comprehend.DocumentClassifier.AugmentedManifestsListItemProperty (
+        AugmentedManifestsListItemProperty(..),
+        mkAugmentedManifestsListItemProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AugmentedManifestsListItemProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-augmentedmanifestslistitem.html>
+    AugmentedManifestsListItemProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-augmentedmanifestslistitem.html#cfn-comprehend-documentclassifier-augmentedmanifestslistitem-attributenames>
+                                        attributeNames :: (ValueList Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-augmentedmanifestslistitem.html#cfn-comprehend-documentclassifier-augmentedmanifestslistitem-s3uri>
+                                        s3Uri :: (Value Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-augmentedmanifestslistitem.html#cfn-comprehend-documentclassifier-augmentedmanifestslistitem-split>
+                                        split :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAugmentedManifestsListItemProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> AugmentedManifestsListItemProperty
+mkAugmentedManifestsListItemProperty attributeNames s3Uri
+  = AugmentedManifestsListItemProperty
+      {haddock_workaround_ = (), attributeNames = attributeNames,
+       s3Uri = s3Uri, split = Prelude.Nothing}
+instance ToResourceProperties AugmentedManifestsListItemProperty where
+  toResourceProperties AugmentedManifestsListItemProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::DocumentClassifier.AugmentedManifestsListItem",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AttributeNames" JSON..= attributeNames, "S3Uri" JSON..= s3Uri]
+                           (Prelude.catMaybes [(JSON..=) "Split" Prelude.<$> split]))}
+instance JSON.ToJSON AugmentedManifestsListItemProperty where
+  toJSON AugmentedManifestsListItemProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AttributeNames" JSON..= attributeNames, "S3Uri" JSON..= s3Uri]
+              (Prelude.catMaybes [(JSON..=) "Split" Prelude.<$> split])))
+instance Property "AttributeNames" AugmentedManifestsListItemProperty where
+  type PropertyType "AttributeNames" AugmentedManifestsListItemProperty = ValueList Prelude.Text
+  set newValue AugmentedManifestsListItemProperty {..}
+    = AugmentedManifestsListItemProperty
+        {attributeNames = newValue, ..}
+instance Property "S3Uri" AugmentedManifestsListItemProperty where
+  type PropertyType "S3Uri" AugmentedManifestsListItemProperty = Value Prelude.Text
+  set newValue AugmentedManifestsListItemProperty {..}
+    = AugmentedManifestsListItemProperty {s3Uri = newValue, ..}
+instance Property "Split" AugmentedManifestsListItemProperty where
+  type PropertyType "Split" AugmentedManifestsListItemProperty = Value Prelude.Text
+  set newValue AugmentedManifestsListItemProperty {..}
+    = AugmentedManifestsListItemProperty
+        {split = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/AugmentedManifestsListItemProperty.hs-boot b/gen/Stratosphere/Comprehend/DocumentClassifier/AugmentedManifestsListItemProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/AugmentedManifestsListItemProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.DocumentClassifier.AugmentedManifestsListItemProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AugmentedManifestsListItemProperty :: Prelude.Type
+instance ToResourceProperties AugmentedManifestsListItemProperty
+instance Prelude.Eq AugmentedManifestsListItemProperty
+instance Prelude.Show AugmentedManifestsListItemProperty
+instance JSON.ToJSON AugmentedManifestsListItemProperty
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierDocumentsProperty.hs b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierDocumentsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierDocumentsProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierDocumentsProperty (
+        DocumentClassifierDocumentsProperty(..),
+        mkDocumentClassifierDocumentsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DocumentClassifierDocumentsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierdocuments.html>
+    DocumentClassifierDocumentsProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierdocuments.html#cfn-comprehend-documentclassifier-documentclassifierdocuments-s3uri>
+                                         s3Uri :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierdocuments.html#cfn-comprehend-documentclassifier-documentclassifierdocuments-tests3uri>
+                                         testS3Uri :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDocumentClassifierDocumentsProperty ::
+  Value Prelude.Text -> DocumentClassifierDocumentsProperty
+mkDocumentClassifierDocumentsProperty s3Uri
+  = DocumentClassifierDocumentsProperty
+      {haddock_workaround_ = (), s3Uri = s3Uri,
+       testS3Uri = Prelude.Nothing}
+instance ToResourceProperties DocumentClassifierDocumentsProperty where
+  toResourceProperties DocumentClassifierDocumentsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::DocumentClassifier.DocumentClassifierDocuments",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["S3Uri" JSON..= s3Uri]
+                           (Prelude.catMaybes [(JSON..=) "TestS3Uri" Prelude.<$> testS3Uri]))}
+instance JSON.ToJSON DocumentClassifierDocumentsProperty where
+  toJSON DocumentClassifierDocumentsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["S3Uri" JSON..= s3Uri]
+              (Prelude.catMaybes [(JSON..=) "TestS3Uri" Prelude.<$> testS3Uri])))
+instance Property "S3Uri" DocumentClassifierDocumentsProperty where
+  type PropertyType "S3Uri" DocumentClassifierDocumentsProperty = Value Prelude.Text
+  set newValue DocumentClassifierDocumentsProperty {..}
+    = DocumentClassifierDocumentsProperty {s3Uri = newValue, ..}
+instance Property "TestS3Uri" DocumentClassifierDocumentsProperty where
+  type PropertyType "TestS3Uri" DocumentClassifierDocumentsProperty = Value Prelude.Text
+  set newValue DocumentClassifierDocumentsProperty {..}
+    = DocumentClassifierDocumentsProperty
+        {testS3Uri = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierDocumentsProperty.hs-boot b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierDocumentsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierDocumentsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierDocumentsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DocumentClassifierDocumentsProperty :: Prelude.Type
+instance ToResourceProperties DocumentClassifierDocumentsProperty
+instance Prelude.Eq DocumentClassifierDocumentsProperty
+instance Prelude.Show DocumentClassifierDocumentsProperty
+instance JSON.ToJSON DocumentClassifierDocumentsProperty
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierInputDataConfigProperty.hs b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierInputDataConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierInputDataConfigProperty.hs
@@ -0,0 +1,110 @@
+module Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierInputDataConfigProperty (
+        module Exports, DocumentClassifierInputDataConfigProperty(..),
+        mkDocumentClassifierInputDataConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Comprehend.DocumentClassifier.AugmentedManifestsListItemProperty as Exports
+import {-# SOURCE #-} Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierDocumentsProperty as Exports
+import {-# SOURCE #-} Stratosphere.Comprehend.DocumentClassifier.DocumentReaderConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DocumentClassifierInputDataConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html>
+    DocumentClassifierInputDataConfigProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifierinputdataconfig-augmentedmanifests>
+                                               augmentedManifests :: (Prelude.Maybe [AugmentedManifestsListItemProperty]),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifierinputdataconfig-dataformat>
+                                               dataFormat :: (Prelude.Maybe (Value Prelude.Text)),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifierinputdataconfig-documentreaderconfig>
+                                               documentReaderConfig :: (Prelude.Maybe DocumentReaderConfigProperty),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifierinputdataconfig-documenttype>
+                                               documentType :: (Prelude.Maybe (Value Prelude.Text)),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifierinputdataconfig-documents>
+                                               documents :: (Prelude.Maybe DocumentClassifierDocumentsProperty),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifierinputdataconfig-labeldelimiter>
+                                               labelDelimiter :: (Prelude.Maybe (Value Prelude.Text)),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifierinputdataconfig-s3uri>
+                                               s3Uri :: (Prelude.Maybe (Value Prelude.Text)),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifierinputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifierinputdataconfig-tests3uri>
+                                               testS3Uri :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDocumentClassifierInputDataConfigProperty ::
+  DocumentClassifierInputDataConfigProperty
+mkDocumentClassifierInputDataConfigProperty
+  = DocumentClassifierInputDataConfigProperty
+      {haddock_workaround_ = (), augmentedManifests = Prelude.Nothing,
+       dataFormat = Prelude.Nothing,
+       documentReaderConfig = Prelude.Nothing,
+       documentType = Prelude.Nothing, documents = Prelude.Nothing,
+       labelDelimiter = Prelude.Nothing, s3Uri = Prelude.Nothing,
+       testS3Uri = Prelude.Nothing}
+instance ToResourceProperties DocumentClassifierInputDataConfigProperty where
+  toResourceProperties DocumentClassifierInputDataConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::DocumentClassifier.DocumentClassifierInputDataConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AugmentedManifests" Prelude.<$> augmentedManifests,
+                            (JSON..=) "DataFormat" Prelude.<$> dataFormat,
+                            (JSON..=) "DocumentReaderConfig" Prelude.<$> documentReaderConfig,
+                            (JSON..=) "DocumentType" Prelude.<$> documentType,
+                            (JSON..=) "Documents" Prelude.<$> documents,
+                            (JSON..=) "LabelDelimiter" Prelude.<$> labelDelimiter,
+                            (JSON..=) "S3Uri" Prelude.<$> s3Uri,
+                            (JSON..=) "TestS3Uri" Prelude.<$> testS3Uri])}
+instance JSON.ToJSON DocumentClassifierInputDataConfigProperty where
+  toJSON DocumentClassifierInputDataConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AugmentedManifests" Prelude.<$> augmentedManifests,
+               (JSON..=) "DataFormat" Prelude.<$> dataFormat,
+               (JSON..=) "DocumentReaderConfig" Prelude.<$> documentReaderConfig,
+               (JSON..=) "DocumentType" Prelude.<$> documentType,
+               (JSON..=) "Documents" Prelude.<$> documents,
+               (JSON..=) "LabelDelimiter" Prelude.<$> labelDelimiter,
+               (JSON..=) "S3Uri" Prelude.<$> s3Uri,
+               (JSON..=) "TestS3Uri" Prelude.<$> testS3Uri]))
+instance Property "AugmentedManifests" DocumentClassifierInputDataConfigProperty where
+  type PropertyType "AugmentedManifests" DocumentClassifierInputDataConfigProperty = [AugmentedManifestsListItemProperty]
+  set newValue DocumentClassifierInputDataConfigProperty {..}
+    = DocumentClassifierInputDataConfigProperty
+        {augmentedManifests = Prelude.pure newValue, ..}
+instance Property "DataFormat" DocumentClassifierInputDataConfigProperty where
+  type PropertyType "DataFormat" DocumentClassifierInputDataConfigProperty = Value Prelude.Text
+  set newValue DocumentClassifierInputDataConfigProperty {..}
+    = DocumentClassifierInputDataConfigProperty
+        {dataFormat = Prelude.pure newValue, ..}
+instance Property "DocumentReaderConfig" DocumentClassifierInputDataConfigProperty where
+  type PropertyType "DocumentReaderConfig" DocumentClassifierInputDataConfigProperty = DocumentReaderConfigProperty
+  set newValue DocumentClassifierInputDataConfigProperty {..}
+    = DocumentClassifierInputDataConfigProperty
+        {documentReaderConfig = Prelude.pure newValue, ..}
+instance Property "DocumentType" DocumentClassifierInputDataConfigProperty where
+  type PropertyType "DocumentType" DocumentClassifierInputDataConfigProperty = Value Prelude.Text
+  set newValue DocumentClassifierInputDataConfigProperty {..}
+    = DocumentClassifierInputDataConfigProperty
+        {documentType = Prelude.pure newValue, ..}
+instance Property "Documents" DocumentClassifierInputDataConfigProperty where
+  type PropertyType "Documents" DocumentClassifierInputDataConfigProperty = DocumentClassifierDocumentsProperty
+  set newValue DocumentClassifierInputDataConfigProperty {..}
+    = DocumentClassifierInputDataConfigProperty
+        {documents = Prelude.pure newValue, ..}
+instance Property "LabelDelimiter" DocumentClassifierInputDataConfigProperty where
+  type PropertyType "LabelDelimiter" DocumentClassifierInputDataConfigProperty = Value Prelude.Text
+  set newValue DocumentClassifierInputDataConfigProperty {..}
+    = DocumentClassifierInputDataConfigProperty
+        {labelDelimiter = Prelude.pure newValue, ..}
+instance Property "S3Uri" DocumentClassifierInputDataConfigProperty where
+  type PropertyType "S3Uri" DocumentClassifierInputDataConfigProperty = Value Prelude.Text
+  set newValue DocumentClassifierInputDataConfigProperty {..}
+    = DocumentClassifierInputDataConfigProperty
+        {s3Uri = Prelude.pure newValue, ..}
+instance Property "TestS3Uri" DocumentClassifierInputDataConfigProperty where
+  type PropertyType "TestS3Uri" DocumentClassifierInputDataConfigProperty = Value Prelude.Text
+  set newValue DocumentClassifierInputDataConfigProperty {..}
+    = DocumentClassifierInputDataConfigProperty
+        {testS3Uri = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierInputDataConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierInputDataConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierInputDataConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierInputDataConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DocumentClassifierInputDataConfigProperty :: Prelude.Type
+instance ToResourceProperties DocumentClassifierInputDataConfigProperty
+instance Prelude.Eq DocumentClassifierInputDataConfigProperty
+instance Prelude.Show DocumentClassifierInputDataConfigProperty
+instance JSON.ToJSON DocumentClassifierInputDataConfigProperty
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierOutputDataConfigProperty.hs b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierOutputDataConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierOutputDataConfigProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierOutputDataConfigProperty (
+        DocumentClassifierOutputDataConfigProperty(..),
+        mkDocumentClassifierOutputDataConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DocumentClassifierOutputDataConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifieroutputdataconfig.html>
+    DocumentClassifierOutputDataConfigProperty {haddock_workaround_ :: (),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifieroutputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifieroutputdataconfig-kmskeyid>
+                                                kmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentclassifieroutputdataconfig.html#cfn-comprehend-documentclassifier-documentclassifieroutputdataconfig-s3uri>
+                                                s3Uri :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDocumentClassifierOutputDataConfigProperty ::
+  DocumentClassifierOutputDataConfigProperty
+mkDocumentClassifierOutputDataConfigProperty
+  = DocumentClassifierOutputDataConfigProperty
+      {haddock_workaround_ = (), kmsKeyId = Prelude.Nothing,
+       s3Uri = Prelude.Nothing}
+instance ToResourceProperties DocumentClassifierOutputDataConfigProperty where
+  toResourceProperties
+    DocumentClassifierOutputDataConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::DocumentClassifier.DocumentClassifierOutputDataConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                            (JSON..=) "S3Uri" Prelude.<$> s3Uri])}
+instance JSON.ToJSON DocumentClassifierOutputDataConfigProperty where
+  toJSON DocumentClassifierOutputDataConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+               (JSON..=) "S3Uri" Prelude.<$> s3Uri]))
+instance Property "KmsKeyId" DocumentClassifierOutputDataConfigProperty where
+  type PropertyType "KmsKeyId" DocumentClassifierOutputDataConfigProperty = Value Prelude.Text
+  set newValue DocumentClassifierOutputDataConfigProperty {..}
+    = DocumentClassifierOutputDataConfigProperty
+        {kmsKeyId = Prelude.pure newValue, ..}
+instance Property "S3Uri" DocumentClassifierOutputDataConfigProperty where
+  type PropertyType "S3Uri" DocumentClassifierOutputDataConfigProperty = Value Prelude.Text
+  set newValue DocumentClassifierOutputDataConfigProperty {..}
+    = DocumentClassifierOutputDataConfigProperty
+        {s3Uri = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierOutputDataConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierOutputDataConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentClassifierOutputDataConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierOutputDataConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DocumentClassifierOutputDataConfigProperty :: Prelude.Type
+instance ToResourceProperties DocumentClassifierOutputDataConfigProperty
+instance Prelude.Eq DocumentClassifierOutputDataConfigProperty
+instance Prelude.Show DocumentClassifierOutputDataConfigProperty
+instance JSON.ToJSON DocumentClassifierOutputDataConfigProperty
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentReaderConfigProperty.hs b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentReaderConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentReaderConfigProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.Comprehend.DocumentClassifier.DocumentReaderConfigProperty (
+        DocumentReaderConfigProperty(..), mkDocumentReaderConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DocumentReaderConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentreaderconfig.html>
+    DocumentReaderConfigProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentreaderconfig.html#cfn-comprehend-documentclassifier-documentreaderconfig-documentreadaction>
+                                  documentReadAction :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentreaderconfig.html#cfn-comprehend-documentclassifier-documentreaderconfig-documentreadmode>
+                                  documentReadMode :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-documentreaderconfig.html#cfn-comprehend-documentclassifier-documentreaderconfig-featuretypes>
+                                  featureTypes :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDocumentReaderConfigProperty ::
+  Value Prelude.Text -> DocumentReaderConfigProperty
+mkDocumentReaderConfigProperty documentReadAction
+  = DocumentReaderConfigProperty
+      {haddock_workaround_ = (), documentReadAction = documentReadAction,
+       documentReadMode = Prelude.Nothing, featureTypes = Prelude.Nothing}
+instance ToResourceProperties DocumentReaderConfigProperty where
+  toResourceProperties DocumentReaderConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::DocumentClassifier.DocumentReaderConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DocumentReadAction" JSON..= documentReadAction]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DocumentReadMode" Prelude.<$> documentReadMode,
+                               (JSON..=) "FeatureTypes" Prelude.<$> featureTypes]))}
+instance JSON.ToJSON DocumentReaderConfigProperty where
+  toJSON DocumentReaderConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DocumentReadAction" JSON..= documentReadAction]
+              (Prelude.catMaybes
+                 [(JSON..=) "DocumentReadMode" Prelude.<$> documentReadMode,
+                  (JSON..=) "FeatureTypes" Prelude.<$> featureTypes])))
+instance Property "DocumentReadAction" DocumentReaderConfigProperty where
+  type PropertyType "DocumentReadAction" DocumentReaderConfigProperty = Value Prelude.Text
+  set newValue DocumentReaderConfigProperty {..}
+    = DocumentReaderConfigProperty {documentReadAction = newValue, ..}
+instance Property "DocumentReadMode" DocumentReaderConfigProperty where
+  type PropertyType "DocumentReadMode" DocumentReaderConfigProperty = Value Prelude.Text
+  set newValue DocumentReaderConfigProperty {..}
+    = DocumentReaderConfigProperty
+        {documentReadMode = Prelude.pure newValue, ..}
+instance Property "FeatureTypes" DocumentReaderConfigProperty where
+  type PropertyType "FeatureTypes" DocumentReaderConfigProperty = ValueList Prelude.Text
+  set newValue DocumentReaderConfigProperty {..}
+    = DocumentReaderConfigProperty
+        {featureTypes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentReaderConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentReaderConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/DocumentReaderConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.DocumentClassifier.DocumentReaderConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DocumentReaderConfigProperty :: Prelude.Type
+instance ToResourceProperties DocumentReaderConfigProperty
+instance Prelude.Eq DocumentReaderConfigProperty
+instance Prelude.Show DocumentReaderConfigProperty
+instance JSON.ToJSON DocumentReaderConfigProperty
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/VpcConfigProperty.hs b/gen/Stratosphere/Comprehend/DocumentClassifier/VpcConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/VpcConfigProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.Comprehend.DocumentClassifier.VpcConfigProperty (
+        VpcConfigProperty(..), mkVpcConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VpcConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-vpcconfig.html>
+    VpcConfigProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-vpcconfig.html#cfn-comprehend-documentclassifier-vpcconfig-securitygroupids>
+                       securityGroupIds :: (ValueList Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-documentclassifier-vpcconfig.html#cfn-comprehend-documentclassifier-vpcconfig-subnets>
+                       subnets :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpcConfigProperty ::
+  ValueList Prelude.Text
+  -> ValueList Prelude.Text -> VpcConfigProperty
+mkVpcConfigProperty securityGroupIds subnets
+  = VpcConfigProperty
+      {haddock_workaround_ = (), securityGroupIds = securityGroupIds,
+       subnets = subnets}
+instance ToResourceProperties VpcConfigProperty where
+  toResourceProperties VpcConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::DocumentClassifier.VpcConfig",
+         supportsTags = Prelude.False,
+         properties = ["SecurityGroupIds" JSON..= securityGroupIds,
+                       "Subnets" JSON..= subnets]}
+instance JSON.ToJSON VpcConfigProperty where
+  toJSON VpcConfigProperty {..}
+    = JSON.object
+        ["SecurityGroupIds" JSON..= securityGroupIds,
+         "Subnets" JSON..= subnets]
+instance Property "SecurityGroupIds" VpcConfigProperty where
+  type PropertyType "SecurityGroupIds" VpcConfigProperty = ValueList Prelude.Text
+  set newValue VpcConfigProperty {..}
+    = VpcConfigProperty {securityGroupIds = newValue, ..}
+instance Property "Subnets" VpcConfigProperty where
+  type PropertyType "Subnets" VpcConfigProperty = ValueList Prelude.Text
+  set newValue VpcConfigProperty {..}
+    = VpcConfigProperty {subnets = newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/DocumentClassifier/VpcConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/DocumentClassifier/VpcConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/DocumentClassifier/VpcConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.DocumentClassifier.VpcConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VpcConfigProperty :: Prelude.Type
+instance ToResourceProperties VpcConfigProperty
+instance Prelude.Eq VpcConfigProperty
+instance Prelude.Show VpcConfigProperty
+instance JSON.ToJSON VpcConfigProperty
diff --git a/gen/Stratosphere/Comprehend/Flywheel.hs b/gen/Stratosphere/Comprehend/Flywheel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel.hs
@@ -0,0 +1,102 @@
+module Stratosphere.Comprehend.Flywheel (
+        module Exports, Flywheel(..), mkFlywheel
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Comprehend.Flywheel.DataSecurityConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.Comprehend.Flywheel.TaskConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Flywheel
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html>
+    Flywheel {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html#cfn-comprehend-flywheel-activemodelarn>
+              activeModelArn :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html#cfn-comprehend-flywheel-dataaccessrolearn>
+              dataAccessRoleArn :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html#cfn-comprehend-flywheel-datalakes3uri>
+              dataLakeS3Uri :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html#cfn-comprehend-flywheel-datasecurityconfig>
+              dataSecurityConfig :: (Prelude.Maybe DataSecurityConfigProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html#cfn-comprehend-flywheel-flywheelname>
+              flywheelName :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html#cfn-comprehend-flywheel-modeltype>
+              modelType :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html#cfn-comprehend-flywheel-tags>
+              tags :: (Prelude.Maybe [Tag]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-comprehend-flywheel.html#cfn-comprehend-flywheel-taskconfig>
+              taskConfig :: (Prelude.Maybe TaskConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFlywheel ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> Flywheel
+mkFlywheel dataAccessRoleArn dataLakeS3Uri flywheelName
+  = Flywheel
+      {haddock_workaround_ = (), dataAccessRoleArn = dataAccessRoleArn,
+       dataLakeS3Uri = dataLakeS3Uri, flywheelName = flywheelName,
+       activeModelArn = Prelude.Nothing,
+       dataSecurityConfig = Prelude.Nothing, modelType = Prelude.Nothing,
+       tags = Prelude.Nothing, taskConfig = Prelude.Nothing}
+instance ToResourceProperties Flywheel where
+  toResourceProperties Flywheel {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::Flywheel",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DataAccessRoleArn" JSON..= dataAccessRoleArn,
+                            "DataLakeS3Uri" JSON..= dataLakeS3Uri,
+                            "FlywheelName" JSON..= flywheelName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ActiveModelArn" Prelude.<$> activeModelArn,
+                               (JSON..=) "DataSecurityConfig" Prelude.<$> dataSecurityConfig,
+                               (JSON..=) "ModelType" Prelude.<$> modelType,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "TaskConfig" Prelude.<$> taskConfig]))}
+instance JSON.ToJSON Flywheel where
+  toJSON Flywheel {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DataAccessRoleArn" JSON..= dataAccessRoleArn,
+               "DataLakeS3Uri" JSON..= dataLakeS3Uri,
+               "FlywheelName" JSON..= flywheelName]
+              (Prelude.catMaybes
+                 [(JSON..=) "ActiveModelArn" Prelude.<$> activeModelArn,
+                  (JSON..=) "DataSecurityConfig" Prelude.<$> dataSecurityConfig,
+                  (JSON..=) "ModelType" Prelude.<$> modelType,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "TaskConfig" Prelude.<$> taskConfig])))
+instance Property "ActiveModelArn" Flywheel where
+  type PropertyType "ActiveModelArn" Flywheel = Value Prelude.Text
+  set newValue Flywheel {..}
+    = Flywheel {activeModelArn = Prelude.pure newValue, ..}
+instance Property "DataAccessRoleArn" Flywheel where
+  type PropertyType "DataAccessRoleArn" Flywheel = Value Prelude.Text
+  set newValue Flywheel {..}
+    = Flywheel {dataAccessRoleArn = newValue, ..}
+instance Property "DataLakeS3Uri" Flywheel where
+  type PropertyType "DataLakeS3Uri" Flywheel = Value Prelude.Text
+  set newValue Flywheel {..}
+    = Flywheel {dataLakeS3Uri = newValue, ..}
+instance Property "DataSecurityConfig" Flywheel where
+  type PropertyType "DataSecurityConfig" Flywheel = DataSecurityConfigProperty
+  set newValue Flywheel {..}
+    = Flywheel {dataSecurityConfig = Prelude.pure newValue, ..}
+instance Property "FlywheelName" Flywheel where
+  type PropertyType "FlywheelName" Flywheel = Value Prelude.Text
+  set newValue Flywheel {..} = Flywheel {flywheelName = newValue, ..}
+instance Property "ModelType" Flywheel where
+  type PropertyType "ModelType" Flywheel = Value Prelude.Text
+  set newValue Flywheel {..}
+    = Flywheel {modelType = Prelude.pure newValue, ..}
+instance Property "Tags" Flywheel where
+  type PropertyType "Tags" Flywheel = [Tag]
+  set newValue Flywheel {..}
+    = Flywheel {tags = Prelude.pure newValue, ..}
+instance Property "TaskConfig" Flywheel where
+  type PropertyType "TaskConfig" Flywheel = TaskConfigProperty
+  set newValue Flywheel {..}
+    = Flywheel {taskConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/Flywheel/DataSecurityConfigProperty.hs b/gen/Stratosphere/Comprehend/Flywheel/DataSecurityConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/DataSecurityConfigProperty.hs
@@ -0,0 +1,68 @@
+module Stratosphere.Comprehend.Flywheel.DataSecurityConfigProperty (
+        module Exports, DataSecurityConfigProperty(..),
+        mkDataSecurityConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Comprehend.Flywheel.VpcConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DataSecurityConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-datasecurityconfig.html>
+    DataSecurityConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-datasecurityconfig.html#cfn-comprehend-flywheel-datasecurityconfig-datalakekmskeyid>
+                                dataLakeKmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-datasecurityconfig.html#cfn-comprehend-flywheel-datasecurityconfig-modelkmskeyid>
+                                modelKmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-datasecurityconfig.html#cfn-comprehend-flywheel-datasecurityconfig-volumekmskeyid>
+                                volumeKmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-datasecurityconfig.html#cfn-comprehend-flywheel-datasecurityconfig-vpcconfig>
+                                vpcConfig :: (Prelude.Maybe VpcConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDataSecurityConfigProperty :: DataSecurityConfigProperty
+mkDataSecurityConfigProperty
+  = DataSecurityConfigProperty
+      {haddock_workaround_ = (), dataLakeKmsKeyId = Prelude.Nothing,
+       modelKmsKeyId = Prelude.Nothing, volumeKmsKeyId = Prelude.Nothing,
+       vpcConfig = Prelude.Nothing}
+instance ToResourceProperties DataSecurityConfigProperty where
+  toResourceProperties DataSecurityConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::Flywheel.DataSecurityConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DataLakeKmsKeyId" Prelude.<$> dataLakeKmsKeyId,
+                            (JSON..=) "ModelKmsKeyId" Prelude.<$> modelKmsKeyId,
+                            (JSON..=) "VolumeKmsKeyId" Prelude.<$> volumeKmsKeyId,
+                            (JSON..=) "VpcConfig" Prelude.<$> vpcConfig])}
+instance JSON.ToJSON DataSecurityConfigProperty where
+  toJSON DataSecurityConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DataLakeKmsKeyId" Prelude.<$> dataLakeKmsKeyId,
+               (JSON..=) "ModelKmsKeyId" Prelude.<$> modelKmsKeyId,
+               (JSON..=) "VolumeKmsKeyId" Prelude.<$> volumeKmsKeyId,
+               (JSON..=) "VpcConfig" Prelude.<$> vpcConfig]))
+instance Property "DataLakeKmsKeyId" DataSecurityConfigProperty where
+  type PropertyType "DataLakeKmsKeyId" DataSecurityConfigProperty = Value Prelude.Text
+  set newValue DataSecurityConfigProperty {..}
+    = DataSecurityConfigProperty
+        {dataLakeKmsKeyId = Prelude.pure newValue, ..}
+instance Property "ModelKmsKeyId" DataSecurityConfigProperty where
+  type PropertyType "ModelKmsKeyId" DataSecurityConfigProperty = Value Prelude.Text
+  set newValue DataSecurityConfigProperty {..}
+    = DataSecurityConfigProperty
+        {modelKmsKeyId = Prelude.pure newValue, ..}
+instance Property "VolumeKmsKeyId" DataSecurityConfigProperty where
+  type PropertyType "VolumeKmsKeyId" DataSecurityConfigProperty = Value Prelude.Text
+  set newValue DataSecurityConfigProperty {..}
+    = DataSecurityConfigProperty
+        {volumeKmsKeyId = Prelude.pure newValue, ..}
+instance Property "VpcConfig" DataSecurityConfigProperty where
+  type PropertyType "VpcConfig" DataSecurityConfigProperty = VpcConfigProperty
+  set newValue DataSecurityConfigProperty {..}
+    = DataSecurityConfigProperty
+        {vpcConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/Flywheel/DataSecurityConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/Flywheel/DataSecurityConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/DataSecurityConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.Flywheel.DataSecurityConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DataSecurityConfigProperty :: Prelude.Type
+instance ToResourceProperties DataSecurityConfigProperty
+instance Prelude.Eq DataSecurityConfigProperty
+instance Prelude.Show DataSecurityConfigProperty
+instance JSON.ToJSON DataSecurityConfigProperty
diff --git a/gen/Stratosphere/Comprehend/Flywheel/DocumentClassificationConfigProperty.hs b/gen/Stratosphere/Comprehend/Flywheel/DocumentClassificationConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/DocumentClassificationConfigProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.Comprehend.Flywheel.DocumentClassificationConfigProperty (
+        DocumentClassificationConfigProperty(..),
+        mkDocumentClassificationConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DocumentClassificationConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-documentclassificationconfig.html>
+    DocumentClassificationConfigProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-documentclassificationconfig.html#cfn-comprehend-flywheel-documentclassificationconfig-labels>
+                                          labels :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-documentclassificationconfig.html#cfn-comprehend-flywheel-documentclassificationconfig-mode>
+                                          mode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDocumentClassificationConfigProperty ::
+  Value Prelude.Text -> DocumentClassificationConfigProperty
+mkDocumentClassificationConfigProperty mode
+  = DocumentClassificationConfigProperty
+      {haddock_workaround_ = (), mode = mode, labels = Prelude.Nothing}
+instance ToResourceProperties DocumentClassificationConfigProperty where
+  toResourceProperties DocumentClassificationConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::Flywheel.DocumentClassificationConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Mode" JSON..= mode]
+                           (Prelude.catMaybes [(JSON..=) "Labels" Prelude.<$> labels]))}
+instance JSON.ToJSON DocumentClassificationConfigProperty where
+  toJSON DocumentClassificationConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Mode" JSON..= mode]
+              (Prelude.catMaybes [(JSON..=) "Labels" Prelude.<$> labels])))
+instance Property "Labels" DocumentClassificationConfigProperty where
+  type PropertyType "Labels" DocumentClassificationConfigProperty = ValueList Prelude.Text
+  set newValue DocumentClassificationConfigProperty {..}
+    = DocumentClassificationConfigProperty
+        {labels = Prelude.pure newValue, ..}
+instance Property "Mode" DocumentClassificationConfigProperty where
+  type PropertyType "Mode" DocumentClassificationConfigProperty = Value Prelude.Text
+  set newValue DocumentClassificationConfigProperty {..}
+    = DocumentClassificationConfigProperty {mode = newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/Flywheel/DocumentClassificationConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/Flywheel/DocumentClassificationConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/DocumentClassificationConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.Flywheel.DocumentClassificationConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DocumentClassificationConfigProperty :: Prelude.Type
+instance ToResourceProperties DocumentClassificationConfigProperty
+instance Prelude.Eq DocumentClassificationConfigProperty
+instance Prelude.Show DocumentClassificationConfigProperty
+instance JSON.ToJSON DocumentClassificationConfigProperty
diff --git a/gen/Stratosphere/Comprehend/Flywheel/EntityRecognitionConfigProperty.hs b/gen/Stratosphere/Comprehend/Flywheel/EntityRecognitionConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/EntityRecognitionConfigProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.Comprehend.Flywheel.EntityRecognitionConfigProperty (
+        module Exports, EntityRecognitionConfigProperty(..),
+        mkEntityRecognitionConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Comprehend.Flywheel.EntityTypesListItemProperty as Exports
+import Stratosphere.ResourceProperties
+data EntityRecognitionConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-entityrecognitionconfig.html>
+    EntityRecognitionConfigProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-entityrecognitionconfig.html#cfn-comprehend-flywheel-entityrecognitionconfig-entitytypes>
+                                     entityTypes :: (Prelude.Maybe [EntityTypesListItemProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEntityRecognitionConfigProperty ::
+  EntityRecognitionConfigProperty
+mkEntityRecognitionConfigProperty
+  = EntityRecognitionConfigProperty
+      {haddock_workaround_ = (), entityTypes = Prelude.Nothing}
+instance ToResourceProperties EntityRecognitionConfigProperty where
+  toResourceProperties EntityRecognitionConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::Flywheel.EntityRecognitionConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EntityTypes" Prelude.<$> entityTypes])}
+instance JSON.ToJSON EntityRecognitionConfigProperty where
+  toJSON EntityRecognitionConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EntityTypes" Prelude.<$> entityTypes]))
+instance Property "EntityTypes" EntityRecognitionConfigProperty where
+  type PropertyType "EntityTypes" EntityRecognitionConfigProperty = [EntityTypesListItemProperty]
+  set newValue EntityRecognitionConfigProperty {..}
+    = EntityRecognitionConfigProperty
+        {entityTypes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/Flywheel/EntityRecognitionConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/Flywheel/EntityRecognitionConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/EntityRecognitionConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.Flywheel.EntityRecognitionConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EntityRecognitionConfigProperty :: Prelude.Type
+instance ToResourceProperties EntityRecognitionConfigProperty
+instance Prelude.Eq EntityRecognitionConfigProperty
+instance Prelude.Show EntityRecognitionConfigProperty
+instance JSON.ToJSON EntityRecognitionConfigProperty
diff --git a/gen/Stratosphere/Comprehend/Flywheel/EntityTypesListItemProperty.hs b/gen/Stratosphere/Comprehend/Flywheel/EntityTypesListItemProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/EntityTypesListItemProperty.hs
@@ -0,0 +1,31 @@
+module Stratosphere.Comprehend.Flywheel.EntityTypesListItemProperty (
+        EntityTypesListItemProperty(..), mkEntityTypesListItemProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EntityTypesListItemProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-entitytypeslistitem.html>
+    EntityTypesListItemProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-entitytypeslistitem.html#cfn-comprehend-flywheel-entitytypeslistitem-type>
+                                 type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEntityTypesListItemProperty ::
+  Value Prelude.Text -> EntityTypesListItemProperty
+mkEntityTypesListItemProperty type'
+  = EntityTypesListItemProperty
+      {haddock_workaround_ = (), type' = type'}
+instance ToResourceProperties EntityTypesListItemProperty where
+  toResourceProperties EntityTypesListItemProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::Flywheel.EntityTypesListItem",
+         supportsTags = Prelude.False, properties = ["Type" JSON..= type']}
+instance JSON.ToJSON EntityTypesListItemProperty where
+  toJSON EntityTypesListItemProperty {..}
+    = JSON.object ["Type" JSON..= type']
+instance Property "Type" EntityTypesListItemProperty where
+  type PropertyType "Type" EntityTypesListItemProperty = Value Prelude.Text
+  set newValue EntityTypesListItemProperty {..}
+    = EntityTypesListItemProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/Flywheel/EntityTypesListItemProperty.hs-boot b/gen/Stratosphere/Comprehend/Flywheel/EntityTypesListItemProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/EntityTypesListItemProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.Flywheel.EntityTypesListItemProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EntityTypesListItemProperty :: Prelude.Type
+instance ToResourceProperties EntityTypesListItemProperty
+instance Prelude.Eq EntityTypesListItemProperty
+instance Prelude.Show EntityTypesListItemProperty
+instance JSON.ToJSON EntityTypesListItemProperty
diff --git a/gen/Stratosphere/Comprehend/Flywheel/TaskConfigProperty.hs b/gen/Stratosphere/Comprehend/Flywheel/TaskConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/TaskConfigProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.Comprehend.Flywheel.TaskConfigProperty (
+        module Exports, TaskConfigProperty(..), mkTaskConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Comprehend.Flywheel.DocumentClassificationConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.Comprehend.Flywheel.EntityRecognitionConfigProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TaskConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-taskconfig.html>
+    TaskConfigProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-taskconfig.html#cfn-comprehend-flywheel-taskconfig-documentclassificationconfig>
+                        documentClassificationConfig :: (Prelude.Maybe DocumentClassificationConfigProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-taskconfig.html#cfn-comprehend-flywheel-taskconfig-entityrecognitionconfig>
+                        entityRecognitionConfig :: (Prelude.Maybe EntityRecognitionConfigProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-taskconfig.html#cfn-comprehend-flywheel-taskconfig-languagecode>
+                        languageCode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTaskConfigProperty :: Value Prelude.Text -> TaskConfigProperty
+mkTaskConfigProperty languageCode
+  = TaskConfigProperty
+      {haddock_workaround_ = (), languageCode = languageCode,
+       documentClassificationConfig = Prelude.Nothing,
+       entityRecognitionConfig = Prelude.Nothing}
+instance ToResourceProperties TaskConfigProperty where
+  toResourceProperties TaskConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::Flywheel.TaskConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LanguageCode" JSON..= languageCode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DocumentClassificationConfig"
+                                 Prelude.<$> documentClassificationConfig,
+                               (JSON..=) "EntityRecognitionConfig"
+                                 Prelude.<$> entityRecognitionConfig]))}
+instance JSON.ToJSON TaskConfigProperty where
+  toJSON TaskConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LanguageCode" JSON..= languageCode]
+              (Prelude.catMaybes
+                 [(JSON..=) "DocumentClassificationConfig"
+                    Prelude.<$> documentClassificationConfig,
+                  (JSON..=) "EntityRecognitionConfig"
+                    Prelude.<$> entityRecognitionConfig])))
+instance Property "DocumentClassificationConfig" TaskConfigProperty where
+  type PropertyType "DocumentClassificationConfig" TaskConfigProperty = DocumentClassificationConfigProperty
+  set newValue TaskConfigProperty {..}
+    = TaskConfigProperty
+        {documentClassificationConfig = Prelude.pure newValue, ..}
+instance Property "EntityRecognitionConfig" TaskConfigProperty where
+  type PropertyType "EntityRecognitionConfig" TaskConfigProperty = EntityRecognitionConfigProperty
+  set newValue TaskConfigProperty {..}
+    = TaskConfigProperty
+        {entityRecognitionConfig = Prelude.pure newValue, ..}
+instance Property "LanguageCode" TaskConfigProperty where
+  type PropertyType "LanguageCode" TaskConfigProperty = Value Prelude.Text
+  set newValue TaskConfigProperty {..}
+    = TaskConfigProperty {languageCode = newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/Flywheel/TaskConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/Flywheel/TaskConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/TaskConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.Flywheel.TaskConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TaskConfigProperty :: Prelude.Type
+instance ToResourceProperties TaskConfigProperty
+instance Prelude.Eq TaskConfigProperty
+instance Prelude.Show TaskConfigProperty
+instance JSON.ToJSON TaskConfigProperty
diff --git a/gen/Stratosphere/Comprehend/Flywheel/VpcConfigProperty.hs b/gen/Stratosphere/Comprehend/Flywheel/VpcConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/VpcConfigProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.Comprehend.Flywheel.VpcConfigProperty (
+        VpcConfigProperty(..), mkVpcConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VpcConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-vpcconfig.html>
+    VpcConfigProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-vpcconfig.html#cfn-comprehend-flywheel-vpcconfig-securitygroupids>
+                       securityGroupIds :: (ValueList Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-comprehend-flywheel-vpcconfig.html#cfn-comprehend-flywheel-vpcconfig-subnets>
+                       subnets :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpcConfigProperty ::
+  ValueList Prelude.Text
+  -> ValueList Prelude.Text -> VpcConfigProperty
+mkVpcConfigProperty securityGroupIds subnets
+  = VpcConfigProperty
+      {haddock_workaround_ = (), securityGroupIds = securityGroupIds,
+       subnets = subnets}
+instance ToResourceProperties VpcConfigProperty where
+  toResourceProperties VpcConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Comprehend::Flywheel.VpcConfig",
+         supportsTags = Prelude.False,
+         properties = ["SecurityGroupIds" JSON..= securityGroupIds,
+                       "Subnets" JSON..= subnets]}
+instance JSON.ToJSON VpcConfigProperty where
+  toJSON VpcConfigProperty {..}
+    = JSON.object
+        ["SecurityGroupIds" JSON..= securityGroupIds,
+         "Subnets" JSON..= subnets]
+instance Property "SecurityGroupIds" VpcConfigProperty where
+  type PropertyType "SecurityGroupIds" VpcConfigProperty = ValueList Prelude.Text
+  set newValue VpcConfigProperty {..}
+    = VpcConfigProperty {securityGroupIds = newValue, ..}
+instance Property "Subnets" VpcConfigProperty where
+  type PropertyType "Subnets" VpcConfigProperty = ValueList Prelude.Text
+  set newValue VpcConfigProperty {..}
+    = VpcConfigProperty {subnets = newValue, ..}
diff --git a/gen/Stratosphere/Comprehend/Flywheel/VpcConfigProperty.hs-boot b/gen/Stratosphere/Comprehend/Flywheel/VpcConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Comprehend/Flywheel/VpcConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Comprehend.Flywheel.VpcConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VpcConfigProperty :: Prelude.Type
+instance ToResourceProperties VpcConfigProperty
+instance Prelude.Eq VpcConfigProperty
+instance Prelude.Show VpcConfigProperty
+instance JSON.ToJSON VpcConfigProperty
diff --git a/stratosphere-comprehend.cabal b/stratosphere-comprehend.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-comprehend.cabal
@@ -0,0 +1,86 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-comprehend
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS Comprehend.
+description:    Integration into stratosphere to generate resources and properties for AWS Comprehend
+category:       AWS, Cloud, Comprehend
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.Comprehend.DocumentClassifier
+      Stratosphere.Comprehend.DocumentClassifier.AugmentedManifestsListItemProperty
+      Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierDocumentsProperty
+      Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierInputDataConfigProperty
+      Stratosphere.Comprehend.DocumentClassifier.DocumentClassifierOutputDataConfigProperty
+      Stratosphere.Comprehend.DocumentClassifier.DocumentReaderConfigProperty
+      Stratosphere.Comprehend.DocumentClassifier.VpcConfigProperty
+      Stratosphere.Comprehend.Flywheel
+      Stratosphere.Comprehend.Flywheel.DataSecurityConfigProperty
+      Stratosphere.Comprehend.Flywheel.DocumentClassificationConfigProperty
+      Stratosphere.Comprehend.Flywheel.EntityRecognitionConfigProperty
+      Stratosphere.Comprehend.Flywheel.EntityTypesListItemProperty
+      Stratosphere.Comprehend.Flywheel.TaskConfigProperty
+      Stratosphere.Comprehend.Flywheel.VpcConfigProperty
+  other-modules:
+      Paths_stratosphere_comprehend
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
