diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon Forecast Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2018-06-26@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-forecast)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.Forecast](http://hackage.haskell.org/package/amazonka-forecast/docs/Amazonka-Forecast.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-forecast` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-forecast.cabal b/amazonka-forecast.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-forecast.cabal
@@ -0,0 +1,225 @@
+cabal-version:      2.2
+name:               amazonka-forecast
+version:            2.0
+synopsis:           Amazon Forecast Service SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2018-06-26@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.Forecast.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.Forecast" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
+
+source-repository head
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-forecast
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.Forecast
+    Amazonka.Forecast.CreateAutoPredictor
+    Amazonka.Forecast.CreateDataset
+    Amazonka.Forecast.CreateDatasetGroup
+    Amazonka.Forecast.CreateDatasetImportJob
+    Amazonka.Forecast.CreateExplainability
+    Amazonka.Forecast.CreateExplainabilityExport
+    Amazonka.Forecast.CreateForecast
+    Amazonka.Forecast.CreateForecastExportJob
+    Amazonka.Forecast.CreateMonitor
+    Amazonka.Forecast.CreatePredictor
+    Amazonka.Forecast.CreatePredictorBacktestExportJob
+    Amazonka.Forecast.CreateWhatIfAnalysis
+    Amazonka.Forecast.CreateWhatIfForecast
+    Amazonka.Forecast.CreateWhatIfForecastExport
+    Amazonka.Forecast.DeleteDataset
+    Amazonka.Forecast.DeleteDatasetGroup
+    Amazonka.Forecast.DeleteDatasetImportJob
+    Amazonka.Forecast.DeleteExplainability
+    Amazonka.Forecast.DeleteExplainabilityExport
+    Amazonka.Forecast.DeleteForecast
+    Amazonka.Forecast.DeleteForecastExportJob
+    Amazonka.Forecast.DeleteMonitor
+    Amazonka.Forecast.DeletePredictor
+    Amazonka.Forecast.DeletePredictorBacktestExportJob
+    Amazonka.Forecast.DeleteResourceTree
+    Amazonka.Forecast.DeleteWhatIfAnalysis
+    Amazonka.Forecast.DeleteWhatIfForecast
+    Amazonka.Forecast.DeleteWhatIfForecastExport
+    Amazonka.Forecast.DescribeAutoPredictor
+    Amazonka.Forecast.DescribeDataset
+    Amazonka.Forecast.DescribeDatasetGroup
+    Amazonka.Forecast.DescribeDatasetImportJob
+    Amazonka.Forecast.DescribeExplainability
+    Amazonka.Forecast.DescribeExplainabilityExport
+    Amazonka.Forecast.DescribeForecast
+    Amazonka.Forecast.DescribeForecastExportJob
+    Amazonka.Forecast.DescribeMonitor
+    Amazonka.Forecast.DescribePredictor
+    Amazonka.Forecast.DescribePredictorBacktestExportJob
+    Amazonka.Forecast.DescribeWhatIfAnalysis
+    Amazonka.Forecast.DescribeWhatIfForecast
+    Amazonka.Forecast.DescribeWhatIfForecastExport
+    Amazonka.Forecast.GetAccuracyMetrics
+    Amazonka.Forecast.Lens
+    Amazonka.Forecast.ListDatasetGroups
+    Amazonka.Forecast.ListDatasetImportJobs
+    Amazonka.Forecast.ListDatasets
+    Amazonka.Forecast.ListExplainabilities
+    Amazonka.Forecast.ListExplainabilityExports
+    Amazonka.Forecast.ListForecastExportJobs
+    Amazonka.Forecast.ListForecasts
+    Amazonka.Forecast.ListMonitorEvaluations
+    Amazonka.Forecast.ListMonitors
+    Amazonka.Forecast.ListPredictorBacktestExportJobs
+    Amazonka.Forecast.ListPredictors
+    Amazonka.Forecast.ListTagsForResource
+    Amazonka.Forecast.ListWhatIfAnalyses
+    Amazonka.Forecast.ListWhatIfForecastExports
+    Amazonka.Forecast.ListWhatIfForecasts
+    Amazonka.Forecast.ResumeResource
+    Amazonka.Forecast.StopResource
+    Amazonka.Forecast.TagResource
+    Amazonka.Forecast.Types
+    Amazonka.Forecast.Types.Action
+    Amazonka.Forecast.Types.AdditionalDataset
+    Amazonka.Forecast.Types.AttributeConfig
+    Amazonka.Forecast.Types.AttributeType
+    Amazonka.Forecast.Types.AutoMLOverrideStrategy
+    Amazonka.Forecast.Types.Baseline
+    Amazonka.Forecast.Types.BaselineMetric
+    Amazonka.Forecast.Types.CategoricalParameterRange
+    Amazonka.Forecast.Types.Condition
+    Amazonka.Forecast.Types.ContinuousParameterRange
+    Amazonka.Forecast.Types.DataConfig
+    Amazonka.Forecast.Types.DataDestination
+    Amazonka.Forecast.Types.DatasetGroupSummary
+    Amazonka.Forecast.Types.DatasetImportJobSummary
+    Amazonka.Forecast.Types.DatasetSummary
+    Amazonka.Forecast.Types.DatasetType
+    Amazonka.Forecast.Types.DataSource
+    Amazonka.Forecast.Types.DayOfWeek
+    Amazonka.Forecast.Types.Domain
+    Amazonka.Forecast.Types.EncryptionConfig
+    Amazonka.Forecast.Types.ErrorMetric
+    Amazonka.Forecast.Types.EvaluationParameters
+    Amazonka.Forecast.Types.EvaluationResult
+    Amazonka.Forecast.Types.EvaluationType
+    Amazonka.Forecast.Types.ExplainabilityConfig
+    Amazonka.Forecast.Types.ExplainabilityExportSummary
+    Amazonka.Forecast.Types.ExplainabilityInfo
+    Amazonka.Forecast.Types.ExplainabilitySummary
+    Amazonka.Forecast.Types.Featurization
+    Amazonka.Forecast.Types.FeaturizationConfig
+    Amazonka.Forecast.Types.FeaturizationMethod
+    Amazonka.Forecast.Types.FeaturizationMethodName
+    Amazonka.Forecast.Types.Filter
+    Amazonka.Forecast.Types.FilterConditionString
+    Amazonka.Forecast.Types.ForecastExportJobSummary
+    Amazonka.Forecast.Types.ForecastSummary
+    Amazonka.Forecast.Types.HyperParameterTuningJobConfig
+    Amazonka.Forecast.Types.InputDataConfig
+    Amazonka.Forecast.Types.IntegerParameterRange
+    Amazonka.Forecast.Types.MetricResult
+    Amazonka.Forecast.Types.Metrics
+    Amazonka.Forecast.Types.MonitorConfig
+    Amazonka.Forecast.Types.MonitorDataSource
+    Amazonka.Forecast.Types.MonitorInfo
+    Amazonka.Forecast.Types.MonitorSummary
+    Amazonka.Forecast.Types.Month
+    Amazonka.Forecast.Types.Operation
+    Amazonka.Forecast.Types.OptimizationMetric
+    Amazonka.Forecast.Types.ParameterRanges
+    Amazonka.Forecast.Types.PredictorBacktestExportJobSummary
+    Amazonka.Forecast.Types.PredictorBaseline
+    Amazonka.Forecast.Types.PredictorEvent
+    Amazonka.Forecast.Types.PredictorExecution
+    Amazonka.Forecast.Types.PredictorExecutionDetails
+    Amazonka.Forecast.Types.PredictorMonitorEvaluation
+    Amazonka.Forecast.Types.PredictorSummary
+    Amazonka.Forecast.Types.ReferencePredictorSummary
+    Amazonka.Forecast.Types.S3Config
+    Amazonka.Forecast.Types.ScalingType
+    Amazonka.Forecast.Types.Schema
+    Amazonka.Forecast.Types.SchemaAttribute
+    Amazonka.Forecast.Types.State
+    Amazonka.Forecast.Types.Statistics
+    Amazonka.Forecast.Types.SupplementaryFeature
+    Amazonka.Forecast.Types.Tag
+    Amazonka.Forecast.Types.TestWindowSummary
+    Amazonka.Forecast.Types.TimeAlignmentBoundary
+    Amazonka.Forecast.Types.TimePointGranularity
+    Amazonka.Forecast.Types.TimeSeriesCondition
+    Amazonka.Forecast.Types.TimeSeriesGranularity
+    Amazonka.Forecast.Types.TimeSeriesIdentifiers
+    Amazonka.Forecast.Types.TimeSeriesReplacementsDataSource
+    Amazonka.Forecast.Types.TimeSeriesSelector
+    Amazonka.Forecast.Types.TimeSeriesTransformation
+    Amazonka.Forecast.Types.WeightedQuantileLoss
+    Amazonka.Forecast.Types.WhatIfAnalysisSummary
+    Amazonka.Forecast.Types.WhatIfForecastExportSummary
+    Amazonka.Forecast.Types.WhatIfForecastSummary
+    Amazonka.Forecast.Types.WindowSummary
+    Amazonka.Forecast.UntagResource
+    Amazonka.Forecast.UpdateDatasetGroup
+    Amazonka.Forecast.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-forecast-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Forecast
+    Test.Amazonka.Forecast.Internal
+    Test.Amazonka.Gen.Forecast
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-forecast
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateAutoPredictor.yaml b/fixture/CreateAutoPredictor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAutoPredictor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateAutoPredictorResponse.proto b/fixture/CreateAutoPredictorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAutoPredictorResponse.proto
diff --git a/fixture/CreateDataset.yaml b/fixture/CreateDataset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDataset.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDatasetGroup.yaml b/fixture/CreateDatasetGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDatasetGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDatasetGroupResponse.proto b/fixture/CreateDatasetGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDatasetGroupResponse.proto
diff --git a/fixture/CreateDatasetImportJob.yaml b/fixture/CreateDatasetImportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDatasetImportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDatasetImportJobResponse.proto b/fixture/CreateDatasetImportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDatasetImportJobResponse.proto
diff --git a/fixture/CreateDatasetResponse.proto b/fixture/CreateDatasetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDatasetResponse.proto
diff --git a/fixture/CreateExplainability.yaml b/fixture/CreateExplainability.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExplainability.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateExplainabilityExport.yaml b/fixture/CreateExplainabilityExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExplainabilityExport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateExplainabilityExportResponse.proto b/fixture/CreateExplainabilityExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExplainabilityExportResponse.proto
diff --git a/fixture/CreateExplainabilityResponse.proto b/fixture/CreateExplainabilityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateExplainabilityResponse.proto
diff --git a/fixture/CreateForecast.yaml b/fixture/CreateForecast.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateForecast.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateForecastExportJob.yaml b/fixture/CreateForecastExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateForecastExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateForecastExportJobResponse.proto b/fixture/CreateForecastExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateForecastExportJobResponse.proto
diff --git a/fixture/CreateForecastResponse.proto b/fixture/CreateForecastResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateForecastResponse.proto
diff --git a/fixture/CreateMonitor.yaml b/fixture/CreateMonitor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMonitor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateMonitorResponse.proto b/fixture/CreateMonitorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateMonitorResponse.proto
diff --git a/fixture/CreatePredictor.yaml b/fixture/CreatePredictor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePredictor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreatePredictorBacktestExportJob.yaml b/fixture/CreatePredictorBacktestExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePredictorBacktestExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreatePredictorBacktestExportJobResponse.proto b/fixture/CreatePredictorBacktestExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePredictorBacktestExportJobResponse.proto
diff --git a/fixture/CreatePredictorResponse.proto b/fixture/CreatePredictorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePredictorResponse.proto
diff --git a/fixture/CreateWhatIfAnalysis.yaml b/fixture/CreateWhatIfAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWhatIfAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateWhatIfAnalysisResponse.proto b/fixture/CreateWhatIfAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWhatIfAnalysisResponse.proto
diff --git a/fixture/CreateWhatIfForecast.yaml b/fixture/CreateWhatIfForecast.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWhatIfForecast.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateWhatIfForecastExport.yaml b/fixture/CreateWhatIfForecastExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWhatIfForecastExport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateWhatIfForecastExportResponse.proto b/fixture/CreateWhatIfForecastExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWhatIfForecastExportResponse.proto
diff --git a/fixture/CreateWhatIfForecastResponse.proto b/fixture/CreateWhatIfForecastResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateWhatIfForecastResponse.proto
diff --git a/fixture/DeleteDataset.yaml b/fixture/DeleteDataset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDataset.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDatasetGroup.yaml b/fixture/DeleteDatasetGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDatasetGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDatasetGroupResponse.proto b/fixture/DeleteDatasetGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDatasetGroupResponse.proto
diff --git a/fixture/DeleteDatasetImportJob.yaml b/fixture/DeleteDatasetImportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDatasetImportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDatasetImportJobResponse.proto b/fixture/DeleteDatasetImportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDatasetImportJobResponse.proto
diff --git a/fixture/DeleteDatasetResponse.proto b/fixture/DeleteDatasetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDatasetResponse.proto
diff --git a/fixture/DeleteExplainability.yaml b/fixture/DeleteExplainability.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExplainability.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteExplainabilityExport.yaml b/fixture/DeleteExplainabilityExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExplainabilityExport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteExplainabilityExportResponse.proto b/fixture/DeleteExplainabilityExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExplainabilityExportResponse.proto
diff --git a/fixture/DeleteExplainabilityResponse.proto b/fixture/DeleteExplainabilityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteExplainabilityResponse.proto
diff --git a/fixture/DeleteForecast.yaml b/fixture/DeleteForecast.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteForecast.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteForecastExportJob.yaml b/fixture/DeleteForecastExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteForecastExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteForecastExportJobResponse.proto b/fixture/DeleteForecastExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteForecastExportJobResponse.proto
diff --git a/fixture/DeleteForecastResponse.proto b/fixture/DeleteForecastResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteForecastResponse.proto
diff --git a/fixture/DeleteMonitor.yaml b/fixture/DeleteMonitor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMonitor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteMonitorResponse.proto b/fixture/DeleteMonitorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteMonitorResponse.proto
diff --git a/fixture/DeletePredictor.yaml b/fixture/DeletePredictor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePredictor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeletePredictorBacktestExportJob.yaml b/fixture/DeletePredictorBacktestExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePredictorBacktestExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeletePredictorBacktestExportJobResponse.proto b/fixture/DeletePredictorBacktestExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePredictorBacktestExportJobResponse.proto
diff --git a/fixture/DeletePredictorResponse.proto b/fixture/DeletePredictorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePredictorResponse.proto
diff --git a/fixture/DeleteResourceTree.yaml b/fixture/DeleteResourceTree.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResourceTree.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteResourceTreeResponse.proto b/fixture/DeleteResourceTreeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteResourceTreeResponse.proto
diff --git a/fixture/DeleteWhatIfAnalysis.yaml b/fixture/DeleteWhatIfAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWhatIfAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWhatIfAnalysisResponse.proto b/fixture/DeleteWhatIfAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWhatIfAnalysisResponse.proto
diff --git a/fixture/DeleteWhatIfForecast.yaml b/fixture/DeleteWhatIfForecast.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWhatIfForecast.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWhatIfForecastExport.yaml b/fixture/DeleteWhatIfForecastExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWhatIfForecastExport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteWhatIfForecastExportResponse.proto b/fixture/DeleteWhatIfForecastExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWhatIfForecastExportResponse.proto
diff --git a/fixture/DeleteWhatIfForecastResponse.proto b/fixture/DeleteWhatIfForecastResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteWhatIfForecastResponse.proto
diff --git a/fixture/DescribeAutoPredictor.yaml b/fixture/DescribeAutoPredictor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAutoPredictor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAutoPredictorResponse.proto b/fixture/DescribeAutoPredictorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAutoPredictorResponse.proto
diff --git a/fixture/DescribeDataset.yaml b/fixture/DescribeDataset.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDataset.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeDatasetGroup.yaml b/fixture/DescribeDatasetGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDatasetGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeDatasetGroupResponse.proto b/fixture/DescribeDatasetGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDatasetGroupResponse.proto
diff --git a/fixture/DescribeDatasetImportJob.yaml b/fixture/DescribeDatasetImportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDatasetImportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeDatasetImportJobResponse.proto b/fixture/DescribeDatasetImportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDatasetImportJobResponse.proto
diff --git a/fixture/DescribeDatasetResponse.proto b/fixture/DescribeDatasetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDatasetResponse.proto
diff --git a/fixture/DescribeExplainability.yaml b/fixture/DescribeExplainability.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExplainability.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeExplainabilityExport.yaml b/fixture/DescribeExplainabilityExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExplainabilityExport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeExplainabilityExportResponse.proto b/fixture/DescribeExplainabilityExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExplainabilityExportResponse.proto
diff --git a/fixture/DescribeExplainabilityResponse.proto b/fixture/DescribeExplainabilityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExplainabilityResponse.proto
diff --git a/fixture/DescribeForecast.yaml b/fixture/DescribeForecast.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeForecast.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeForecastExportJob.yaml b/fixture/DescribeForecastExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeForecastExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeForecastExportJobResponse.proto b/fixture/DescribeForecastExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeForecastExportJobResponse.proto
diff --git a/fixture/DescribeForecastResponse.proto b/fixture/DescribeForecastResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeForecastResponse.proto
diff --git a/fixture/DescribeMonitor.yaml b/fixture/DescribeMonitor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeMonitor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeMonitorResponse.proto b/fixture/DescribeMonitorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeMonitorResponse.proto
diff --git a/fixture/DescribePredictor.yaml b/fixture/DescribePredictor.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePredictor.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePredictorBacktestExportJob.yaml b/fixture/DescribePredictorBacktestExportJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePredictorBacktestExportJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePredictorBacktestExportJobResponse.proto b/fixture/DescribePredictorBacktestExportJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePredictorBacktestExportJobResponse.proto
diff --git a/fixture/DescribePredictorResponse.proto b/fixture/DescribePredictorResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePredictorResponse.proto
diff --git a/fixture/DescribeWhatIfAnalysis.yaml b/fixture/DescribeWhatIfAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWhatIfAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWhatIfAnalysisResponse.proto b/fixture/DescribeWhatIfAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWhatIfAnalysisResponse.proto
diff --git a/fixture/DescribeWhatIfForecast.yaml b/fixture/DescribeWhatIfForecast.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWhatIfForecast.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWhatIfForecastExport.yaml b/fixture/DescribeWhatIfForecastExport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWhatIfForecastExport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeWhatIfForecastExportResponse.proto b/fixture/DescribeWhatIfForecastExportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWhatIfForecastExportResponse.proto
diff --git a/fixture/DescribeWhatIfForecastResponse.proto b/fixture/DescribeWhatIfForecastResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeWhatIfForecastResponse.proto
diff --git a/fixture/GetAccuracyMetrics.yaml b/fixture/GetAccuracyMetrics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccuracyMetrics.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetAccuracyMetricsResponse.proto b/fixture/GetAccuracyMetricsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAccuracyMetricsResponse.proto
diff --git a/fixture/ListDatasetGroups.yaml b/fixture/ListDatasetGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDatasetGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDatasetGroupsResponse.proto b/fixture/ListDatasetGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDatasetGroupsResponse.proto
diff --git a/fixture/ListDatasetImportJobs.yaml b/fixture/ListDatasetImportJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDatasetImportJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDatasetImportJobsResponse.proto b/fixture/ListDatasetImportJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDatasetImportJobsResponse.proto
diff --git a/fixture/ListDatasets.yaml b/fixture/ListDatasets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListDatasets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListDatasetsResponse.proto b/fixture/ListDatasetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListDatasetsResponse.proto
diff --git a/fixture/ListExplainabilities.yaml b/fixture/ListExplainabilities.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExplainabilities.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListExplainabilitiesResponse.proto b/fixture/ListExplainabilitiesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExplainabilitiesResponse.proto
diff --git a/fixture/ListExplainabilityExports.yaml b/fixture/ListExplainabilityExports.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListExplainabilityExports.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListExplainabilityExportsResponse.proto b/fixture/ListExplainabilityExportsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListExplainabilityExportsResponse.proto
diff --git a/fixture/ListForecastExportJobs.yaml b/fixture/ListForecastExportJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListForecastExportJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListForecastExportJobsResponse.proto b/fixture/ListForecastExportJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListForecastExportJobsResponse.proto
diff --git a/fixture/ListForecasts.yaml b/fixture/ListForecasts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListForecasts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListForecastsResponse.proto b/fixture/ListForecastsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListForecastsResponse.proto
diff --git a/fixture/ListMonitorEvaluations.yaml b/fixture/ListMonitorEvaluations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMonitorEvaluations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListMonitorEvaluationsResponse.proto b/fixture/ListMonitorEvaluationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMonitorEvaluationsResponse.proto
diff --git a/fixture/ListMonitors.yaml b/fixture/ListMonitors.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListMonitors.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListMonitorsResponse.proto b/fixture/ListMonitorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListMonitorsResponse.proto
diff --git a/fixture/ListPredictorBacktestExportJobs.yaml b/fixture/ListPredictorBacktestExportJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPredictorBacktestExportJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListPredictorBacktestExportJobsResponse.proto b/fixture/ListPredictorBacktestExportJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPredictorBacktestExportJobsResponse.proto
diff --git a/fixture/ListPredictors.yaml b/fixture/ListPredictors.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListPredictors.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListPredictorsResponse.proto b/fixture/ListPredictorsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListPredictorsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/ListWhatIfAnalyses.yaml b/fixture/ListWhatIfAnalyses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWhatIfAnalyses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListWhatIfAnalysesResponse.proto b/fixture/ListWhatIfAnalysesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWhatIfAnalysesResponse.proto
diff --git a/fixture/ListWhatIfForecastExports.yaml b/fixture/ListWhatIfForecastExports.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWhatIfForecastExports.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListWhatIfForecastExportsResponse.proto b/fixture/ListWhatIfForecastExportsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWhatIfForecastExportsResponse.proto
diff --git a/fixture/ListWhatIfForecasts.yaml b/fixture/ListWhatIfForecasts.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListWhatIfForecasts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListWhatIfForecastsResponse.proto b/fixture/ListWhatIfForecastsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListWhatIfForecastsResponse.proto
diff --git a/fixture/ResumeResource.yaml b/fixture/ResumeResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResumeResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResumeResourceResponse.proto b/fixture/ResumeResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResumeResourceResponse.proto
diff --git a/fixture/StopResource.yaml b/fixture/StopResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopResourceResponse.proto b/fixture/StopResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopResourceResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/fixture/UpdateDatasetGroup.yaml b/fixture/UpdateDatasetGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDatasetGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/forecast/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  forecast.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDatasetGroupResponse.proto b/fixture/UpdateDatasetGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDatasetGroupResponse.proto
diff --git a/gen/Amazonka/Forecast.hs b/gen/Amazonka/Forecast.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast.hs
@@ -0,0 +1,820 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Forecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2018-06-26@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Provides APIs for creating and managing Amazon Forecast resources.
+module Amazonka.Forecast
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidInputException
+    _InvalidInputException,
+
+    -- ** InvalidNextTokenException
+    _InvalidNextTokenException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** ResourceAlreadyExistsException
+    _ResourceAlreadyExistsException,
+
+    -- ** ResourceInUseException
+    _ResourceInUseException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateAutoPredictor
+    CreateAutoPredictor (CreateAutoPredictor'),
+    newCreateAutoPredictor,
+    CreateAutoPredictorResponse (CreateAutoPredictorResponse'),
+    newCreateAutoPredictorResponse,
+
+    -- ** CreateDataset
+    CreateDataset (CreateDataset'),
+    newCreateDataset,
+    CreateDatasetResponse (CreateDatasetResponse'),
+    newCreateDatasetResponse,
+
+    -- ** CreateDatasetGroup
+    CreateDatasetGroup (CreateDatasetGroup'),
+    newCreateDatasetGroup,
+    CreateDatasetGroupResponse (CreateDatasetGroupResponse'),
+    newCreateDatasetGroupResponse,
+
+    -- ** CreateDatasetImportJob
+    CreateDatasetImportJob (CreateDatasetImportJob'),
+    newCreateDatasetImportJob,
+    CreateDatasetImportJobResponse (CreateDatasetImportJobResponse'),
+    newCreateDatasetImportJobResponse,
+
+    -- ** CreateExplainability
+    CreateExplainability (CreateExplainability'),
+    newCreateExplainability,
+    CreateExplainabilityResponse (CreateExplainabilityResponse'),
+    newCreateExplainabilityResponse,
+
+    -- ** CreateExplainabilityExport
+    CreateExplainabilityExport (CreateExplainabilityExport'),
+    newCreateExplainabilityExport,
+    CreateExplainabilityExportResponse (CreateExplainabilityExportResponse'),
+    newCreateExplainabilityExportResponse,
+
+    -- ** CreateForecast
+    CreateForecast (CreateForecast'),
+    newCreateForecast,
+    CreateForecastResponse (CreateForecastResponse'),
+    newCreateForecastResponse,
+
+    -- ** CreateForecastExportJob
+    CreateForecastExportJob (CreateForecastExportJob'),
+    newCreateForecastExportJob,
+    CreateForecastExportJobResponse (CreateForecastExportJobResponse'),
+    newCreateForecastExportJobResponse,
+
+    -- ** CreateMonitor
+    CreateMonitor (CreateMonitor'),
+    newCreateMonitor,
+    CreateMonitorResponse (CreateMonitorResponse'),
+    newCreateMonitorResponse,
+
+    -- ** CreatePredictor
+    CreatePredictor (CreatePredictor'),
+    newCreatePredictor,
+    CreatePredictorResponse (CreatePredictorResponse'),
+    newCreatePredictorResponse,
+
+    -- ** CreatePredictorBacktestExportJob
+    CreatePredictorBacktestExportJob (CreatePredictorBacktestExportJob'),
+    newCreatePredictorBacktestExportJob,
+    CreatePredictorBacktestExportJobResponse (CreatePredictorBacktestExportJobResponse'),
+    newCreatePredictorBacktestExportJobResponse,
+
+    -- ** CreateWhatIfAnalysis
+    CreateWhatIfAnalysis (CreateWhatIfAnalysis'),
+    newCreateWhatIfAnalysis,
+    CreateWhatIfAnalysisResponse (CreateWhatIfAnalysisResponse'),
+    newCreateWhatIfAnalysisResponse,
+
+    -- ** CreateWhatIfForecast
+    CreateWhatIfForecast (CreateWhatIfForecast'),
+    newCreateWhatIfForecast,
+    CreateWhatIfForecastResponse (CreateWhatIfForecastResponse'),
+    newCreateWhatIfForecastResponse,
+
+    -- ** CreateWhatIfForecastExport
+    CreateWhatIfForecastExport (CreateWhatIfForecastExport'),
+    newCreateWhatIfForecastExport,
+    CreateWhatIfForecastExportResponse (CreateWhatIfForecastExportResponse'),
+    newCreateWhatIfForecastExportResponse,
+
+    -- ** DeleteDataset
+    DeleteDataset (DeleteDataset'),
+    newDeleteDataset,
+    DeleteDatasetResponse (DeleteDatasetResponse'),
+    newDeleteDatasetResponse,
+
+    -- ** DeleteDatasetGroup
+    DeleteDatasetGroup (DeleteDatasetGroup'),
+    newDeleteDatasetGroup,
+    DeleteDatasetGroupResponse (DeleteDatasetGroupResponse'),
+    newDeleteDatasetGroupResponse,
+
+    -- ** DeleteDatasetImportJob
+    DeleteDatasetImportJob (DeleteDatasetImportJob'),
+    newDeleteDatasetImportJob,
+    DeleteDatasetImportJobResponse (DeleteDatasetImportJobResponse'),
+    newDeleteDatasetImportJobResponse,
+
+    -- ** DeleteExplainability
+    DeleteExplainability (DeleteExplainability'),
+    newDeleteExplainability,
+    DeleteExplainabilityResponse (DeleteExplainabilityResponse'),
+    newDeleteExplainabilityResponse,
+
+    -- ** DeleteExplainabilityExport
+    DeleteExplainabilityExport (DeleteExplainabilityExport'),
+    newDeleteExplainabilityExport,
+    DeleteExplainabilityExportResponse (DeleteExplainabilityExportResponse'),
+    newDeleteExplainabilityExportResponse,
+
+    -- ** DeleteForecast
+    DeleteForecast (DeleteForecast'),
+    newDeleteForecast,
+    DeleteForecastResponse (DeleteForecastResponse'),
+    newDeleteForecastResponse,
+
+    -- ** DeleteForecastExportJob
+    DeleteForecastExportJob (DeleteForecastExportJob'),
+    newDeleteForecastExportJob,
+    DeleteForecastExportJobResponse (DeleteForecastExportJobResponse'),
+    newDeleteForecastExportJobResponse,
+
+    -- ** DeleteMonitor
+    DeleteMonitor (DeleteMonitor'),
+    newDeleteMonitor,
+    DeleteMonitorResponse (DeleteMonitorResponse'),
+    newDeleteMonitorResponse,
+
+    -- ** DeletePredictor
+    DeletePredictor (DeletePredictor'),
+    newDeletePredictor,
+    DeletePredictorResponse (DeletePredictorResponse'),
+    newDeletePredictorResponse,
+
+    -- ** DeletePredictorBacktestExportJob
+    DeletePredictorBacktestExportJob (DeletePredictorBacktestExportJob'),
+    newDeletePredictorBacktestExportJob,
+    DeletePredictorBacktestExportJobResponse (DeletePredictorBacktestExportJobResponse'),
+    newDeletePredictorBacktestExportJobResponse,
+
+    -- ** DeleteResourceTree
+    DeleteResourceTree (DeleteResourceTree'),
+    newDeleteResourceTree,
+    DeleteResourceTreeResponse (DeleteResourceTreeResponse'),
+    newDeleteResourceTreeResponse,
+
+    -- ** DeleteWhatIfAnalysis
+    DeleteWhatIfAnalysis (DeleteWhatIfAnalysis'),
+    newDeleteWhatIfAnalysis,
+    DeleteWhatIfAnalysisResponse (DeleteWhatIfAnalysisResponse'),
+    newDeleteWhatIfAnalysisResponse,
+
+    -- ** DeleteWhatIfForecast
+    DeleteWhatIfForecast (DeleteWhatIfForecast'),
+    newDeleteWhatIfForecast,
+    DeleteWhatIfForecastResponse (DeleteWhatIfForecastResponse'),
+    newDeleteWhatIfForecastResponse,
+
+    -- ** DeleteWhatIfForecastExport
+    DeleteWhatIfForecastExport (DeleteWhatIfForecastExport'),
+    newDeleteWhatIfForecastExport,
+    DeleteWhatIfForecastExportResponse (DeleteWhatIfForecastExportResponse'),
+    newDeleteWhatIfForecastExportResponse,
+
+    -- ** DescribeAutoPredictor
+    DescribeAutoPredictor (DescribeAutoPredictor'),
+    newDescribeAutoPredictor,
+    DescribeAutoPredictorResponse (DescribeAutoPredictorResponse'),
+    newDescribeAutoPredictorResponse,
+
+    -- ** DescribeDataset
+    DescribeDataset (DescribeDataset'),
+    newDescribeDataset,
+    DescribeDatasetResponse (DescribeDatasetResponse'),
+    newDescribeDatasetResponse,
+
+    -- ** DescribeDatasetGroup
+    DescribeDatasetGroup (DescribeDatasetGroup'),
+    newDescribeDatasetGroup,
+    DescribeDatasetGroupResponse (DescribeDatasetGroupResponse'),
+    newDescribeDatasetGroupResponse,
+
+    -- ** DescribeDatasetImportJob
+    DescribeDatasetImportJob (DescribeDatasetImportJob'),
+    newDescribeDatasetImportJob,
+    DescribeDatasetImportJobResponse (DescribeDatasetImportJobResponse'),
+    newDescribeDatasetImportJobResponse,
+
+    -- ** DescribeExplainability
+    DescribeExplainability (DescribeExplainability'),
+    newDescribeExplainability,
+    DescribeExplainabilityResponse (DescribeExplainabilityResponse'),
+    newDescribeExplainabilityResponse,
+
+    -- ** DescribeExplainabilityExport
+    DescribeExplainabilityExport (DescribeExplainabilityExport'),
+    newDescribeExplainabilityExport,
+    DescribeExplainabilityExportResponse (DescribeExplainabilityExportResponse'),
+    newDescribeExplainabilityExportResponse,
+
+    -- ** DescribeForecast
+    DescribeForecast (DescribeForecast'),
+    newDescribeForecast,
+    DescribeForecastResponse (DescribeForecastResponse'),
+    newDescribeForecastResponse,
+
+    -- ** DescribeForecastExportJob
+    DescribeForecastExportJob (DescribeForecastExportJob'),
+    newDescribeForecastExportJob,
+    DescribeForecastExportJobResponse (DescribeForecastExportJobResponse'),
+    newDescribeForecastExportJobResponse,
+
+    -- ** DescribeMonitor
+    DescribeMonitor (DescribeMonitor'),
+    newDescribeMonitor,
+    DescribeMonitorResponse (DescribeMonitorResponse'),
+    newDescribeMonitorResponse,
+
+    -- ** DescribePredictor
+    DescribePredictor (DescribePredictor'),
+    newDescribePredictor,
+    DescribePredictorResponse (DescribePredictorResponse'),
+    newDescribePredictorResponse,
+
+    -- ** DescribePredictorBacktestExportJob
+    DescribePredictorBacktestExportJob (DescribePredictorBacktestExportJob'),
+    newDescribePredictorBacktestExportJob,
+    DescribePredictorBacktestExportJobResponse (DescribePredictorBacktestExportJobResponse'),
+    newDescribePredictorBacktestExportJobResponse,
+
+    -- ** DescribeWhatIfAnalysis
+    DescribeWhatIfAnalysis (DescribeWhatIfAnalysis'),
+    newDescribeWhatIfAnalysis,
+    DescribeWhatIfAnalysisResponse (DescribeWhatIfAnalysisResponse'),
+    newDescribeWhatIfAnalysisResponse,
+
+    -- ** DescribeWhatIfForecast
+    DescribeWhatIfForecast (DescribeWhatIfForecast'),
+    newDescribeWhatIfForecast,
+    DescribeWhatIfForecastResponse (DescribeWhatIfForecastResponse'),
+    newDescribeWhatIfForecastResponse,
+
+    -- ** DescribeWhatIfForecastExport
+    DescribeWhatIfForecastExport (DescribeWhatIfForecastExport'),
+    newDescribeWhatIfForecastExport,
+    DescribeWhatIfForecastExportResponse (DescribeWhatIfForecastExportResponse'),
+    newDescribeWhatIfForecastExportResponse,
+
+    -- ** GetAccuracyMetrics
+    GetAccuracyMetrics (GetAccuracyMetrics'),
+    newGetAccuracyMetrics,
+    GetAccuracyMetricsResponse (GetAccuracyMetricsResponse'),
+    newGetAccuracyMetricsResponse,
+
+    -- ** ListDatasetGroups (Paginated)
+    ListDatasetGroups (ListDatasetGroups'),
+    newListDatasetGroups,
+    ListDatasetGroupsResponse (ListDatasetGroupsResponse'),
+    newListDatasetGroupsResponse,
+
+    -- ** ListDatasetImportJobs (Paginated)
+    ListDatasetImportJobs (ListDatasetImportJobs'),
+    newListDatasetImportJobs,
+    ListDatasetImportJobsResponse (ListDatasetImportJobsResponse'),
+    newListDatasetImportJobsResponse,
+
+    -- ** ListDatasets (Paginated)
+    ListDatasets (ListDatasets'),
+    newListDatasets,
+    ListDatasetsResponse (ListDatasetsResponse'),
+    newListDatasetsResponse,
+
+    -- ** ListExplainabilities (Paginated)
+    ListExplainabilities (ListExplainabilities'),
+    newListExplainabilities,
+    ListExplainabilitiesResponse (ListExplainabilitiesResponse'),
+    newListExplainabilitiesResponse,
+
+    -- ** ListExplainabilityExports (Paginated)
+    ListExplainabilityExports (ListExplainabilityExports'),
+    newListExplainabilityExports,
+    ListExplainabilityExportsResponse (ListExplainabilityExportsResponse'),
+    newListExplainabilityExportsResponse,
+
+    -- ** ListForecastExportJobs (Paginated)
+    ListForecastExportJobs (ListForecastExportJobs'),
+    newListForecastExportJobs,
+    ListForecastExportJobsResponse (ListForecastExportJobsResponse'),
+    newListForecastExportJobsResponse,
+
+    -- ** ListForecasts (Paginated)
+    ListForecasts (ListForecasts'),
+    newListForecasts,
+    ListForecastsResponse (ListForecastsResponse'),
+    newListForecastsResponse,
+
+    -- ** ListMonitorEvaluations (Paginated)
+    ListMonitorEvaluations (ListMonitorEvaluations'),
+    newListMonitorEvaluations,
+    ListMonitorEvaluationsResponse (ListMonitorEvaluationsResponse'),
+    newListMonitorEvaluationsResponse,
+
+    -- ** ListMonitors (Paginated)
+    ListMonitors (ListMonitors'),
+    newListMonitors,
+    ListMonitorsResponse (ListMonitorsResponse'),
+    newListMonitorsResponse,
+
+    -- ** ListPredictorBacktestExportJobs (Paginated)
+    ListPredictorBacktestExportJobs (ListPredictorBacktestExportJobs'),
+    newListPredictorBacktestExportJobs,
+    ListPredictorBacktestExportJobsResponse (ListPredictorBacktestExportJobsResponse'),
+    newListPredictorBacktestExportJobsResponse,
+
+    -- ** ListPredictors (Paginated)
+    ListPredictors (ListPredictors'),
+    newListPredictors,
+    ListPredictorsResponse (ListPredictorsResponse'),
+    newListPredictorsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** ListWhatIfAnalyses (Paginated)
+    ListWhatIfAnalyses (ListWhatIfAnalyses'),
+    newListWhatIfAnalyses,
+    ListWhatIfAnalysesResponse (ListWhatIfAnalysesResponse'),
+    newListWhatIfAnalysesResponse,
+
+    -- ** ListWhatIfForecastExports (Paginated)
+    ListWhatIfForecastExports (ListWhatIfForecastExports'),
+    newListWhatIfForecastExports,
+    ListWhatIfForecastExportsResponse (ListWhatIfForecastExportsResponse'),
+    newListWhatIfForecastExportsResponse,
+
+    -- ** ListWhatIfForecasts (Paginated)
+    ListWhatIfForecasts (ListWhatIfForecasts'),
+    newListWhatIfForecasts,
+    ListWhatIfForecastsResponse (ListWhatIfForecastsResponse'),
+    newListWhatIfForecastsResponse,
+
+    -- ** ResumeResource
+    ResumeResource (ResumeResource'),
+    newResumeResource,
+    ResumeResourceResponse (ResumeResourceResponse'),
+    newResumeResourceResponse,
+
+    -- ** StopResource
+    StopResource (StopResource'),
+    newStopResource,
+    StopResourceResponse (StopResourceResponse'),
+    newStopResourceResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateDatasetGroup
+    UpdateDatasetGroup (UpdateDatasetGroup'),
+    newUpdateDatasetGroup,
+    UpdateDatasetGroupResponse (UpdateDatasetGroupResponse'),
+    newUpdateDatasetGroupResponse,
+
+    -- * Types
+
+    -- ** AttributeType
+    AttributeType (..),
+
+    -- ** AutoMLOverrideStrategy
+    AutoMLOverrideStrategy (..),
+
+    -- ** Condition
+    Condition (..),
+
+    -- ** DatasetType
+    DatasetType (..),
+
+    -- ** DayOfWeek
+    DayOfWeek (..),
+
+    -- ** Domain
+    Domain (..),
+
+    -- ** EvaluationType
+    EvaluationType (..),
+
+    -- ** FeaturizationMethodName
+    FeaturizationMethodName (..),
+
+    -- ** FilterConditionString
+    FilterConditionString (..),
+
+    -- ** Month
+    Month (..),
+
+    -- ** Operation
+    Operation (..),
+
+    -- ** OptimizationMetric
+    OptimizationMetric (..),
+
+    -- ** ScalingType
+    ScalingType (..),
+
+    -- ** State
+    State (..),
+
+    -- ** TimePointGranularity
+    TimePointGranularity (..),
+
+    -- ** TimeSeriesGranularity
+    TimeSeriesGranularity (..),
+
+    -- ** Action
+    Action (Action'),
+    newAction,
+
+    -- ** AdditionalDataset
+    AdditionalDataset (AdditionalDataset'),
+    newAdditionalDataset,
+
+    -- ** AttributeConfig
+    AttributeConfig (AttributeConfig'),
+    newAttributeConfig,
+
+    -- ** Baseline
+    Baseline (Baseline'),
+    newBaseline,
+
+    -- ** BaselineMetric
+    BaselineMetric (BaselineMetric'),
+    newBaselineMetric,
+
+    -- ** CategoricalParameterRange
+    CategoricalParameterRange (CategoricalParameterRange'),
+    newCategoricalParameterRange,
+
+    -- ** ContinuousParameterRange
+    ContinuousParameterRange (ContinuousParameterRange'),
+    newContinuousParameterRange,
+
+    -- ** DataConfig
+    DataConfig (DataConfig'),
+    newDataConfig,
+
+    -- ** DataDestination
+    DataDestination (DataDestination'),
+    newDataDestination,
+
+    -- ** DataSource
+    DataSource (DataSource'),
+    newDataSource,
+
+    -- ** DatasetGroupSummary
+    DatasetGroupSummary (DatasetGroupSummary'),
+    newDatasetGroupSummary,
+
+    -- ** DatasetImportJobSummary
+    DatasetImportJobSummary (DatasetImportJobSummary'),
+    newDatasetImportJobSummary,
+
+    -- ** DatasetSummary
+    DatasetSummary (DatasetSummary'),
+    newDatasetSummary,
+
+    -- ** EncryptionConfig
+    EncryptionConfig (EncryptionConfig'),
+    newEncryptionConfig,
+
+    -- ** ErrorMetric
+    ErrorMetric (ErrorMetric'),
+    newErrorMetric,
+
+    -- ** EvaluationParameters
+    EvaluationParameters (EvaluationParameters'),
+    newEvaluationParameters,
+
+    -- ** EvaluationResult
+    EvaluationResult (EvaluationResult'),
+    newEvaluationResult,
+
+    -- ** ExplainabilityConfig
+    ExplainabilityConfig (ExplainabilityConfig'),
+    newExplainabilityConfig,
+
+    -- ** ExplainabilityExportSummary
+    ExplainabilityExportSummary (ExplainabilityExportSummary'),
+    newExplainabilityExportSummary,
+
+    -- ** ExplainabilityInfo
+    ExplainabilityInfo (ExplainabilityInfo'),
+    newExplainabilityInfo,
+
+    -- ** ExplainabilitySummary
+    ExplainabilitySummary (ExplainabilitySummary'),
+    newExplainabilitySummary,
+
+    -- ** Featurization
+    Featurization (Featurization'),
+    newFeaturization,
+
+    -- ** FeaturizationConfig
+    FeaturizationConfig (FeaturizationConfig'),
+    newFeaturizationConfig,
+
+    -- ** FeaturizationMethod
+    FeaturizationMethod (FeaturizationMethod'),
+    newFeaturizationMethod,
+
+    -- ** Filter
+    Filter (Filter'),
+    newFilter,
+
+    -- ** ForecastExportJobSummary
+    ForecastExportJobSummary (ForecastExportJobSummary'),
+    newForecastExportJobSummary,
+
+    -- ** ForecastSummary
+    ForecastSummary (ForecastSummary'),
+    newForecastSummary,
+
+    -- ** HyperParameterTuningJobConfig
+    HyperParameterTuningJobConfig (HyperParameterTuningJobConfig'),
+    newHyperParameterTuningJobConfig,
+
+    -- ** InputDataConfig
+    InputDataConfig (InputDataConfig'),
+    newInputDataConfig,
+
+    -- ** IntegerParameterRange
+    IntegerParameterRange (IntegerParameterRange'),
+    newIntegerParameterRange,
+
+    -- ** MetricResult
+    MetricResult (MetricResult'),
+    newMetricResult,
+
+    -- ** Metrics
+    Metrics (Metrics'),
+    newMetrics,
+
+    -- ** MonitorConfig
+    MonitorConfig (MonitorConfig'),
+    newMonitorConfig,
+
+    -- ** MonitorDataSource
+    MonitorDataSource (MonitorDataSource'),
+    newMonitorDataSource,
+
+    -- ** MonitorInfo
+    MonitorInfo (MonitorInfo'),
+    newMonitorInfo,
+
+    -- ** MonitorSummary
+    MonitorSummary (MonitorSummary'),
+    newMonitorSummary,
+
+    -- ** ParameterRanges
+    ParameterRanges (ParameterRanges'),
+    newParameterRanges,
+
+    -- ** PredictorBacktestExportJobSummary
+    PredictorBacktestExportJobSummary (PredictorBacktestExportJobSummary'),
+    newPredictorBacktestExportJobSummary,
+
+    -- ** PredictorBaseline
+    PredictorBaseline (PredictorBaseline'),
+    newPredictorBaseline,
+
+    -- ** PredictorEvent
+    PredictorEvent (PredictorEvent'),
+    newPredictorEvent,
+
+    -- ** PredictorExecution
+    PredictorExecution (PredictorExecution'),
+    newPredictorExecution,
+
+    -- ** PredictorExecutionDetails
+    PredictorExecutionDetails (PredictorExecutionDetails'),
+    newPredictorExecutionDetails,
+
+    -- ** PredictorMonitorEvaluation
+    PredictorMonitorEvaluation (PredictorMonitorEvaluation'),
+    newPredictorMonitorEvaluation,
+
+    -- ** PredictorSummary
+    PredictorSummary (PredictorSummary'),
+    newPredictorSummary,
+
+    -- ** ReferencePredictorSummary
+    ReferencePredictorSummary (ReferencePredictorSummary'),
+    newReferencePredictorSummary,
+
+    -- ** S3Config
+    S3Config (S3Config'),
+    newS3Config,
+
+    -- ** Schema
+    Schema (Schema'),
+    newSchema,
+
+    -- ** SchemaAttribute
+    SchemaAttribute (SchemaAttribute'),
+    newSchemaAttribute,
+
+    -- ** Statistics
+    Statistics (Statistics'),
+    newStatistics,
+
+    -- ** SupplementaryFeature
+    SupplementaryFeature (SupplementaryFeature'),
+    newSupplementaryFeature,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TestWindowSummary
+    TestWindowSummary (TestWindowSummary'),
+    newTestWindowSummary,
+
+    -- ** TimeAlignmentBoundary
+    TimeAlignmentBoundary (TimeAlignmentBoundary'),
+    newTimeAlignmentBoundary,
+
+    -- ** TimeSeriesCondition
+    TimeSeriesCondition (TimeSeriesCondition'),
+    newTimeSeriesCondition,
+
+    -- ** TimeSeriesIdentifiers
+    TimeSeriesIdentifiers (TimeSeriesIdentifiers'),
+    newTimeSeriesIdentifiers,
+
+    -- ** TimeSeriesReplacementsDataSource
+    TimeSeriesReplacementsDataSource (TimeSeriesReplacementsDataSource'),
+    newTimeSeriesReplacementsDataSource,
+
+    -- ** TimeSeriesSelector
+    TimeSeriesSelector (TimeSeriesSelector'),
+    newTimeSeriesSelector,
+
+    -- ** TimeSeriesTransformation
+    TimeSeriesTransformation (TimeSeriesTransformation'),
+    newTimeSeriesTransformation,
+
+    -- ** WeightedQuantileLoss
+    WeightedQuantileLoss (WeightedQuantileLoss'),
+    newWeightedQuantileLoss,
+
+    -- ** WhatIfAnalysisSummary
+    WhatIfAnalysisSummary (WhatIfAnalysisSummary'),
+    newWhatIfAnalysisSummary,
+
+    -- ** WhatIfForecastExportSummary
+    WhatIfForecastExportSummary (WhatIfForecastExportSummary'),
+    newWhatIfForecastExportSummary,
+
+    -- ** WhatIfForecastSummary
+    WhatIfForecastSummary (WhatIfForecastSummary'),
+    newWhatIfForecastSummary,
+
+    -- ** WindowSummary
+    WindowSummary (WindowSummary'),
+    newWindowSummary,
+  )
+where
+
+import Amazonka.Forecast.CreateAutoPredictor
+import Amazonka.Forecast.CreateDataset
+import Amazonka.Forecast.CreateDatasetGroup
+import Amazonka.Forecast.CreateDatasetImportJob
+import Amazonka.Forecast.CreateExplainability
+import Amazonka.Forecast.CreateExplainabilityExport
+import Amazonka.Forecast.CreateForecast
+import Amazonka.Forecast.CreateForecastExportJob
+import Amazonka.Forecast.CreateMonitor
+import Amazonka.Forecast.CreatePredictor
+import Amazonka.Forecast.CreatePredictorBacktestExportJob
+import Amazonka.Forecast.CreateWhatIfAnalysis
+import Amazonka.Forecast.CreateWhatIfForecast
+import Amazonka.Forecast.CreateWhatIfForecastExport
+import Amazonka.Forecast.DeleteDataset
+import Amazonka.Forecast.DeleteDatasetGroup
+import Amazonka.Forecast.DeleteDatasetImportJob
+import Amazonka.Forecast.DeleteExplainability
+import Amazonka.Forecast.DeleteExplainabilityExport
+import Amazonka.Forecast.DeleteForecast
+import Amazonka.Forecast.DeleteForecastExportJob
+import Amazonka.Forecast.DeleteMonitor
+import Amazonka.Forecast.DeletePredictor
+import Amazonka.Forecast.DeletePredictorBacktestExportJob
+import Amazonka.Forecast.DeleteResourceTree
+import Amazonka.Forecast.DeleteWhatIfAnalysis
+import Amazonka.Forecast.DeleteWhatIfForecast
+import Amazonka.Forecast.DeleteWhatIfForecastExport
+import Amazonka.Forecast.DescribeAutoPredictor
+import Amazonka.Forecast.DescribeDataset
+import Amazonka.Forecast.DescribeDatasetGroup
+import Amazonka.Forecast.DescribeDatasetImportJob
+import Amazonka.Forecast.DescribeExplainability
+import Amazonka.Forecast.DescribeExplainabilityExport
+import Amazonka.Forecast.DescribeForecast
+import Amazonka.Forecast.DescribeForecastExportJob
+import Amazonka.Forecast.DescribeMonitor
+import Amazonka.Forecast.DescribePredictor
+import Amazonka.Forecast.DescribePredictorBacktestExportJob
+import Amazonka.Forecast.DescribeWhatIfAnalysis
+import Amazonka.Forecast.DescribeWhatIfForecast
+import Amazonka.Forecast.DescribeWhatIfForecastExport
+import Amazonka.Forecast.GetAccuracyMetrics
+import Amazonka.Forecast.Lens
+import Amazonka.Forecast.ListDatasetGroups
+import Amazonka.Forecast.ListDatasetImportJobs
+import Amazonka.Forecast.ListDatasets
+import Amazonka.Forecast.ListExplainabilities
+import Amazonka.Forecast.ListExplainabilityExports
+import Amazonka.Forecast.ListForecastExportJobs
+import Amazonka.Forecast.ListForecasts
+import Amazonka.Forecast.ListMonitorEvaluations
+import Amazonka.Forecast.ListMonitors
+import Amazonka.Forecast.ListPredictorBacktestExportJobs
+import Amazonka.Forecast.ListPredictors
+import Amazonka.Forecast.ListTagsForResource
+import Amazonka.Forecast.ListWhatIfAnalyses
+import Amazonka.Forecast.ListWhatIfForecastExports
+import Amazonka.Forecast.ListWhatIfForecasts
+import Amazonka.Forecast.ResumeResource
+import Amazonka.Forecast.StopResource
+import Amazonka.Forecast.TagResource
+import Amazonka.Forecast.Types
+import Amazonka.Forecast.UntagResource
+import Amazonka.Forecast.UpdateDatasetGroup
+import Amazonka.Forecast.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'Forecast'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/Forecast/CreateAutoPredictor.hs b/gen/Amazonka/Forecast/CreateAutoPredictor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateAutoPredictor.hs
@@ -0,0 +1,592 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateAutoPredictor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Amazon Forecast predictor.
+--
+-- Amazon Forecast creates predictors with AutoPredictor, which involves
+-- applying the optimal combination of algorithms to each time series in
+-- your datasets. You can use CreateAutoPredictor to create new predictors
+-- or upgrade\/retrain existing predictors.
+--
+-- __Creating new predictors__
+--
+-- The following parameters are required when creating a new predictor:
+--
+-- -   @PredictorName@ - A unique name for the predictor.
+--
+-- -   @DatasetGroupArn@ - The ARN of the dataset group used to train the
+--     predictor.
+--
+-- -   @ForecastFrequency@ - The granularity of your forecasts (hourly,
+--     daily, weekly, etc).
+--
+-- -   @ForecastHorizon@ - The number of time-steps that the model
+--     predicts. The forecast horizon is also called the prediction length.
+--
+-- When creating a new predictor, do not specify a value for
+-- @ReferencePredictorArn@.
+--
+-- __Upgrading and retraining predictors__
+--
+-- The following parameters are required when retraining or upgrading a
+-- predictor:
+--
+-- -   @PredictorName@ - A unique name for the predictor.
+--
+-- -   @ReferencePredictorArn@ - The ARN of the predictor to retrain or
+--     upgrade.
+--
+-- When upgrading or retraining a predictor, only specify values for the
+-- @ReferencePredictorArn@ and @PredictorName@.
+module Amazonka.Forecast.CreateAutoPredictor
+  ( -- * Creating a Request
+    CreateAutoPredictor (..),
+    newCreateAutoPredictor,
+
+    -- * Request Lenses
+    createAutoPredictor_dataConfig,
+    createAutoPredictor_encryptionConfig,
+    createAutoPredictor_explainPredictor,
+    createAutoPredictor_forecastDimensions,
+    createAutoPredictor_forecastFrequency,
+    createAutoPredictor_forecastHorizon,
+    createAutoPredictor_forecastTypes,
+    createAutoPredictor_monitorConfig,
+    createAutoPredictor_optimizationMetric,
+    createAutoPredictor_referencePredictorArn,
+    createAutoPredictor_tags,
+    createAutoPredictor_timeAlignmentBoundary,
+    createAutoPredictor_predictorName,
+
+    -- * Destructuring the Response
+    CreateAutoPredictorResponse (..),
+    newCreateAutoPredictorResponse,
+
+    -- * Response Lenses
+    createAutoPredictorResponse_predictorArn,
+    createAutoPredictorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAutoPredictor' smart constructor.
+data CreateAutoPredictor = CreateAutoPredictor'
+  { -- | The data configuration for your dataset group and any additional
+    -- datasets.
+    dataConfig :: Prelude.Maybe DataConfig,
+    encryptionConfig :: Prelude.Maybe EncryptionConfig,
+    -- | Create an Explainability resource for the predictor.
+    explainPredictor :: Prelude.Maybe Prelude.Bool,
+    -- | An array of dimension (field) names that specify how to group the
+    -- generated forecast.
+    --
+    -- For example, if you are generating forecasts for item sales across all
+    -- your stores, and your dataset contains a @store_id@ field, you would
+    -- specify @store_id@ as a dimension to group sales forecasts for each
+    -- store.
+    forecastDimensions :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The frequency of predictions in a forecast.
+    --
+    -- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+    -- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+    -- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+    -- and \"5min\" indicates every five minutes.
+    --
+    -- The frequency must be greater than or equal to the TARGET_TIME_SERIES
+    -- dataset frequency.
+    --
+    -- When a RELATED_TIME_SERIES dataset is provided, the frequency must be
+    -- equal to the RELATED_TIME_SERIES dataset frequency.
+    forecastFrequency :: Prelude.Maybe Prelude.Text,
+    -- | The number of time-steps that the model predicts. The forecast horizon
+    -- is also called the prediction length.
+    --
+    -- The maximum forecast horizon is the lesser of 500 time-steps or 1\/4 of
+    -- the TARGET_TIME_SERIES dataset length. If you are retraining an existing
+    -- AutoPredictor, then the maximum forecast horizon is the lesser of 500
+    -- time-steps or 1\/3 of the TARGET_TIME_SERIES dataset length.
+    --
+    -- If you are upgrading to an AutoPredictor or retraining an existing
+    -- AutoPredictor, you cannot update the forecast horizon parameter. You can
+    -- meet this requirement by providing longer time-series in the dataset.
+    forecastHorizon :: Prelude.Maybe Prelude.Int,
+    -- | The forecast types used to train a predictor. You can specify up to five
+    -- forecast types. Forecast types can be quantiles from 0.01 to 0.99, by
+    -- increments of 0.01 or higher. You can also specify the mean forecast
+    -- with @mean@.
+    forecastTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The configuration details for predictor monitoring. Provide a name for
+    -- the monitor resource to enable predictor monitoring.
+    --
+    -- Predictor monitoring allows you to see how your predictor\'s performance
+    -- changes over time. For more information, see
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring.html Predictor Monitoring>.
+    monitorConfig :: Prelude.Maybe MonitorConfig,
+    -- | The accuracy metric used to optimize the predictor.
+    optimizationMetric :: Prelude.Maybe OptimizationMetric,
+    -- | The ARN of the predictor to retrain or upgrade. This parameter is only
+    -- used when retraining or upgrading a predictor. When creating a new
+    -- predictor, do not specify a value for this parameter.
+    --
+    -- When upgrading or retraining a predictor, only specify values for the
+    -- @ReferencePredictorArn@ and @PredictorName@. The value for
+    -- @PredictorName@ must be a unique predictor name.
+    referencePredictorArn :: Prelude.Maybe Prelude.Text,
+    -- | Optional metadata to help you categorize and organize your predictors.
+    -- Each tag consists of a key and an optional value, both of which you
+    -- define. Tag keys and values are case sensitive.
+    --
+    -- The following restrictions apply to tags:
+    --
+    -- -   For each resource, each tag key must be unique and each tag key must
+    --     have one value.
+    --
+    -- -   Maximum number of tags per resource: 50.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8.
+    --
+    -- -   Accepted characters: all letters and numbers, spaces representable
+    --     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+    --     across other services and resources, the character restrictions of
+    --     those services also apply.
+    --
+    -- -   Key prefixes cannot include any upper or lowercase combination of
+    --     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+    --     @aws@ as its prefix but the key does not, Forecast considers it to
+    --     be a user tag and will count against the limit of 50 tags. Tags with
+    --     only the key prefix of @aws@ do not count against your tags per
+    --     resource limit. You cannot edit or delete tag keys with this prefix.
+    tags :: Prelude.Maybe [Tag],
+    -- | The time boundary Forecast uses to align and aggregate any data that
+    -- doesn\'t align with your forecast frequency. Provide the unit of time
+    -- and the time boundary as a key value pair. For more information on
+    -- specifying a time boundary, see
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html#specifying-time-boundary Specifying a Time Boundary>.
+    -- If you don\'t provide a time boundary, Forecast uses a set of
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html#default-time-boundaries Default Time Boundaries>.
+    timeAlignmentBoundary :: Prelude.Maybe TimeAlignmentBoundary,
+    -- | A unique name for the predictor
+    predictorName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAutoPredictor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataConfig', 'createAutoPredictor_dataConfig' - The data configuration for your dataset group and any additional
+-- datasets.
+--
+-- 'encryptionConfig', 'createAutoPredictor_encryptionConfig' - Undocumented member.
+--
+-- 'explainPredictor', 'createAutoPredictor_explainPredictor' - Create an Explainability resource for the predictor.
+--
+-- 'forecastDimensions', 'createAutoPredictor_forecastDimensions' - An array of dimension (field) names that specify how to group the
+-- generated forecast.
+--
+-- For example, if you are generating forecasts for item sales across all
+-- your stores, and your dataset contains a @store_id@ field, you would
+-- specify @store_id@ as a dimension to group sales forecasts for each
+-- store.
+--
+-- 'forecastFrequency', 'createAutoPredictor_forecastFrequency' - The frequency of predictions in a forecast.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+-- and \"5min\" indicates every five minutes.
+--
+-- The frequency must be greater than or equal to the TARGET_TIME_SERIES
+-- dataset frequency.
+--
+-- When a RELATED_TIME_SERIES dataset is provided, the frequency must be
+-- equal to the RELATED_TIME_SERIES dataset frequency.
+--
+-- 'forecastHorizon', 'createAutoPredictor_forecastHorizon' - The number of time-steps that the model predicts. The forecast horizon
+-- is also called the prediction length.
+--
+-- The maximum forecast horizon is the lesser of 500 time-steps or 1\/4 of
+-- the TARGET_TIME_SERIES dataset length. If you are retraining an existing
+-- AutoPredictor, then the maximum forecast horizon is the lesser of 500
+-- time-steps or 1\/3 of the TARGET_TIME_SERIES dataset length.
+--
+-- If you are upgrading to an AutoPredictor or retraining an existing
+-- AutoPredictor, you cannot update the forecast horizon parameter. You can
+-- meet this requirement by providing longer time-series in the dataset.
+--
+-- 'forecastTypes', 'createAutoPredictor_forecastTypes' - The forecast types used to train a predictor. You can specify up to five
+-- forecast types. Forecast types can be quantiles from 0.01 to 0.99, by
+-- increments of 0.01 or higher. You can also specify the mean forecast
+-- with @mean@.
+--
+-- 'monitorConfig', 'createAutoPredictor_monitorConfig' - The configuration details for predictor monitoring. Provide a name for
+-- the monitor resource to enable predictor monitoring.
+--
+-- Predictor monitoring allows you to see how your predictor\'s performance
+-- changes over time. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring.html Predictor Monitoring>.
+--
+-- 'optimizationMetric', 'createAutoPredictor_optimizationMetric' - The accuracy metric used to optimize the predictor.
+--
+-- 'referencePredictorArn', 'createAutoPredictor_referencePredictorArn' - The ARN of the predictor to retrain or upgrade. This parameter is only
+-- used when retraining or upgrading a predictor. When creating a new
+-- predictor, do not specify a value for this parameter.
+--
+-- When upgrading or retraining a predictor, only specify values for the
+-- @ReferencePredictorArn@ and @PredictorName@. The value for
+-- @PredictorName@ must be a unique predictor name.
+--
+-- 'tags', 'createAutoPredictor_tags' - Optional metadata to help you categorize and organize your predictors.
+-- Each tag consists of a key and an optional value, both of which you
+-- define. Tag keys and values are case sensitive.
+--
+-- The following restrictions apply to tags:
+--
+-- -   For each resource, each tag key must be unique and each tag key must
+--     have one value.
+--
+-- -   Maximum number of tags per resource: 50.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Accepted characters: all letters and numbers, spaces representable
+--     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+--     across other services and resources, the character restrictions of
+--     those services also apply.
+--
+-- -   Key prefixes cannot include any upper or lowercase combination of
+--     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+--     @aws@ as its prefix but the key does not, Forecast considers it to
+--     be a user tag and will count against the limit of 50 tags. Tags with
+--     only the key prefix of @aws@ do not count against your tags per
+--     resource limit. You cannot edit or delete tag keys with this prefix.
+--
+-- 'timeAlignmentBoundary', 'createAutoPredictor_timeAlignmentBoundary' - The time boundary Forecast uses to align and aggregate any data that
+-- doesn\'t align with your forecast frequency. Provide the unit of time
+-- and the time boundary as a key value pair. For more information on
+-- specifying a time boundary, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html#specifying-time-boundary Specifying a Time Boundary>.
+-- If you don\'t provide a time boundary, Forecast uses a set of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html#default-time-boundaries Default Time Boundaries>.
+--
+-- 'predictorName', 'createAutoPredictor_predictorName' - A unique name for the predictor
+newCreateAutoPredictor ::
+  -- | 'predictorName'
+  Prelude.Text ->
+  CreateAutoPredictor
+newCreateAutoPredictor pPredictorName_ =
+  CreateAutoPredictor'
+    { dataConfig = Prelude.Nothing,
+      encryptionConfig = Prelude.Nothing,
+      explainPredictor = Prelude.Nothing,
+      forecastDimensions = Prelude.Nothing,
+      forecastFrequency = Prelude.Nothing,
+      forecastHorizon = Prelude.Nothing,
+      forecastTypes = Prelude.Nothing,
+      monitorConfig = Prelude.Nothing,
+      optimizationMetric = Prelude.Nothing,
+      referencePredictorArn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      timeAlignmentBoundary = Prelude.Nothing,
+      predictorName = pPredictorName_
+    }
+
+-- | The data configuration for your dataset group and any additional
+-- datasets.
+createAutoPredictor_dataConfig :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe DataConfig)
+createAutoPredictor_dataConfig = Lens.lens (\CreateAutoPredictor' {dataConfig} -> dataConfig) (\s@CreateAutoPredictor' {} a -> s {dataConfig = a} :: CreateAutoPredictor)
+
+-- | Undocumented member.
+createAutoPredictor_encryptionConfig :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe EncryptionConfig)
+createAutoPredictor_encryptionConfig = Lens.lens (\CreateAutoPredictor' {encryptionConfig} -> encryptionConfig) (\s@CreateAutoPredictor' {} a -> s {encryptionConfig = a} :: CreateAutoPredictor)
+
+-- | Create an Explainability resource for the predictor.
+createAutoPredictor_explainPredictor :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe Prelude.Bool)
+createAutoPredictor_explainPredictor = Lens.lens (\CreateAutoPredictor' {explainPredictor} -> explainPredictor) (\s@CreateAutoPredictor' {} a -> s {explainPredictor = a} :: CreateAutoPredictor)
+
+-- | An array of dimension (field) names that specify how to group the
+-- generated forecast.
+--
+-- For example, if you are generating forecasts for item sales across all
+-- your stores, and your dataset contains a @store_id@ field, you would
+-- specify @store_id@ as a dimension to group sales forecasts for each
+-- store.
+createAutoPredictor_forecastDimensions :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createAutoPredictor_forecastDimensions = Lens.lens (\CreateAutoPredictor' {forecastDimensions} -> forecastDimensions) (\s@CreateAutoPredictor' {} a -> s {forecastDimensions = a} :: CreateAutoPredictor) Prelude.. Lens.mapping Lens.coerced
+
+-- | The frequency of predictions in a forecast.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+-- and \"5min\" indicates every five minutes.
+--
+-- The frequency must be greater than or equal to the TARGET_TIME_SERIES
+-- dataset frequency.
+--
+-- When a RELATED_TIME_SERIES dataset is provided, the frequency must be
+-- equal to the RELATED_TIME_SERIES dataset frequency.
+createAutoPredictor_forecastFrequency :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe Prelude.Text)
+createAutoPredictor_forecastFrequency = Lens.lens (\CreateAutoPredictor' {forecastFrequency} -> forecastFrequency) (\s@CreateAutoPredictor' {} a -> s {forecastFrequency = a} :: CreateAutoPredictor)
+
+-- | The number of time-steps that the model predicts. The forecast horizon
+-- is also called the prediction length.
+--
+-- The maximum forecast horizon is the lesser of 500 time-steps or 1\/4 of
+-- the TARGET_TIME_SERIES dataset length. If you are retraining an existing
+-- AutoPredictor, then the maximum forecast horizon is the lesser of 500
+-- time-steps or 1\/3 of the TARGET_TIME_SERIES dataset length.
+--
+-- If you are upgrading to an AutoPredictor or retraining an existing
+-- AutoPredictor, you cannot update the forecast horizon parameter. You can
+-- meet this requirement by providing longer time-series in the dataset.
+createAutoPredictor_forecastHorizon :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe Prelude.Int)
+createAutoPredictor_forecastHorizon = Lens.lens (\CreateAutoPredictor' {forecastHorizon} -> forecastHorizon) (\s@CreateAutoPredictor' {} a -> s {forecastHorizon = a} :: CreateAutoPredictor)
+
+-- | The forecast types used to train a predictor. You can specify up to five
+-- forecast types. Forecast types can be quantiles from 0.01 to 0.99, by
+-- increments of 0.01 or higher. You can also specify the mean forecast
+-- with @mean@.
+createAutoPredictor_forecastTypes :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createAutoPredictor_forecastTypes = Lens.lens (\CreateAutoPredictor' {forecastTypes} -> forecastTypes) (\s@CreateAutoPredictor' {} a -> s {forecastTypes = a} :: CreateAutoPredictor) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration details for predictor monitoring. Provide a name for
+-- the monitor resource to enable predictor monitoring.
+--
+-- Predictor monitoring allows you to see how your predictor\'s performance
+-- changes over time. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring.html Predictor Monitoring>.
+createAutoPredictor_monitorConfig :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe MonitorConfig)
+createAutoPredictor_monitorConfig = Lens.lens (\CreateAutoPredictor' {monitorConfig} -> monitorConfig) (\s@CreateAutoPredictor' {} a -> s {monitorConfig = a} :: CreateAutoPredictor)
+
+-- | The accuracy metric used to optimize the predictor.
+createAutoPredictor_optimizationMetric :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe OptimizationMetric)
+createAutoPredictor_optimizationMetric = Lens.lens (\CreateAutoPredictor' {optimizationMetric} -> optimizationMetric) (\s@CreateAutoPredictor' {} a -> s {optimizationMetric = a} :: CreateAutoPredictor)
+
+-- | The ARN of the predictor to retrain or upgrade. This parameter is only
+-- used when retraining or upgrading a predictor. When creating a new
+-- predictor, do not specify a value for this parameter.
+--
+-- When upgrading or retraining a predictor, only specify values for the
+-- @ReferencePredictorArn@ and @PredictorName@. The value for
+-- @PredictorName@ must be a unique predictor name.
+createAutoPredictor_referencePredictorArn :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe Prelude.Text)
+createAutoPredictor_referencePredictorArn = Lens.lens (\CreateAutoPredictor' {referencePredictorArn} -> referencePredictorArn) (\s@CreateAutoPredictor' {} a -> s {referencePredictorArn = a} :: CreateAutoPredictor)
+
+-- | Optional metadata to help you categorize and organize your predictors.
+-- Each tag consists of a key and an optional value, both of which you
+-- define. Tag keys and values are case sensitive.
+--
+-- The following restrictions apply to tags:
+--
+-- -   For each resource, each tag key must be unique and each tag key must
+--     have one value.
+--
+-- -   Maximum number of tags per resource: 50.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Accepted characters: all letters and numbers, spaces representable
+--     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+--     across other services and resources, the character restrictions of
+--     those services also apply.
+--
+-- -   Key prefixes cannot include any upper or lowercase combination of
+--     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+--     @aws@ as its prefix but the key does not, Forecast considers it to
+--     be a user tag and will count against the limit of 50 tags. Tags with
+--     only the key prefix of @aws@ do not count against your tags per
+--     resource limit. You cannot edit or delete tag keys with this prefix.
+createAutoPredictor_tags :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe [Tag])
+createAutoPredictor_tags = Lens.lens (\CreateAutoPredictor' {tags} -> tags) (\s@CreateAutoPredictor' {} a -> s {tags = a} :: CreateAutoPredictor) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time boundary Forecast uses to align and aggregate any data that
+-- doesn\'t align with your forecast frequency. Provide the unit of time
+-- and the time boundary as a key value pair. For more information on
+-- specifying a time boundary, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html#specifying-time-boundary Specifying a Time Boundary>.
+-- If you don\'t provide a time boundary, Forecast uses a set of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html#default-time-boundaries Default Time Boundaries>.
+createAutoPredictor_timeAlignmentBoundary :: Lens.Lens' CreateAutoPredictor (Prelude.Maybe TimeAlignmentBoundary)
+createAutoPredictor_timeAlignmentBoundary = Lens.lens (\CreateAutoPredictor' {timeAlignmentBoundary} -> timeAlignmentBoundary) (\s@CreateAutoPredictor' {} a -> s {timeAlignmentBoundary = a} :: CreateAutoPredictor)
+
+-- | A unique name for the predictor
+createAutoPredictor_predictorName :: Lens.Lens' CreateAutoPredictor Prelude.Text
+createAutoPredictor_predictorName = Lens.lens (\CreateAutoPredictor' {predictorName} -> predictorName) (\s@CreateAutoPredictor' {} a -> s {predictorName = a} :: CreateAutoPredictor)
+
+instance Core.AWSRequest CreateAutoPredictor where
+  type
+    AWSResponse CreateAutoPredictor =
+      CreateAutoPredictorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAutoPredictorResponse'
+            Prelude.<$> (x Data..?> "PredictorArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAutoPredictor where
+  hashWithSalt _salt CreateAutoPredictor' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataConfig
+      `Prelude.hashWithSalt` encryptionConfig
+      `Prelude.hashWithSalt` explainPredictor
+      `Prelude.hashWithSalt` forecastDimensions
+      `Prelude.hashWithSalt` forecastFrequency
+      `Prelude.hashWithSalt` forecastHorizon
+      `Prelude.hashWithSalt` forecastTypes
+      `Prelude.hashWithSalt` monitorConfig
+      `Prelude.hashWithSalt` optimizationMetric
+      `Prelude.hashWithSalt` referencePredictorArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeAlignmentBoundary
+      `Prelude.hashWithSalt` predictorName
+
+instance Prelude.NFData CreateAutoPredictor where
+  rnf CreateAutoPredictor' {..} =
+    Prelude.rnf dataConfig
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf explainPredictor
+      `Prelude.seq` Prelude.rnf forecastDimensions
+      `Prelude.seq` Prelude.rnf forecastFrequency
+      `Prelude.seq` Prelude.rnf forecastHorizon
+      `Prelude.seq` Prelude.rnf forecastTypes
+      `Prelude.seq` Prelude.rnf monitorConfig
+      `Prelude.seq` Prelude.rnf optimizationMetric
+      `Prelude.seq` Prelude.rnf referencePredictorArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeAlignmentBoundary
+      `Prelude.seq` Prelude.rnf predictorName
+
+instance Data.ToHeaders CreateAutoPredictor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateAutoPredictor" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAutoPredictor where
+  toJSON CreateAutoPredictor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataConfig" Data..=) Prelude.<$> dataConfig,
+            ("EncryptionConfig" Data..=)
+              Prelude.<$> encryptionConfig,
+            ("ExplainPredictor" Data..=)
+              Prelude.<$> explainPredictor,
+            ("ForecastDimensions" Data..=)
+              Prelude.<$> forecastDimensions,
+            ("ForecastFrequency" Data..=)
+              Prelude.<$> forecastFrequency,
+            ("ForecastHorizon" Data..=)
+              Prelude.<$> forecastHorizon,
+            ("ForecastTypes" Data..=) Prelude.<$> forecastTypes,
+            ("MonitorConfig" Data..=) Prelude.<$> monitorConfig,
+            ("OptimizationMetric" Data..=)
+              Prelude.<$> optimizationMetric,
+            ("ReferencePredictorArn" Data..=)
+              Prelude.<$> referencePredictorArn,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TimeAlignmentBoundary" Data..=)
+              Prelude.<$> timeAlignmentBoundary,
+            Prelude.Just
+              ("PredictorName" Data..= predictorName)
+          ]
+      )
+
+instance Data.ToPath CreateAutoPredictor where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateAutoPredictor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAutoPredictorResponse' smart constructor.
+data CreateAutoPredictorResponse = CreateAutoPredictorResponse'
+  { -- | The Amazon Resource Name (ARN) of the predictor.
+    predictorArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAutoPredictorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorArn', 'createAutoPredictorResponse_predictorArn' - The Amazon Resource Name (ARN) of the predictor.
+--
+-- 'httpStatus', 'createAutoPredictorResponse_httpStatus' - The response's http status code.
+newCreateAutoPredictorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAutoPredictorResponse
+newCreateAutoPredictorResponse pHttpStatus_ =
+  CreateAutoPredictorResponse'
+    { predictorArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the predictor.
+createAutoPredictorResponse_predictorArn :: Lens.Lens' CreateAutoPredictorResponse (Prelude.Maybe Prelude.Text)
+createAutoPredictorResponse_predictorArn = Lens.lens (\CreateAutoPredictorResponse' {predictorArn} -> predictorArn) (\s@CreateAutoPredictorResponse' {} a -> s {predictorArn = a} :: CreateAutoPredictorResponse)
+
+-- | The response's http status code.
+createAutoPredictorResponse_httpStatus :: Lens.Lens' CreateAutoPredictorResponse Prelude.Int
+createAutoPredictorResponse_httpStatus = Lens.lens (\CreateAutoPredictorResponse' {httpStatus} -> httpStatus) (\s@CreateAutoPredictorResponse' {} a -> s {httpStatus = a} :: CreateAutoPredictorResponse)
+
+instance Prelude.NFData CreateAutoPredictorResponse where
+  rnf CreateAutoPredictorResponse' {..} =
+    Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateDataset.hs b/gen/Amazonka/Forecast/CreateDataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateDataset.hs
@@ -0,0 +1,450 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateDataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Amazon Forecast dataset. The information about the dataset
+-- that you provide helps Forecast understand how to consume the data for
+-- model training. This includes the following:
+--
+-- -   /@DataFrequency@/ - How frequently your historical time-series data
+--     is collected.
+--
+-- -   /@Domain@/ and /@DatasetType@/ - Each dataset has an associated
+--     dataset domain and a type within the domain. Amazon Forecast
+--     provides a list of predefined domains and types within each domain.
+--     For each unique dataset domain and type within the domain, Amazon
+--     Forecast requires your data to include a minimum set of predefined
+--     fields.
+--
+-- -   /@Schema@/ - A schema specifies the fields in the dataset, including
+--     the field name and data type.
+--
+-- After creating a dataset, you import your training data into it and add
+-- the dataset to a dataset group. You use the dataset group to create a
+-- predictor. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-datasets-groups.html Importing datasets>.
+--
+-- To get a list of all your datasets, use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_ListDatasets.html ListDatasets>
+-- operation.
+--
+-- For example Forecast datasets, see the
+-- <https://github.com/aws-samples/amazon-forecast-samples Amazon Forecast Sample GitHub repository>.
+--
+-- The @Status@ of a dataset must be @ACTIVE@ before you can import
+-- training data. Use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDataset.html DescribeDataset>
+-- operation to get the status.
+module Amazonka.Forecast.CreateDataset
+  ( -- * Creating a Request
+    CreateDataset (..),
+    newCreateDataset,
+
+    -- * Request Lenses
+    createDataset_dataFrequency,
+    createDataset_encryptionConfig,
+    createDataset_tags,
+    createDataset_datasetName,
+    createDataset_domain,
+    createDataset_datasetType,
+    createDataset_schema,
+
+    -- * Destructuring the Response
+    CreateDatasetResponse (..),
+    newCreateDatasetResponse,
+
+    -- * Response Lenses
+    createDatasetResponse_datasetArn,
+    createDatasetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDataset' smart constructor.
+data CreateDataset = CreateDataset'
+  { -- | The frequency of data collection. This parameter is required for
+    -- RELATED_TIME_SERIES datasets.
+    --
+    -- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+    -- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+    -- minutes), and 1min (1 minute). For example, \"D\" indicates every day
+    -- and \"15min\" indicates every 15 minutes.
+    dataFrequency :: Prelude.Maybe Prelude.Text,
+    -- | An AWS Key Management Service (KMS) key and the AWS Identity and Access
+    -- Management (IAM) role that Amazon Forecast can assume to access the key.
+    encryptionConfig :: Prelude.Maybe EncryptionConfig,
+    -- | The optional metadata that you apply to the dataset to help you
+    -- categorize and organize them. Each tag consists of a key and an optional
+    -- value, both of which you define.
+    --
+    -- The following basic restrictions apply to tags:
+    --
+    -- -   Maximum number of tags per resource - 50.
+    --
+    -- -   For each resource, each tag key must be unique, and each tag key can
+    --     have only one value.
+    --
+    -- -   Maximum key length - 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length - 256 Unicode characters in UTF-8.
+    --
+    -- -   If your tagging schema is used across multiple services and
+    --     resources, remember that other services may have restrictions on
+    --     allowed characters. Generally allowed characters are: letters,
+    --     numbers, and spaces representable in UTF-8, and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Tag keys and values are case sensitive.
+    --
+    -- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+    --     such as a prefix for keys as it is reserved for AWS use. You cannot
+    --     edit or delete tag keys with this prefix. Values can have this
+    --     prefix. If a tag value has @aws@ as its prefix but the key does not,
+    --     then Forecast considers it to be a user tag and will count against
+    --     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+    --     count against your tags per resource limit.
+    tags :: Prelude.Maybe [Tag],
+    -- | A name for the dataset.
+    datasetName :: Prelude.Text,
+    -- | The domain associated with the dataset. When you add a dataset to a
+    -- dataset group, this value and the value specified for the @Domain@
+    -- parameter of the
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetGroup.html CreateDatasetGroup>
+    -- operation must match.
+    --
+    -- The @Domain@ and @DatasetType@ that you choose determine the fields that
+    -- must be present in the training data that you import to the dataset. For
+    -- example, if you choose the @RETAIL@ domain and @TARGET_TIME_SERIES@ as
+    -- the @DatasetType@, Amazon Forecast requires @item_id@, @timestamp@, and
+    -- @demand@ fields to be present in your data. For more information, see
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-datasets-groups.html Importing datasets>.
+    domain :: Domain,
+    -- | The dataset type. Valid values depend on the chosen @Domain@.
+    datasetType :: DatasetType,
+    -- | The schema for the dataset. The schema attributes and their order must
+    -- match the fields in your data. The dataset @Domain@ and @DatasetType@
+    -- that you choose determine the minimum required fields in your training
+    -- data. For information about the required fields for a specific dataset
+    -- domain and type, see
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-domains-ds-types.html Dataset Domains and Dataset Types>.
+    schema :: Schema
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataFrequency', 'createDataset_dataFrequency' - The frequency of data collection. This parameter is required for
+-- RELATED_TIME_SERIES datasets.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"D\" indicates every day
+-- and \"15min\" indicates every 15 minutes.
+--
+-- 'encryptionConfig', 'createDataset_encryptionConfig' - An AWS Key Management Service (KMS) key and the AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+--
+-- 'tags', 'createDataset_tags' - The optional metadata that you apply to the dataset to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+--
+-- 'datasetName', 'createDataset_datasetName' - A name for the dataset.
+--
+-- 'domain', 'createDataset_domain' - The domain associated with the dataset. When you add a dataset to a
+-- dataset group, this value and the value specified for the @Domain@
+-- parameter of the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetGroup.html CreateDatasetGroup>
+-- operation must match.
+--
+-- The @Domain@ and @DatasetType@ that you choose determine the fields that
+-- must be present in the training data that you import to the dataset. For
+-- example, if you choose the @RETAIL@ domain and @TARGET_TIME_SERIES@ as
+-- the @DatasetType@, Amazon Forecast requires @item_id@, @timestamp@, and
+-- @demand@ fields to be present in your data. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-datasets-groups.html Importing datasets>.
+--
+-- 'datasetType', 'createDataset_datasetType' - The dataset type. Valid values depend on the chosen @Domain@.
+--
+-- 'schema', 'createDataset_schema' - The schema for the dataset. The schema attributes and their order must
+-- match the fields in your data. The dataset @Domain@ and @DatasetType@
+-- that you choose determine the minimum required fields in your training
+-- data. For information about the required fields for a specific dataset
+-- domain and type, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-domains-ds-types.html Dataset Domains and Dataset Types>.
+newCreateDataset ::
+  -- | 'datasetName'
+  Prelude.Text ->
+  -- | 'domain'
+  Domain ->
+  -- | 'datasetType'
+  DatasetType ->
+  -- | 'schema'
+  Schema ->
+  CreateDataset
+newCreateDataset
+  pDatasetName_
+  pDomain_
+  pDatasetType_
+  pSchema_ =
+    CreateDataset'
+      { dataFrequency = Prelude.Nothing,
+        encryptionConfig = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        datasetName = pDatasetName_,
+        domain = pDomain_,
+        datasetType = pDatasetType_,
+        schema = pSchema_
+      }
+
+-- | The frequency of data collection. This parameter is required for
+-- RELATED_TIME_SERIES datasets.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"D\" indicates every day
+-- and \"15min\" indicates every 15 minutes.
+createDataset_dataFrequency :: Lens.Lens' CreateDataset (Prelude.Maybe Prelude.Text)
+createDataset_dataFrequency = Lens.lens (\CreateDataset' {dataFrequency} -> dataFrequency) (\s@CreateDataset' {} a -> s {dataFrequency = a} :: CreateDataset)
+
+-- | An AWS Key Management Service (KMS) key and the AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+createDataset_encryptionConfig :: Lens.Lens' CreateDataset (Prelude.Maybe EncryptionConfig)
+createDataset_encryptionConfig = Lens.lens (\CreateDataset' {encryptionConfig} -> encryptionConfig) (\s@CreateDataset' {} a -> s {encryptionConfig = a} :: CreateDataset)
+
+-- | The optional metadata that you apply to the dataset to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+createDataset_tags :: Lens.Lens' CreateDataset (Prelude.Maybe [Tag])
+createDataset_tags = Lens.lens (\CreateDataset' {tags} -> tags) (\s@CreateDataset' {} a -> s {tags = a} :: CreateDataset) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the dataset.
+createDataset_datasetName :: Lens.Lens' CreateDataset Prelude.Text
+createDataset_datasetName = Lens.lens (\CreateDataset' {datasetName} -> datasetName) (\s@CreateDataset' {} a -> s {datasetName = a} :: CreateDataset)
+
+-- | The domain associated with the dataset. When you add a dataset to a
+-- dataset group, this value and the value specified for the @Domain@
+-- parameter of the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetGroup.html CreateDatasetGroup>
+-- operation must match.
+--
+-- The @Domain@ and @DatasetType@ that you choose determine the fields that
+-- must be present in the training data that you import to the dataset. For
+-- example, if you choose the @RETAIL@ domain and @TARGET_TIME_SERIES@ as
+-- the @DatasetType@, Amazon Forecast requires @item_id@, @timestamp@, and
+-- @demand@ fields to be present in your data. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-datasets-groups.html Importing datasets>.
+createDataset_domain :: Lens.Lens' CreateDataset Domain
+createDataset_domain = Lens.lens (\CreateDataset' {domain} -> domain) (\s@CreateDataset' {} a -> s {domain = a} :: CreateDataset)
+
+-- | The dataset type. Valid values depend on the chosen @Domain@.
+createDataset_datasetType :: Lens.Lens' CreateDataset DatasetType
+createDataset_datasetType = Lens.lens (\CreateDataset' {datasetType} -> datasetType) (\s@CreateDataset' {} a -> s {datasetType = a} :: CreateDataset)
+
+-- | The schema for the dataset. The schema attributes and their order must
+-- match the fields in your data. The dataset @Domain@ and @DatasetType@
+-- that you choose determine the minimum required fields in your training
+-- data. For information about the required fields for a specific dataset
+-- domain and type, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-domains-ds-types.html Dataset Domains and Dataset Types>.
+createDataset_schema :: Lens.Lens' CreateDataset Schema
+createDataset_schema = Lens.lens (\CreateDataset' {schema} -> schema) (\s@CreateDataset' {} a -> s {schema = a} :: CreateDataset)
+
+instance Core.AWSRequest CreateDataset where
+  type
+    AWSResponse CreateDataset =
+      CreateDatasetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDatasetResponse'
+            Prelude.<$> (x Data..?> "DatasetArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDataset where
+  hashWithSalt _salt CreateDataset' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataFrequency
+      `Prelude.hashWithSalt` encryptionConfig
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` datasetType
+      `Prelude.hashWithSalt` schema
+
+instance Prelude.NFData CreateDataset where
+  rnf CreateDataset' {..} =
+    Prelude.rnf dataFrequency
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf datasetType
+      `Prelude.seq` Prelude.rnf schema
+
+instance Data.ToHeaders CreateDataset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateDataset" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDataset where
+  toJSON CreateDataset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataFrequency" Data..=) Prelude.<$> dataFrequency,
+            ("EncryptionConfig" Data..=)
+              Prelude.<$> encryptionConfig,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("DatasetName" Data..= datasetName),
+            Prelude.Just ("Domain" Data..= domain),
+            Prelude.Just ("DatasetType" Data..= datasetType),
+            Prelude.Just ("Schema" Data..= schema)
+          ]
+      )
+
+instance Data.ToPath CreateDataset where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDataset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDatasetResponse' smart constructor.
+data CreateDatasetResponse = CreateDatasetResponse'
+  { -- | The Amazon Resource Name (ARN) of the dataset.
+    datasetArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDatasetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetArn', 'createDatasetResponse_datasetArn' - The Amazon Resource Name (ARN) of the dataset.
+--
+-- 'httpStatus', 'createDatasetResponse_httpStatus' - The response's http status code.
+newCreateDatasetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDatasetResponse
+newCreateDatasetResponse pHttpStatus_ =
+  CreateDatasetResponse'
+    { datasetArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the dataset.
+createDatasetResponse_datasetArn :: Lens.Lens' CreateDatasetResponse (Prelude.Maybe Prelude.Text)
+createDatasetResponse_datasetArn = Lens.lens (\CreateDatasetResponse' {datasetArn} -> datasetArn) (\s@CreateDatasetResponse' {} a -> s {datasetArn = a} :: CreateDatasetResponse)
+
+-- | The response's http status code.
+createDatasetResponse_httpStatus :: Lens.Lens' CreateDatasetResponse Prelude.Int
+createDatasetResponse_httpStatus = Lens.lens (\CreateDatasetResponse' {httpStatus} -> httpStatus) (\s@CreateDatasetResponse' {} a -> s {httpStatus = a} :: CreateDatasetResponse)
+
+instance Prelude.NFData CreateDatasetResponse where
+  rnf CreateDatasetResponse' {..} =
+    Prelude.rnf datasetArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateDatasetGroup.hs b/gen/Amazonka/Forecast/CreateDatasetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateDatasetGroup.hs
@@ -0,0 +1,355 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateDatasetGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a dataset group, which holds a collection of related datasets.
+-- You can add datasets to the dataset group when you create the dataset
+-- group, or later by using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+-- operation.
+--
+-- After creating a dataset group and adding datasets, you use the dataset
+-- group when you create a predictor. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-datasets-groups.html Dataset groups>.
+--
+-- To get a list of all your datasets groups, use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_ListDatasetGroups.html ListDatasetGroups>
+-- operation.
+--
+-- The @Status@ of a dataset group must be @ACTIVE@ before you can use the
+-- dataset group to create a predictor. To get the status, use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDatasetGroup.html DescribeDatasetGroup>
+-- operation.
+module Amazonka.Forecast.CreateDatasetGroup
+  ( -- * Creating a Request
+    CreateDatasetGroup (..),
+    newCreateDatasetGroup,
+
+    -- * Request Lenses
+    createDatasetGroup_datasetArns,
+    createDatasetGroup_tags,
+    createDatasetGroup_datasetGroupName,
+    createDatasetGroup_domain,
+
+    -- * Destructuring the Response
+    CreateDatasetGroupResponse (..),
+    newCreateDatasetGroupResponse,
+
+    -- * Response Lenses
+    createDatasetGroupResponse_datasetGroupArn,
+    createDatasetGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDatasetGroup' smart constructor.
+data CreateDatasetGroup = CreateDatasetGroup'
+  { -- | An array of Amazon Resource Names (ARNs) of the datasets that you want
+    -- to include in the dataset group.
+    datasetArns :: Prelude.Maybe [Prelude.Text],
+    -- | The optional metadata that you apply to the dataset group to help you
+    -- categorize and organize them. Each tag consists of a key and an optional
+    -- value, both of which you define.
+    --
+    -- The following basic restrictions apply to tags:
+    --
+    -- -   Maximum number of tags per resource - 50.
+    --
+    -- -   For each resource, each tag key must be unique, and each tag key can
+    --     have only one value.
+    --
+    -- -   Maximum key length - 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length - 256 Unicode characters in UTF-8.
+    --
+    -- -   If your tagging schema is used across multiple services and
+    --     resources, remember that other services may have restrictions on
+    --     allowed characters. Generally allowed characters are: letters,
+    --     numbers, and spaces representable in UTF-8, and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Tag keys and values are case sensitive.
+    --
+    -- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+    --     such as a prefix for keys as it is reserved for AWS use. You cannot
+    --     edit or delete tag keys with this prefix. Values can have this
+    --     prefix. If a tag value has @aws@ as its prefix but the key does not,
+    --     then Forecast considers it to be a user tag and will count against
+    --     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+    --     count against your tags per resource limit.
+    tags :: Prelude.Maybe [Tag],
+    -- | A name for the dataset group.
+    datasetGroupName :: Prelude.Text,
+    -- | The domain associated with the dataset group. When you add a dataset to
+    -- a dataset group, this value and the value specified for the @Domain@
+    -- parameter of the
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+    -- operation must match.
+    --
+    -- The @Domain@ and @DatasetType@ that you choose determine the fields that
+    -- must be present in training data that you import to a dataset. For
+    -- example, if you choose the @RETAIL@ domain and @TARGET_TIME_SERIES@ as
+    -- the @DatasetType@, Amazon Forecast requires that @item_id@, @timestamp@,
+    -- and @demand@ fields are present in your data. For more information, see
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-datasets-groups.html Dataset groups>.
+    domain :: Domain
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDatasetGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetArns', 'createDatasetGroup_datasetArns' - An array of Amazon Resource Names (ARNs) of the datasets that you want
+-- to include in the dataset group.
+--
+-- 'tags', 'createDatasetGroup_tags' - The optional metadata that you apply to the dataset group to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+--
+-- 'datasetGroupName', 'createDatasetGroup_datasetGroupName' - A name for the dataset group.
+--
+-- 'domain', 'createDatasetGroup_domain' - The domain associated with the dataset group. When you add a dataset to
+-- a dataset group, this value and the value specified for the @Domain@
+-- parameter of the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+-- operation must match.
+--
+-- The @Domain@ and @DatasetType@ that you choose determine the fields that
+-- must be present in training data that you import to a dataset. For
+-- example, if you choose the @RETAIL@ domain and @TARGET_TIME_SERIES@ as
+-- the @DatasetType@, Amazon Forecast requires that @item_id@, @timestamp@,
+-- and @demand@ fields are present in your data. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-datasets-groups.html Dataset groups>.
+newCreateDatasetGroup ::
+  -- | 'datasetGroupName'
+  Prelude.Text ->
+  -- | 'domain'
+  Domain ->
+  CreateDatasetGroup
+newCreateDatasetGroup pDatasetGroupName_ pDomain_ =
+  CreateDatasetGroup'
+    { datasetArns = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      datasetGroupName = pDatasetGroupName_,
+      domain = pDomain_
+    }
+
+-- | An array of Amazon Resource Names (ARNs) of the datasets that you want
+-- to include in the dataset group.
+createDatasetGroup_datasetArns :: Lens.Lens' CreateDatasetGroup (Prelude.Maybe [Prelude.Text])
+createDatasetGroup_datasetArns = Lens.lens (\CreateDatasetGroup' {datasetArns} -> datasetArns) (\s@CreateDatasetGroup' {} a -> s {datasetArns = a} :: CreateDatasetGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The optional metadata that you apply to the dataset group to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+createDatasetGroup_tags :: Lens.Lens' CreateDatasetGroup (Prelude.Maybe [Tag])
+createDatasetGroup_tags = Lens.lens (\CreateDatasetGroup' {tags} -> tags) (\s@CreateDatasetGroup' {} a -> s {tags = a} :: CreateDatasetGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the dataset group.
+createDatasetGroup_datasetGroupName :: Lens.Lens' CreateDatasetGroup Prelude.Text
+createDatasetGroup_datasetGroupName = Lens.lens (\CreateDatasetGroup' {datasetGroupName} -> datasetGroupName) (\s@CreateDatasetGroup' {} a -> s {datasetGroupName = a} :: CreateDatasetGroup)
+
+-- | The domain associated with the dataset group. When you add a dataset to
+-- a dataset group, this value and the value specified for the @Domain@
+-- parameter of the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+-- operation must match.
+--
+-- The @Domain@ and @DatasetType@ that you choose determine the fields that
+-- must be present in training data that you import to a dataset. For
+-- example, if you choose the @RETAIL@ domain and @TARGET_TIME_SERIES@ as
+-- the @DatasetType@, Amazon Forecast requires that @item_id@, @timestamp@,
+-- and @demand@ fields are present in your data. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/howitworks-datasets-groups.html Dataset groups>.
+createDatasetGroup_domain :: Lens.Lens' CreateDatasetGroup Domain
+createDatasetGroup_domain = Lens.lens (\CreateDatasetGroup' {domain} -> domain) (\s@CreateDatasetGroup' {} a -> s {domain = a} :: CreateDatasetGroup)
+
+instance Core.AWSRequest CreateDatasetGroup where
+  type
+    AWSResponse CreateDatasetGroup =
+      CreateDatasetGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDatasetGroupResponse'
+            Prelude.<$> (x Data..?> "DatasetGroupArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDatasetGroup where
+  hashWithSalt _salt CreateDatasetGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` datasetArns
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` datasetGroupName
+      `Prelude.hashWithSalt` domain
+
+instance Prelude.NFData CreateDatasetGroup where
+  rnf CreateDatasetGroup' {..} =
+    Prelude.rnf datasetArns
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf datasetGroupName
+      `Prelude.seq` Prelude.rnf domain
+
+instance Data.ToHeaders CreateDatasetGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateDatasetGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDatasetGroup where
+  toJSON CreateDatasetGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DatasetArns" Data..=) Prelude.<$> datasetArns,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("DatasetGroupName" Data..= datasetGroupName),
+            Prelude.Just ("Domain" Data..= domain)
+          ]
+      )
+
+instance Data.ToPath CreateDatasetGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDatasetGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDatasetGroupResponse' smart constructor.
+data CreateDatasetGroupResponse = CreateDatasetGroupResponse'
+  { -- | The Amazon Resource Name (ARN) of the dataset group.
+    datasetGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDatasetGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetGroupArn', 'createDatasetGroupResponse_datasetGroupArn' - The Amazon Resource Name (ARN) of the dataset group.
+--
+-- 'httpStatus', 'createDatasetGroupResponse_httpStatus' - The response's http status code.
+newCreateDatasetGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDatasetGroupResponse
+newCreateDatasetGroupResponse pHttpStatus_ =
+  CreateDatasetGroupResponse'
+    { datasetGroupArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the dataset group.
+createDatasetGroupResponse_datasetGroupArn :: Lens.Lens' CreateDatasetGroupResponse (Prelude.Maybe Prelude.Text)
+createDatasetGroupResponse_datasetGroupArn = Lens.lens (\CreateDatasetGroupResponse' {datasetGroupArn} -> datasetGroupArn) (\s@CreateDatasetGroupResponse' {} a -> s {datasetGroupArn = a} :: CreateDatasetGroupResponse)
+
+-- | The response's http status code.
+createDatasetGroupResponse_httpStatus :: Lens.Lens' CreateDatasetGroupResponse Prelude.Int
+createDatasetGroupResponse_httpStatus = Lens.lens (\CreateDatasetGroupResponse' {httpStatus} -> httpStatus) (\s@CreateDatasetGroupResponse' {} a -> s {httpStatus = a} :: CreateDatasetGroupResponse)
+
+instance Prelude.NFData CreateDatasetGroupResponse where
+  rnf CreateDatasetGroupResponse' {..} =
+    Prelude.rnf datasetGroupArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateDatasetImportJob.hs b/gen/Amazonka/Forecast/CreateDatasetImportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateDatasetImportJob.hs
@@ -0,0 +1,535 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateDatasetImportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports your training data to an Amazon Forecast dataset. You provide
+-- the location of your training data in an Amazon Simple Storage Service
+-- (Amazon S3) bucket and the Amazon Resource Name (ARN) of the dataset
+-- that you want to import the data to.
+--
+-- You must specify a
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DataSource.html DataSource>
+-- object that includes an AWS Identity and Access Management (IAM) role
+-- that Amazon Forecast can assume to access the data, as Amazon Forecast
+-- makes a copy of your data and processes it in an internal AWS system.
+-- For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/aws-forecast-iam-roles.html Set up permissions>.
+--
+-- The training data must be in CSV or Parquet format. The delimiter must
+-- be a comma (,).
+--
+-- You can specify the path to a specific file, the S3 bucket, or to a
+-- folder in the S3 bucket. For the latter two cases, Amazon Forecast
+-- imports all files up to the limit of 10,000 files.
+--
+-- Because dataset imports are not aggregated, your most recent dataset
+-- import is the one that is used when training a predictor or generating a
+-- forecast. Make sure that your most recent dataset import contains all of
+-- the data you want to model off of, and not just the new data collected
+-- since the previous import.
+--
+-- To get a list of all your dataset import jobs, filtered by specified
+-- criteria, use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_ListDatasetImportJobs.html ListDatasetImportJobs>
+-- operation.
+module Amazonka.Forecast.CreateDatasetImportJob
+  ( -- * Creating a Request
+    CreateDatasetImportJob (..),
+    newCreateDatasetImportJob,
+
+    -- * Request Lenses
+    createDatasetImportJob_format,
+    createDatasetImportJob_geolocationFormat,
+    createDatasetImportJob_tags,
+    createDatasetImportJob_timeZone,
+    createDatasetImportJob_timestampFormat,
+    createDatasetImportJob_useGeolocationForTimeZone,
+    createDatasetImportJob_datasetImportJobName,
+    createDatasetImportJob_datasetArn,
+    createDatasetImportJob_dataSource,
+
+    -- * Destructuring the Response
+    CreateDatasetImportJobResponse (..),
+    newCreateDatasetImportJobResponse,
+
+    -- * Response Lenses
+    createDatasetImportJobResponse_datasetImportJobArn,
+    createDatasetImportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDatasetImportJob' smart constructor.
+data CreateDatasetImportJob = CreateDatasetImportJob'
+  { -- | The format of the imported data, CSV or PARQUET. The default value is
+    -- CSV.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The format of the geolocation attribute. The geolocation attribute can
+    -- be formatted in one of two ways:
+    --
+    -- -   @LAT_LONG@ - the latitude and longitude in decimal format (Example:
+    --     47.61_-122.33).
+    --
+    -- -   @CC_POSTALCODE@ (US Only) - the country code (US), followed by the
+    --     5-digit ZIP code (Example: US_98121).
+    geolocationFormat :: Prelude.Maybe Prelude.Text,
+    -- | The optional metadata that you apply to the dataset import job to help
+    -- you categorize and organize them. Each tag consists of a key and an
+    -- optional value, both of which you define.
+    --
+    -- The following basic restrictions apply to tags:
+    --
+    -- -   Maximum number of tags per resource - 50.
+    --
+    -- -   For each resource, each tag key must be unique, and each tag key can
+    --     have only one value.
+    --
+    -- -   Maximum key length - 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length - 256 Unicode characters in UTF-8.
+    --
+    -- -   If your tagging schema is used across multiple services and
+    --     resources, remember that other services may have restrictions on
+    --     allowed characters. Generally allowed characters are: letters,
+    --     numbers, and spaces representable in UTF-8, and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Tag keys and values are case sensitive.
+    --
+    -- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+    --     such as a prefix for keys as it is reserved for AWS use. You cannot
+    --     edit or delete tag keys with this prefix. Values can have this
+    --     prefix. If a tag value has @aws@ as its prefix but the key does not,
+    --     then Forecast considers it to be a user tag and will count against
+    --     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+    --     count against your tags per resource limit.
+    tags :: Prelude.Maybe [Tag],
+    -- | A single time zone for every item in your dataset. This option is ideal
+    -- for datasets with all timestamps within a single time zone, or if all
+    -- timestamps are normalized to a single time zone.
+    --
+    -- Refer to the
+    -- <http://joda-time.sourceforge.net/timezones.html Joda-Time API> for a
+    -- complete list of valid time zone names.
+    timeZone :: Prelude.Maybe Prelude.Text,
+    -- | The format of timestamps in the dataset. The format that you specify
+    -- depends on the @DataFrequency@ specified when the dataset was created.
+    -- The following formats are supported
+    --
+    -- -   \"yyyy-MM-dd\"
+    --
+    --     For the following data frequencies: Y, M, W, and D
+    --
+    -- -   \"yyyy-MM-dd HH:mm:ss\"
+    --
+    --     For the following data frequencies: H, 30min, 15min, and 1min; and
+    --     optionally, for: Y, M, W, and D
+    --
+    -- If the format isn\'t specified, Amazon Forecast expects the format to be
+    -- \"yyyy-MM-dd HH:mm:ss\".
+    timestampFormat :: Prelude.Maybe Prelude.Text,
+    -- | Automatically derive time zone information from the geolocation
+    -- attribute. This option is ideal for datasets that contain timestamps in
+    -- multiple time zones and those timestamps are expressed in local time.
+    useGeolocationForTimeZone :: Prelude.Maybe Prelude.Bool,
+    -- | The name for the dataset import job. We recommend including the current
+    -- timestamp in the name, for example, @20190721DatasetImport@. This can
+    -- help you avoid getting a @ResourceAlreadyExistsException@ exception.
+    datasetImportJobName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Amazon Forecast dataset that you
+    -- want to import data to.
+    datasetArn :: Prelude.Text,
+    -- | The location of the training data to import and an AWS Identity and
+    -- Access Management (IAM) role that Amazon Forecast can assume to access
+    -- the data. The training data must be stored in an Amazon S3 bucket.
+    --
+    -- If encryption is used, @DataSource@ must include an AWS Key Management
+    -- Service (KMS) key and the IAM role must allow Amazon Forecast permission
+    -- to access the key. The KMS key and IAM role must match those specified
+    -- in the @EncryptionConfig@ parameter of the
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+    -- operation.
+    dataSource :: DataSource
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDatasetImportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'createDatasetImportJob_format' - The format of the imported data, CSV or PARQUET. The default value is
+-- CSV.
+--
+-- 'geolocationFormat', 'createDatasetImportJob_geolocationFormat' - The format of the geolocation attribute. The geolocation attribute can
+-- be formatted in one of two ways:
+--
+-- -   @LAT_LONG@ - the latitude and longitude in decimal format (Example:
+--     47.61_-122.33).
+--
+-- -   @CC_POSTALCODE@ (US Only) - the country code (US), followed by the
+--     5-digit ZIP code (Example: US_98121).
+--
+-- 'tags', 'createDatasetImportJob_tags' - The optional metadata that you apply to the dataset import job to help
+-- you categorize and organize them. Each tag consists of a key and an
+-- optional value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+--
+-- 'timeZone', 'createDatasetImportJob_timeZone' - A single time zone for every item in your dataset. This option is ideal
+-- for datasets with all timestamps within a single time zone, or if all
+-- timestamps are normalized to a single time zone.
+--
+-- Refer to the
+-- <http://joda-time.sourceforge.net/timezones.html Joda-Time API> for a
+-- complete list of valid time zone names.
+--
+-- 'timestampFormat', 'createDatasetImportJob_timestampFormat' - The format of timestamps in the dataset. The format that you specify
+-- depends on the @DataFrequency@ specified when the dataset was created.
+-- The following formats are supported
+--
+-- -   \"yyyy-MM-dd\"
+--
+--     For the following data frequencies: Y, M, W, and D
+--
+-- -   \"yyyy-MM-dd HH:mm:ss\"
+--
+--     For the following data frequencies: H, 30min, 15min, and 1min; and
+--     optionally, for: Y, M, W, and D
+--
+-- If the format isn\'t specified, Amazon Forecast expects the format to be
+-- \"yyyy-MM-dd HH:mm:ss\".
+--
+-- 'useGeolocationForTimeZone', 'createDatasetImportJob_useGeolocationForTimeZone' - Automatically derive time zone information from the geolocation
+-- attribute. This option is ideal for datasets that contain timestamps in
+-- multiple time zones and those timestamps are expressed in local time.
+--
+-- 'datasetImportJobName', 'createDatasetImportJob_datasetImportJobName' - The name for the dataset import job. We recommend including the current
+-- timestamp in the name, for example, @20190721DatasetImport@. This can
+-- help you avoid getting a @ResourceAlreadyExistsException@ exception.
+--
+-- 'datasetArn', 'createDatasetImportJob_datasetArn' - The Amazon Resource Name (ARN) of the Amazon Forecast dataset that you
+-- want to import data to.
+--
+-- 'dataSource', 'createDatasetImportJob_dataSource' - The location of the training data to import and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the data. The training data must be stored in an Amazon S3 bucket.
+--
+-- If encryption is used, @DataSource@ must include an AWS Key Management
+-- Service (KMS) key and the IAM role must allow Amazon Forecast permission
+-- to access the key. The KMS key and IAM role must match those specified
+-- in the @EncryptionConfig@ parameter of the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+-- operation.
+newCreateDatasetImportJob ::
+  -- | 'datasetImportJobName'
+  Prelude.Text ->
+  -- | 'datasetArn'
+  Prelude.Text ->
+  -- | 'dataSource'
+  DataSource ->
+  CreateDatasetImportJob
+newCreateDatasetImportJob
+  pDatasetImportJobName_
+  pDatasetArn_
+  pDataSource_ =
+    CreateDatasetImportJob'
+      { format = Prelude.Nothing,
+        geolocationFormat = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        timeZone = Prelude.Nothing,
+        timestampFormat = Prelude.Nothing,
+        useGeolocationForTimeZone = Prelude.Nothing,
+        datasetImportJobName = pDatasetImportJobName_,
+        datasetArn = pDatasetArn_,
+        dataSource = pDataSource_
+      }
+
+-- | The format of the imported data, CSV or PARQUET. The default value is
+-- CSV.
+createDatasetImportJob_format :: Lens.Lens' CreateDatasetImportJob (Prelude.Maybe Prelude.Text)
+createDatasetImportJob_format = Lens.lens (\CreateDatasetImportJob' {format} -> format) (\s@CreateDatasetImportJob' {} a -> s {format = a} :: CreateDatasetImportJob)
+
+-- | The format of the geolocation attribute. The geolocation attribute can
+-- be formatted in one of two ways:
+--
+-- -   @LAT_LONG@ - the latitude and longitude in decimal format (Example:
+--     47.61_-122.33).
+--
+-- -   @CC_POSTALCODE@ (US Only) - the country code (US), followed by the
+--     5-digit ZIP code (Example: US_98121).
+createDatasetImportJob_geolocationFormat :: Lens.Lens' CreateDatasetImportJob (Prelude.Maybe Prelude.Text)
+createDatasetImportJob_geolocationFormat = Lens.lens (\CreateDatasetImportJob' {geolocationFormat} -> geolocationFormat) (\s@CreateDatasetImportJob' {} a -> s {geolocationFormat = a} :: CreateDatasetImportJob)
+
+-- | The optional metadata that you apply to the dataset import job to help
+-- you categorize and organize them. Each tag consists of a key and an
+-- optional value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+createDatasetImportJob_tags :: Lens.Lens' CreateDatasetImportJob (Prelude.Maybe [Tag])
+createDatasetImportJob_tags = Lens.lens (\CreateDatasetImportJob' {tags} -> tags) (\s@CreateDatasetImportJob' {} a -> s {tags = a} :: CreateDatasetImportJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | A single time zone for every item in your dataset. This option is ideal
+-- for datasets with all timestamps within a single time zone, or if all
+-- timestamps are normalized to a single time zone.
+--
+-- Refer to the
+-- <http://joda-time.sourceforge.net/timezones.html Joda-Time API> for a
+-- complete list of valid time zone names.
+createDatasetImportJob_timeZone :: Lens.Lens' CreateDatasetImportJob (Prelude.Maybe Prelude.Text)
+createDatasetImportJob_timeZone = Lens.lens (\CreateDatasetImportJob' {timeZone} -> timeZone) (\s@CreateDatasetImportJob' {} a -> s {timeZone = a} :: CreateDatasetImportJob)
+
+-- | The format of timestamps in the dataset. The format that you specify
+-- depends on the @DataFrequency@ specified when the dataset was created.
+-- The following formats are supported
+--
+-- -   \"yyyy-MM-dd\"
+--
+--     For the following data frequencies: Y, M, W, and D
+--
+-- -   \"yyyy-MM-dd HH:mm:ss\"
+--
+--     For the following data frequencies: H, 30min, 15min, and 1min; and
+--     optionally, for: Y, M, W, and D
+--
+-- If the format isn\'t specified, Amazon Forecast expects the format to be
+-- \"yyyy-MM-dd HH:mm:ss\".
+createDatasetImportJob_timestampFormat :: Lens.Lens' CreateDatasetImportJob (Prelude.Maybe Prelude.Text)
+createDatasetImportJob_timestampFormat = Lens.lens (\CreateDatasetImportJob' {timestampFormat} -> timestampFormat) (\s@CreateDatasetImportJob' {} a -> s {timestampFormat = a} :: CreateDatasetImportJob)
+
+-- | Automatically derive time zone information from the geolocation
+-- attribute. This option is ideal for datasets that contain timestamps in
+-- multiple time zones and those timestamps are expressed in local time.
+createDatasetImportJob_useGeolocationForTimeZone :: Lens.Lens' CreateDatasetImportJob (Prelude.Maybe Prelude.Bool)
+createDatasetImportJob_useGeolocationForTimeZone = Lens.lens (\CreateDatasetImportJob' {useGeolocationForTimeZone} -> useGeolocationForTimeZone) (\s@CreateDatasetImportJob' {} a -> s {useGeolocationForTimeZone = a} :: CreateDatasetImportJob)
+
+-- | The name for the dataset import job. We recommend including the current
+-- timestamp in the name, for example, @20190721DatasetImport@. This can
+-- help you avoid getting a @ResourceAlreadyExistsException@ exception.
+createDatasetImportJob_datasetImportJobName :: Lens.Lens' CreateDatasetImportJob Prelude.Text
+createDatasetImportJob_datasetImportJobName = Lens.lens (\CreateDatasetImportJob' {datasetImportJobName} -> datasetImportJobName) (\s@CreateDatasetImportJob' {} a -> s {datasetImportJobName = a} :: CreateDatasetImportJob)
+
+-- | The Amazon Resource Name (ARN) of the Amazon Forecast dataset that you
+-- want to import data to.
+createDatasetImportJob_datasetArn :: Lens.Lens' CreateDatasetImportJob Prelude.Text
+createDatasetImportJob_datasetArn = Lens.lens (\CreateDatasetImportJob' {datasetArn} -> datasetArn) (\s@CreateDatasetImportJob' {} a -> s {datasetArn = a} :: CreateDatasetImportJob)
+
+-- | The location of the training data to import and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the data. The training data must be stored in an Amazon S3 bucket.
+--
+-- If encryption is used, @DataSource@ must include an AWS Key Management
+-- Service (KMS) key and the IAM role must allow Amazon Forecast permission
+-- to access the key. The KMS key and IAM role must match those specified
+-- in the @EncryptionConfig@ parameter of the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+-- operation.
+createDatasetImportJob_dataSource :: Lens.Lens' CreateDatasetImportJob DataSource
+createDatasetImportJob_dataSource = Lens.lens (\CreateDatasetImportJob' {dataSource} -> dataSource) (\s@CreateDatasetImportJob' {} a -> s {dataSource = a} :: CreateDatasetImportJob)
+
+instance Core.AWSRequest CreateDatasetImportJob where
+  type
+    AWSResponse CreateDatasetImportJob =
+      CreateDatasetImportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDatasetImportJobResponse'
+            Prelude.<$> (x Data..?> "DatasetImportJobArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDatasetImportJob where
+  hashWithSalt _salt CreateDatasetImportJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` geolocationFormat
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeZone
+      `Prelude.hashWithSalt` timestampFormat
+      `Prelude.hashWithSalt` useGeolocationForTimeZone
+      `Prelude.hashWithSalt` datasetImportJobName
+      `Prelude.hashWithSalt` datasetArn
+      `Prelude.hashWithSalt` dataSource
+
+instance Prelude.NFData CreateDatasetImportJob where
+  rnf CreateDatasetImportJob' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf geolocationFormat
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeZone
+      `Prelude.seq` Prelude.rnf timestampFormat
+      `Prelude.seq` Prelude.rnf useGeolocationForTimeZone
+      `Prelude.seq` Prelude.rnf datasetImportJobName
+      `Prelude.seq` Prelude.rnf datasetArn
+      `Prelude.seq` Prelude.rnf dataSource
+
+instance Data.ToHeaders CreateDatasetImportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateDatasetImportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDatasetImportJob where
+  toJSON CreateDatasetImportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("GeolocationFormat" Data..=)
+              Prelude.<$> geolocationFormat,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TimeZone" Data..=) Prelude.<$> timeZone,
+            ("TimestampFormat" Data..=)
+              Prelude.<$> timestampFormat,
+            ("UseGeolocationForTimeZone" Data..=)
+              Prelude.<$> useGeolocationForTimeZone,
+            Prelude.Just
+              ( "DatasetImportJobName"
+                  Data..= datasetImportJobName
+              ),
+            Prelude.Just ("DatasetArn" Data..= datasetArn),
+            Prelude.Just ("DataSource" Data..= dataSource)
+          ]
+      )
+
+instance Data.ToPath CreateDatasetImportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDatasetImportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDatasetImportJobResponse' smart constructor.
+data CreateDatasetImportJobResponse = CreateDatasetImportJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the dataset import job.
+    datasetImportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDatasetImportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetImportJobArn', 'createDatasetImportJobResponse_datasetImportJobArn' - The Amazon Resource Name (ARN) of the dataset import job.
+--
+-- 'httpStatus', 'createDatasetImportJobResponse_httpStatus' - The response's http status code.
+newCreateDatasetImportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDatasetImportJobResponse
+newCreateDatasetImportJobResponse pHttpStatus_ =
+  CreateDatasetImportJobResponse'
+    { datasetImportJobArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the dataset import job.
+createDatasetImportJobResponse_datasetImportJobArn :: Lens.Lens' CreateDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+createDatasetImportJobResponse_datasetImportJobArn = Lens.lens (\CreateDatasetImportJobResponse' {datasetImportJobArn} -> datasetImportJobArn) (\s@CreateDatasetImportJobResponse' {} a -> s {datasetImportJobArn = a} :: CreateDatasetImportJobResponse)
+
+-- | The response's http status code.
+createDatasetImportJobResponse_httpStatus :: Lens.Lens' CreateDatasetImportJobResponse Prelude.Int
+createDatasetImportJobResponse_httpStatus = Lens.lens (\CreateDatasetImportJobResponse' {httpStatus} -> httpStatus) (\s@CreateDatasetImportJobResponse' {} a -> s {httpStatus = a} :: CreateDatasetImportJobResponse)
+
+instance
+  Prelude.NFData
+    CreateDatasetImportJobResponse
+  where
+  rnf CreateDatasetImportJobResponse' {..} =
+    Prelude.rnf datasetImportJobArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateExplainability.hs b/gen/Amazonka/Forecast/CreateExplainability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateExplainability.hs
@@ -0,0 +1,469 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateExplainability
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Explainability is only available for Forecasts and Predictors generated
+-- from an AutoPredictor (CreateAutoPredictor)
+--
+-- Creates an Amazon Forecast Explainability.
+--
+-- Explainability helps you better understand how the attributes in your
+-- datasets impact forecast. Amazon Forecast uses a metric called Impact
+-- scores to quantify the relative impact of each attribute and determine
+-- whether they increase or decrease forecast values.
+--
+-- To enable Forecast Explainability, your predictor must include at least
+-- one of the following: related time series, item metadata, or additional
+-- datasets like Holidays and the Weather Index.
+--
+-- CreateExplainability accepts either a Predictor ARN or Forecast ARN. To
+-- receive aggregated Impact scores for all time series and time points in
+-- your datasets, provide a Predictor ARN. To receive Impact scores for
+-- specific time series and time points, provide a Forecast ARN.
+--
+-- __CreateExplainability with a Predictor ARN__
+--
+-- You can only have one Explainability resource per predictor. If you
+-- already enabled @ExplainPredictor@ in CreateAutoPredictor, that
+-- predictor already has an Explainability resource.
+--
+-- The following parameters are required when providing a Predictor ARN:
+--
+-- -   @ExplainabilityName@ - A unique name for the Explainability.
+--
+-- -   @ResourceArn@ - The Arn of the predictor.
+--
+-- -   @TimePointGranularity@ - Must be set to “ALL”.
+--
+-- -   @TimeSeriesGranularity@ - Must be set to “ALL”.
+--
+-- Do not specify a value for the following parameters:
+--
+-- -   @DataSource@ - Only valid when TimeSeriesGranularity is “SPECIFIC”.
+--
+-- -   @Schema@ - Only valid when TimeSeriesGranularity is “SPECIFIC”.
+--
+-- -   @StartDateTime@ - Only valid when TimePointGranularity is
+--     “SPECIFIC”.
+--
+-- -   @EndDateTime@ - Only valid when TimePointGranularity is “SPECIFIC”.
+--
+-- __CreateExplainability with a Forecast ARN__
+--
+-- You can specify a maximum of 50 time series and 500 time points.
+--
+-- The following parameters are required when providing a Predictor ARN:
+--
+-- -   @ExplainabilityName@ - A unique name for the Explainability.
+--
+-- -   @ResourceArn@ - The Arn of the forecast.
+--
+-- -   @TimePointGranularity@ - Either “ALL” or “SPECIFIC”.
+--
+-- -   @TimeSeriesGranularity@ - Either “ALL” or “SPECIFIC”.
+--
+-- If you set TimeSeriesGranularity to “SPECIFIC”, you must also provide
+-- the following:
+--
+-- -   @DataSource@ - The S3 location of the CSV file specifying your time
+--     series.
+--
+-- -   @Schema@ - The Schema defines the attributes and attribute types
+--     listed in the Data Source.
+--
+-- If you set TimePointGranularity to “SPECIFIC”, you must also provide the
+-- following:
+--
+-- -   @StartDateTime@ - The first timestamp in the range of time points.
+--
+-- -   @EndDateTime@ - The last timestamp in the range of time points.
+module Amazonka.Forecast.CreateExplainability
+  ( -- * Creating a Request
+    CreateExplainability (..),
+    newCreateExplainability,
+
+    -- * Request Lenses
+    createExplainability_dataSource,
+    createExplainability_enableVisualization,
+    createExplainability_endDateTime,
+    createExplainability_schema,
+    createExplainability_startDateTime,
+    createExplainability_tags,
+    createExplainability_explainabilityName,
+    createExplainability_resourceArn,
+    createExplainability_explainabilityConfig,
+
+    -- * Destructuring the Response
+    CreateExplainabilityResponse (..),
+    newCreateExplainabilityResponse,
+
+    -- * Response Lenses
+    createExplainabilityResponse_explainabilityArn,
+    createExplainabilityResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateExplainability' smart constructor.
+data CreateExplainability = CreateExplainability'
+  { dataSource :: Prelude.Maybe DataSource,
+    -- | Create an Explainability visualization that is viewable within the AWS
+    -- console.
+    enableVisualization :: Prelude.Maybe Prelude.Bool,
+    -- | If @TimePointGranularity@ is set to @SPECIFIC@, define the last time
+    -- point for the Explainability.
+    --
+    -- Use the following timestamp format: yyyy-MM-ddTHH:mm:ss (example:
+    -- 2015-01-01T20:00:00)
+    endDateTime :: Prelude.Maybe Prelude.Text,
+    schema :: Prelude.Maybe Schema,
+    -- | If @TimePointGranularity@ is set to @SPECIFIC@, define the first point
+    -- for the Explainability.
+    --
+    -- Use the following timestamp format: yyyy-MM-ddTHH:mm:ss (example:
+    -- 2015-01-01T20:00:00)
+    startDateTime :: Prelude.Maybe Prelude.Text,
+    -- | Optional metadata to help you categorize and organize your resources.
+    -- Each tag consists of a key and an optional value, both of which you
+    -- define. Tag keys and values are case sensitive.
+    --
+    -- The following restrictions apply to tags:
+    --
+    -- -   For each resource, each tag key must be unique and each tag key must
+    --     have one value.
+    --
+    -- -   Maximum number of tags per resource: 50.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8.
+    --
+    -- -   Accepted characters: all letters and numbers, spaces representable
+    --     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+    --     across other services and resources, the character restrictions of
+    --     those services also apply.
+    --
+    -- -   Key prefixes cannot include any upper or lowercase combination of
+    --     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+    --     @aws@ as its prefix but the key does not, Forecast considers it to
+    --     be a user tag and will count against the limit of 50 tags. Tags with
+    --     only the key prefix of @aws@ do not count against your tags per
+    --     resource limit. You cannot edit or delete tag keys with this prefix.
+    tags :: Prelude.Maybe [Tag],
+    -- | A unique name for the Explainability.
+    explainabilityName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+    -- create the Explainability.
+    resourceArn :: Prelude.Text,
+    -- | The configuration settings that define the granularity of time series
+    -- and time points for the Explainability.
+    explainabilityConfig :: ExplainabilityConfig
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExplainability' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSource', 'createExplainability_dataSource' - Undocumented member.
+--
+-- 'enableVisualization', 'createExplainability_enableVisualization' - Create an Explainability visualization that is viewable within the AWS
+-- console.
+--
+-- 'endDateTime', 'createExplainability_endDateTime' - If @TimePointGranularity@ is set to @SPECIFIC@, define the last time
+-- point for the Explainability.
+--
+-- Use the following timestamp format: yyyy-MM-ddTHH:mm:ss (example:
+-- 2015-01-01T20:00:00)
+--
+-- 'schema', 'createExplainability_schema' - Undocumented member.
+--
+-- 'startDateTime', 'createExplainability_startDateTime' - If @TimePointGranularity@ is set to @SPECIFIC@, define the first point
+-- for the Explainability.
+--
+-- Use the following timestamp format: yyyy-MM-ddTHH:mm:ss (example:
+-- 2015-01-01T20:00:00)
+--
+-- 'tags', 'createExplainability_tags' - Optional metadata to help you categorize and organize your resources.
+-- Each tag consists of a key and an optional value, both of which you
+-- define. Tag keys and values are case sensitive.
+--
+-- The following restrictions apply to tags:
+--
+-- -   For each resource, each tag key must be unique and each tag key must
+--     have one value.
+--
+-- -   Maximum number of tags per resource: 50.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Accepted characters: all letters and numbers, spaces representable
+--     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+--     across other services and resources, the character restrictions of
+--     those services also apply.
+--
+-- -   Key prefixes cannot include any upper or lowercase combination of
+--     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+--     @aws@ as its prefix but the key does not, Forecast considers it to
+--     be a user tag and will count against the limit of 50 tags. Tags with
+--     only the key prefix of @aws@ do not count against your tags per
+--     resource limit. You cannot edit or delete tag keys with this prefix.
+--
+-- 'explainabilityName', 'createExplainability_explainabilityName' - A unique name for the Explainability.
+--
+-- 'resourceArn', 'createExplainability_resourceArn' - The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+-- create the Explainability.
+--
+-- 'explainabilityConfig', 'createExplainability_explainabilityConfig' - The configuration settings that define the granularity of time series
+-- and time points for the Explainability.
+newCreateExplainability ::
+  -- | 'explainabilityName'
+  Prelude.Text ->
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'explainabilityConfig'
+  ExplainabilityConfig ->
+  CreateExplainability
+newCreateExplainability
+  pExplainabilityName_
+  pResourceArn_
+  pExplainabilityConfig_ =
+    CreateExplainability'
+      { dataSource = Prelude.Nothing,
+        enableVisualization = Prelude.Nothing,
+        endDateTime = Prelude.Nothing,
+        schema = Prelude.Nothing,
+        startDateTime = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        explainabilityName = pExplainabilityName_,
+        resourceArn = pResourceArn_,
+        explainabilityConfig = pExplainabilityConfig_
+      }
+
+-- | Undocumented member.
+createExplainability_dataSource :: Lens.Lens' CreateExplainability (Prelude.Maybe DataSource)
+createExplainability_dataSource = Lens.lens (\CreateExplainability' {dataSource} -> dataSource) (\s@CreateExplainability' {} a -> s {dataSource = a} :: CreateExplainability)
+
+-- | Create an Explainability visualization that is viewable within the AWS
+-- console.
+createExplainability_enableVisualization :: Lens.Lens' CreateExplainability (Prelude.Maybe Prelude.Bool)
+createExplainability_enableVisualization = Lens.lens (\CreateExplainability' {enableVisualization} -> enableVisualization) (\s@CreateExplainability' {} a -> s {enableVisualization = a} :: CreateExplainability)
+
+-- | If @TimePointGranularity@ is set to @SPECIFIC@, define the last time
+-- point for the Explainability.
+--
+-- Use the following timestamp format: yyyy-MM-ddTHH:mm:ss (example:
+-- 2015-01-01T20:00:00)
+createExplainability_endDateTime :: Lens.Lens' CreateExplainability (Prelude.Maybe Prelude.Text)
+createExplainability_endDateTime = Lens.lens (\CreateExplainability' {endDateTime} -> endDateTime) (\s@CreateExplainability' {} a -> s {endDateTime = a} :: CreateExplainability)
+
+-- | Undocumented member.
+createExplainability_schema :: Lens.Lens' CreateExplainability (Prelude.Maybe Schema)
+createExplainability_schema = Lens.lens (\CreateExplainability' {schema} -> schema) (\s@CreateExplainability' {} a -> s {schema = a} :: CreateExplainability)
+
+-- | If @TimePointGranularity@ is set to @SPECIFIC@, define the first point
+-- for the Explainability.
+--
+-- Use the following timestamp format: yyyy-MM-ddTHH:mm:ss (example:
+-- 2015-01-01T20:00:00)
+createExplainability_startDateTime :: Lens.Lens' CreateExplainability (Prelude.Maybe Prelude.Text)
+createExplainability_startDateTime = Lens.lens (\CreateExplainability' {startDateTime} -> startDateTime) (\s@CreateExplainability' {} a -> s {startDateTime = a} :: CreateExplainability)
+
+-- | Optional metadata to help you categorize and organize your resources.
+-- Each tag consists of a key and an optional value, both of which you
+-- define. Tag keys and values are case sensitive.
+--
+-- The following restrictions apply to tags:
+--
+-- -   For each resource, each tag key must be unique and each tag key must
+--     have one value.
+--
+-- -   Maximum number of tags per resource: 50.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Accepted characters: all letters and numbers, spaces representable
+--     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+--     across other services and resources, the character restrictions of
+--     those services also apply.
+--
+-- -   Key prefixes cannot include any upper or lowercase combination of
+--     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+--     @aws@ as its prefix but the key does not, Forecast considers it to
+--     be a user tag and will count against the limit of 50 tags. Tags with
+--     only the key prefix of @aws@ do not count against your tags per
+--     resource limit. You cannot edit or delete tag keys with this prefix.
+createExplainability_tags :: Lens.Lens' CreateExplainability (Prelude.Maybe [Tag])
+createExplainability_tags = Lens.lens (\CreateExplainability' {tags} -> tags) (\s@CreateExplainability' {} a -> s {tags = a} :: CreateExplainability) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique name for the Explainability.
+createExplainability_explainabilityName :: Lens.Lens' CreateExplainability Prelude.Text
+createExplainability_explainabilityName = Lens.lens (\CreateExplainability' {explainabilityName} -> explainabilityName) (\s@CreateExplainability' {} a -> s {explainabilityName = a} :: CreateExplainability)
+
+-- | The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+-- create the Explainability.
+createExplainability_resourceArn :: Lens.Lens' CreateExplainability Prelude.Text
+createExplainability_resourceArn = Lens.lens (\CreateExplainability' {resourceArn} -> resourceArn) (\s@CreateExplainability' {} a -> s {resourceArn = a} :: CreateExplainability)
+
+-- | The configuration settings that define the granularity of time series
+-- and time points for the Explainability.
+createExplainability_explainabilityConfig :: Lens.Lens' CreateExplainability ExplainabilityConfig
+createExplainability_explainabilityConfig = Lens.lens (\CreateExplainability' {explainabilityConfig} -> explainabilityConfig) (\s@CreateExplainability' {} a -> s {explainabilityConfig = a} :: CreateExplainability)
+
+instance Core.AWSRequest CreateExplainability where
+  type
+    AWSResponse CreateExplainability =
+      CreateExplainabilityResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateExplainabilityResponse'
+            Prelude.<$> (x Data..?> "ExplainabilityArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateExplainability where
+  hashWithSalt _salt CreateExplainability' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` enableVisualization
+      `Prelude.hashWithSalt` endDateTime
+      `Prelude.hashWithSalt` schema
+      `Prelude.hashWithSalt` startDateTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` explainabilityName
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` explainabilityConfig
+
+instance Prelude.NFData CreateExplainability where
+  rnf CreateExplainability' {..} =
+    Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf enableVisualization
+      `Prelude.seq` Prelude.rnf endDateTime
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf startDateTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf explainabilityName
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf explainabilityConfig
+
+instance Data.ToHeaders CreateExplainability where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateExplainability" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateExplainability where
+  toJSON CreateExplainability' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSource" Data..=) Prelude.<$> dataSource,
+            ("EnableVisualization" Data..=)
+              Prelude.<$> enableVisualization,
+            ("EndDateTime" Data..=) Prelude.<$> endDateTime,
+            ("Schema" Data..=) Prelude.<$> schema,
+            ("StartDateTime" Data..=) Prelude.<$> startDateTime,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("ExplainabilityName" Data..= explainabilityName),
+            Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just
+              ( "ExplainabilityConfig"
+                  Data..= explainabilityConfig
+              )
+          ]
+      )
+
+instance Data.ToPath CreateExplainability where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateExplainability where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateExplainabilityResponse' smart constructor.
+data CreateExplainabilityResponse = CreateExplainabilityResponse'
+  { -- | The Amazon Resource Name (ARN) of the Explainability.
+    explainabilityArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExplainabilityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilityArn', 'createExplainabilityResponse_explainabilityArn' - The Amazon Resource Name (ARN) of the Explainability.
+--
+-- 'httpStatus', 'createExplainabilityResponse_httpStatus' - The response's http status code.
+newCreateExplainabilityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateExplainabilityResponse
+newCreateExplainabilityResponse pHttpStatus_ =
+  CreateExplainabilityResponse'
+    { explainabilityArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the Explainability.
+createExplainabilityResponse_explainabilityArn :: Lens.Lens' CreateExplainabilityResponse (Prelude.Maybe Prelude.Text)
+createExplainabilityResponse_explainabilityArn = Lens.lens (\CreateExplainabilityResponse' {explainabilityArn} -> explainabilityArn) (\s@CreateExplainabilityResponse' {} a -> s {explainabilityArn = a} :: CreateExplainabilityResponse)
+
+-- | The response's http status code.
+createExplainabilityResponse_httpStatus :: Lens.Lens' CreateExplainabilityResponse Prelude.Int
+createExplainabilityResponse_httpStatus = Lens.lens (\CreateExplainabilityResponse' {httpStatus} -> httpStatus) (\s@CreateExplainabilityResponse' {} a -> s {httpStatus = a} :: CreateExplainabilityResponse)
+
+instance Prelude.NFData CreateExplainabilityResponse where
+  rnf CreateExplainabilityResponse' {..} =
+    Prelude.rnf explainabilityArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateExplainabilityExport.hs b/gen/Amazonka/Forecast/CreateExplainabilityExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateExplainabilityExport.hs
@@ -0,0 +1,326 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateExplainabilityExport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports an Explainability resource created by the CreateExplainability
+-- operation. Exported files are exported to an Amazon Simple Storage
+-- Service (Amazon S3) bucket.
+--
+-- You must specify a DataDestination object that includes an Amazon S3
+-- bucket and an AWS Identity and Access Management (IAM) role that Amazon
+-- Forecast can assume to access the Amazon S3 bucket. For more
+-- information, see aws-forecast-iam-roles.
+--
+-- The @Status@ of the export job must be @ACTIVE@ before you can access
+-- the export in your Amazon S3 bucket. To get the status, use the
+-- DescribeExplainabilityExport operation.
+module Amazonka.Forecast.CreateExplainabilityExport
+  ( -- * Creating a Request
+    CreateExplainabilityExport (..),
+    newCreateExplainabilityExport,
+
+    -- * Request Lenses
+    createExplainabilityExport_format,
+    createExplainabilityExport_tags,
+    createExplainabilityExport_explainabilityExportName,
+    createExplainabilityExport_explainabilityArn,
+    createExplainabilityExport_destination,
+
+    -- * Destructuring the Response
+    CreateExplainabilityExportResponse (..),
+    newCreateExplainabilityExportResponse,
+
+    -- * Response Lenses
+    createExplainabilityExportResponse_explainabilityExportArn,
+    createExplainabilityExportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateExplainabilityExport' smart constructor.
+data CreateExplainabilityExport = CreateExplainabilityExport'
+  { -- | The format of the exported data, CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | Optional metadata to help you categorize and organize your resources.
+    -- Each tag consists of a key and an optional value, both of which you
+    -- define. Tag keys and values are case sensitive.
+    --
+    -- The following restrictions apply to tags:
+    --
+    -- -   For each resource, each tag key must be unique and each tag key must
+    --     have one value.
+    --
+    -- -   Maximum number of tags per resource: 50.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8.
+    --
+    -- -   Accepted characters: all letters and numbers, spaces representable
+    --     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+    --     across other services and resources, the character restrictions of
+    --     those services also apply.
+    --
+    -- -   Key prefixes cannot include any upper or lowercase combination of
+    --     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+    --     @aws@ as its prefix but the key does not, Forecast considers it to
+    --     be a user tag and will count against the limit of 50 tags. Tags with
+    --     only the key prefix of @aws@ do not count against your tags per
+    --     resource limit. You cannot edit or delete tag keys with this prefix.
+    tags :: Prelude.Maybe [Tag],
+    -- | A unique name for the Explainability export.
+    explainabilityExportName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Explainability to export.
+    explainabilityArn :: Prelude.Text,
+    destination :: DataDestination
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExplainabilityExport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'createExplainabilityExport_format' - The format of the exported data, CSV or PARQUET.
+--
+-- 'tags', 'createExplainabilityExport_tags' - Optional metadata to help you categorize and organize your resources.
+-- Each tag consists of a key and an optional value, both of which you
+-- define. Tag keys and values are case sensitive.
+--
+-- The following restrictions apply to tags:
+--
+-- -   For each resource, each tag key must be unique and each tag key must
+--     have one value.
+--
+-- -   Maximum number of tags per resource: 50.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Accepted characters: all letters and numbers, spaces representable
+--     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+--     across other services and resources, the character restrictions of
+--     those services also apply.
+--
+-- -   Key prefixes cannot include any upper or lowercase combination of
+--     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+--     @aws@ as its prefix but the key does not, Forecast considers it to
+--     be a user tag and will count against the limit of 50 tags. Tags with
+--     only the key prefix of @aws@ do not count against your tags per
+--     resource limit. You cannot edit or delete tag keys with this prefix.
+--
+-- 'explainabilityExportName', 'createExplainabilityExport_explainabilityExportName' - A unique name for the Explainability export.
+--
+-- 'explainabilityArn', 'createExplainabilityExport_explainabilityArn' - The Amazon Resource Name (ARN) of the Explainability to export.
+--
+-- 'destination', 'createExplainabilityExport_destination' - Undocumented member.
+newCreateExplainabilityExport ::
+  -- | 'explainabilityExportName'
+  Prelude.Text ->
+  -- | 'explainabilityArn'
+  Prelude.Text ->
+  -- | 'destination'
+  DataDestination ->
+  CreateExplainabilityExport
+newCreateExplainabilityExport
+  pExplainabilityExportName_
+  pExplainabilityArn_
+  pDestination_ =
+    CreateExplainabilityExport'
+      { format =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        explainabilityExportName =
+          pExplainabilityExportName_,
+        explainabilityArn = pExplainabilityArn_,
+        destination = pDestination_
+      }
+
+-- | The format of the exported data, CSV or PARQUET.
+createExplainabilityExport_format :: Lens.Lens' CreateExplainabilityExport (Prelude.Maybe Prelude.Text)
+createExplainabilityExport_format = Lens.lens (\CreateExplainabilityExport' {format} -> format) (\s@CreateExplainabilityExport' {} a -> s {format = a} :: CreateExplainabilityExport)
+
+-- | Optional metadata to help you categorize and organize your resources.
+-- Each tag consists of a key and an optional value, both of which you
+-- define. Tag keys and values are case sensitive.
+--
+-- The following restrictions apply to tags:
+--
+-- -   For each resource, each tag key must be unique and each tag key must
+--     have one value.
+--
+-- -   Maximum number of tags per resource: 50.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Accepted characters: all letters and numbers, spaces representable
+--     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+--     across other services and resources, the character restrictions of
+--     those services also apply.
+--
+-- -   Key prefixes cannot include any upper or lowercase combination of
+--     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+--     @aws@ as its prefix but the key does not, Forecast considers it to
+--     be a user tag and will count against the limit of 50 tags. Tags with
+--     only the key prefix of @aws@ do not count against your tags per
+--     resource limit. You cannot edit or delete tag keys with this prefix.
+createExplainabilityExport_tags :: Lens.Lens' CreateExplainabilityExport (Prelude.Maybe [Tag])
+createExplainabilityExport_tags = Lens.lens (\CreateExplainabilityExport' {tags} -> tags) (\s@CreateExplainabilityExport' {} a -> s {tags = a} :: CreateExplainabilityExport) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique name for the Explainability export.
+createExplainabilityExport_explainabilityExportName :: Lens.Lens' CreateExplainabilityExport Prelude.Text
+createExplainabilityExport_explainabilityExportName = Lens.lens (\CreateExplainabilityExport' {explainabilityExportName} -> explainabilityExportName) (\s@CreateExplainabilityExport' {} a -> s {explainabilityExportName = a} :: CreateExplainabilityExport)
+
+-- | The Amazon Resource Name (ARN) of the Explainability to export.
+createExplainabilityExport_explainabilityArn :: Lens.Lens' CreateExplainabilityExport Prelude.Text
+createExplainabilityExport_explainabilityArn = Lens.lens (\CreateExplainabilityExport' {explainabilityArn} -> explainabilityArn) (\s@CreateExplainabilityExport' {} a -> s {explainabilityArn = a} :: CreateExplainabilityExport)
+
+-- | Undocumented member.
+createExplainabilityExport_destination :: Lens.Lens' CreateExplainabilityExport DataDestination
+createExplainabilityExport_destination = Lens.lens (\CreateExplainabilityExport' {destination} -> destination) (\s@CreateExplainabilityExport' {} a -> s {destination = a} :: CreateExplainabilityExport)
+
+instance Core.AWSRequest CreateExplainabilityExport where
+  type
+    AWSResponse CreateExplainabilityExport =
+      CreateExplainabilityExportResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateExplainabilityExportResponse'
+            Prelude.<$> (x Data..?> "ExplainabilityExportArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateExplainabilityExport where
+  hashWithSalt _salt CreateExplainabilityExport' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` explainabilityExportName
+      `Prelude.hashWithSalt` explainabilityArn
+      `Prelude.hashWithSalt` destination
+
+instance Prelude.NFData CreateExplainabilityExport where
+  rnf CreateExplainabilityExport' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf explainabilityExportName
+      `Prelude.seq` Prelude.rnf explainabilityArn
+      `Prelude.seq` Prelude.rnf destination
+
+instance Data.ToHeaders CreateExplainabilityExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateExplainabilityExport" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateExplainabilityExport where
+  toJSON CreateExplainabilityExport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "ExplainabilityExportName"
+                  Data..= explainabilityExportName
+              ),
+            Prelude.Just
+              ("ExplainabilityArn" Data..= explainabilityArn),
+            Prelude.Just ("Destination" Data..= destination)
+          ]
+      )
+
+instance Data.ToPath CreateExplainabilityExport where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateExplainabilityExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateExplainabilityExportResponse' smart constructor.
+data CreateExplainabilityExportResponse = CreateExplainabilityExportResponse'
+  { -- | The Amazon Resource Name (ARN) of the export.
+    explainabilityExportArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateExplainabilityExportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilityExportArn', 'createExplainabilityExportResponse_explainabilityExportArn' - The Amazon Resource Name (ARN) of the export.
+--
+-- 'httpStatus', 'createExplainabilityExportResponse_httpStatus' - The response's http status code.
+newCreateExplainabilityExportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateExplainabilityExportResponse
+newCreateExplainabilityExportResponse pHttpStatus_ =
+  CreateExplainabilityExportResponse'
+    { explainabilityExportArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the export.
+createExplainabilityExportResponse_explainabilityExportArn :: Lens.Lens' CreateExplainabilityExportResponse (Prelude.Maybe Prelude.Text)
+createExplainabilityExportResponse_explainabilityExportArn = Lens.lens (\CreateExplainabilityExportResponse' {explainabilityExportArn} -> explainabilityExportArn) (\s@CreateExplainabilityExportResponse' {} a -> s {explainabilityExportArn = a} :: CreateExplainabilityExportResponse)
+
+-- | The response's http status code.
+createExplainabilityExportResponse_httpStatus :: Lens.Lens' CreateExplainabilityExportResponse Prelude.Int
+createExplainabilityExportResponse_httpStatus = Lens.lens (\CreateExplainabilityExportResponse' {httpStatus} -> httpStatus) (\s@CreateExplainabilityExportResponse' {} a -> s {httpStatus = a} :: CreateExplainabilityExportResponse)
+
+instance
+  Prelude.NFData
+    CreateExplainabilityExportResponse
+  where
+  rnf CreateExplainabilityExportResponse' {..} =
+    Prelude.rnf explainabilityExportArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateForecast.hs b/gen/Amazonka/Forecast/CreateForecast.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateForecast.hs
@@ -0,0 +1,396 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateForecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a forecast for each item in the @TARGET_TIME_SERIES@ dataset
+-- that was used to train the predictor. This is known as inference. To
+-- retrieve the forecast for a single item at low latency, use the
+-- operation. To export the complete forecast into your Amazon Simple
+-- Storage Service (Amazon S3) bucket, use the CreateForecastExportJob
+-- operation.
+--
+-- The range of the forecast is determined by the @ForecastHorizon@ value,
+-- which you specify in the CreatePredictor request. When you query a
+-- forecast, you can request a specific date range within the forecast.
+--
+-- To get a list of all your forecasts, use the ListForecasts operation.
+--
+-- The forecasts generated by Amazon Forecast are in the same time zone as
+-- the dataset that was used to create the predictor.
+--
+-- For more information, see howitworks-forecast.
+--
+-- The @Status@ of the forecast must be @ACTIVE@ before you can query or
+-- export the forecast. Use the DescribeForecast operation to get the
+-- status.
+--
+-- By default, a forecast includes predictions for every item (@item_id@)
+-- in the dataset group that was used to train the predictor. However, you
+-- can use the @TimeSeriesSelector@ object to generate a forecast on a
+-- subset of time series. Forecast creation is skipped for any time series
+-- that you specify that are not in the input dataset. The forecast export
+-- file will not contain these time series or their forecasted values.
+module Amazonka.Forecast.CreateForecast
+  ( -- * Creating a Request
+    CreateForecast (..),
+    newCreateForecast,
+
+    -- * Request Lenses
+    createForecast_forecastTypes,
+    createForecast_tags,
+    createForecast_timeSeriesSelector,
+    createForecast_forecastName,
+    createForecast_predictorArn,
+
+    -- * Destructuring the Response
+    CreateForecastResponse (..),
+    newCreateForecastResponse,
+
+    -- * Response Lenses
+    createForecastResponse_forecastArn,
+    createForecastResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateForecast' smart constructor.
+data CreateForecast = CreateForecast'
+  { -- | The quantiles at which probabilistic forecasts are generated. __You can
+    -- currently specify up to 5 quantiles per forecast__. Accepted values
+    -- include @0.01 to 0.99@ (increments of .01 only) and @mean@. The mean
+    -- forecast is different from the median (0.50) when the distribution is
+    -- not symmetric (for example, Beta and Negative Binomial).
+    --
+    -- The default quantiles are the quantiles you specified during predictor
+    -- creation. If you didn\'t specify quantiles, the default values are
+    -- @[\"0.1\", \"0.5\", \"0.9\"]@.
+    forecastTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The optional metadata that you apply to the forecast to help you
+    -- categorize and organize them. Each tag consists of a key and an optional
+    -- value, both of which you define.
+    --
+    -- The following basic restrictions apply to tags:
+    --
+    -- -   Maximum number of tags per resource - 50.
+    --
+    -- -   For each resource, each tag key must be unique, and each tag key can
+    --     have only one value.
+    --
+    -- -   Maximum key length - 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length - 256 Unicode characters in UTF-8.
+    --
+    -- -   If your tagging schema is used across multiple services and
+    --     resources, remember that other services may have restrictions on
+    --     allowed characters. Generally allowed characters are: letters,
+    --     numbers, and spaces representable in UTF-8, and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Tag keys and values are case sensitive.
+    --
+    -- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+    --     such as a prefix for keys as it is reserved for AWS use. You cannot
+    --     edit or delete tag keys with this prefix. Values can have this
+    --     prefix. If a tag value has @aws@ as its prefix but the key does not,
+    --     then Forecast considers it to be a user tag and will count against
+    --     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+    --     count against your tags per resource limit.
+    tags :: Prelude.Maybe [Tag],
+    -- | Defines the set of time series that are used to create the forecasts in
+    -- a @TimeSeriesIdentifiers@ object.
+    --
+    -- The @TimeSeriesIdentifiers@ object needs the following information:
+    --
+    -- -   @DataSource@
+    --
+    -- -   @Format@
+    --
+    -- -   @Schema@
+    timeSeriesSelector :: Prelude.Maybe TimeSeriesSelector,
+    -- | A name for the forecast.
+    forecastName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the predictor to use to generate the
+    -- forecast.
+    predictorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateForecast' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastTypes', 'createForecast_forecastTypes' - The quantiles at which probabilistic forecasts are generated. __You can
+-- currently specify up to 5 quantiles per forecast__. Accepted values
+-- include @0.01 to 0.99@ (increments of .01 only) and @mean@. The mean
+-- forecast is different from the median (0.50) when the distribution is
+-- not symmetric (for example, Beta and Negative Binomial).
+--
+-- The default quantiles are the quantiles you specified during predictor
+-- creation. If you didn\'t specify quantiles, the default values are
+-- @[\"0.1\", \"0.5\", \"0.9\"]@.
+--
+-- 'tags', 'createForecast_tags' - The optional metadata that you apply to the forecast to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+--
+-- 'timeSeriesSelector', 'createForecast_timeSeriesSelector' - Defines the set of time series that are used to create the forecasts in
+-- a @TimeSeriesIdentifiers@ object.
+--
+-- The @TimeSeriesIdentifiers@ object needs the following information:
+--
+-- -   @DataSource@
+--
+-- -   @Format@
+--
+-- -   @Schema@
+--
+-- 'forecastName', 'createForecast_forecastName' - A name for the forecast.
+--
+-- 'predictorArn', 'createForecast_predictorArn' - The Amazon Resource Name (ARN) of the predictor to use to generate the
+-- forecast.
+newCreateForecast ::
+  -- | 'forecastName'
+  Prelude.Text ->
+  -- | 'predictorArn'
+  Prelude.Text ->
+  CreateForecast
+newCreateForecast pForecastName_ pPredictorArn_ =
+  CreateForecast'
+    { forecastTypes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      timeSeriesSelector = Prelude.Nothing,
+      forecastName = pForecastName_,
+      predictorArn = pPredictorArn_
+    }
+
+-- | The quantiles at which probabilistic forecasts are generated. __You can
+-- currently specify up to 5 quantiles per forecast__. Accepted values
+-- include @0.01 to 0.99@ (increments of .01 only) and @mean@. The mean
+-- forecast is different from the median (0.50) when the distribution is
+-- not symmetric (for example, Beta and Negative Binomial).
+--
+-- The default quantiles are the quantiles you specified during predictor
+-- creation. If you didn\'t specify quantiles, the default values are
+-- @[\"0.1\", \"0.5\", \"0.9\"]@.
+createForecast_forecastTypes :: Lens.Lens' CreateForecast (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createForecast_forecastTypes = Lens.lens (\CreateForecast' {forecastTypes} -> forecastTypes) (\s@CreateForecast' {} a -> s {forecastTypes = a} :: CreateForecast) Prelude.. Lens.mapping Lens.coerced
+
+-- | The optional metadata that you apply to the forecast to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+createForecast_tags :: Lens.Lens' CreateForecast (Prelude.Maybe [Tag])
+createForecast_tags = Lens.lens (\CreateForecast' {tags} -> tags) (\s@CreateForecast' {} a -> s {tags = a} :: CreateForecast) Prelude.. Lens.mapping Lens.coerced
+
+-- | Defines the set of time series that are used to create the forecasts in
+-- a @TimeSeriesIdentifiers@ object.
+--
+-- The @TimeSeriesIdentifiers@ object needs the following information:
+--
+-- -   @DataSource@
+--
+-- -   @Format@
+--
+-- -   @Schema@
+createForecast_timeSeriesSelector :: Lens.Lens' CreateForecast (Prelude.Maybe TimeSeriesSelector)
+createForecast_timeSeriesSelector = Lens.lens (\CreateForecast' {timeSeriesSelector} -> timeSeriesSelector) (\s@CreateForecast' {} a -> s {timeSeriesSelector = a} :: CreateForecast)
+
+-- | A name for the forecast.
+createForecast_forecastName :: Lens.Lens' CreateForecast Prelude.Text
+createForecast_forecastName = Lens.lens (\CreateForecast' {forecastName} -> forecastName) (\s@CreateForecast' {} a -> s {forecastName = a} :: CreateForecast)
+
+-- | The Amazon Resource Name (ARN) of the predictor to use to generate the
+-- forecast.
+createForecast_predictorArn :: Lens.Lens' CreateForecast Prelude.Text
+createForecast_predictorArn = Lens.lens (\CreateForecast' {predictorArn} -> predictorArn) (\s@CreateForecast' {} a -> s {predictorArn = a} :: CreateForecast)
+
+instance Core.AWSRequest CreateForecast where
+  type
+    AWSResponse CreateForecast =
+      CreateForecastResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateForecastResponse'
+            Prelude.<$> (x Data..?> "ForecastArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateForecast where
+  hashWithSalt _salt CreateForecast' {..} =
+    _salt
+      `Prelude.hashWithSalt` forecastTypes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeSeriesSelector
+      `Prelude.hashWithSalt` forecastName
+      `Prelude.hashWithSalt` predictorArn
+
+instance Prelude.NFData CreateForecast where
+  rnf CreateForecast' {..} =
+    Prelude.rnf forecastTypes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeSeriesSelector
+      `Prelude.seq` Prelude.rnf forecastName
+      `Prelude.seq` Prelude.rnf predictorArn
+
+instance Data.ToHeaders CreateForecast where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateForecast" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateForecast where
+  toJSON CreateForecast' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ForecastTypes" Data..=) Prelude.<$> forecastTypes,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TimeSeriesSelector" Data..=)
+              Prelude.<$> timeSeriesSelector,
+            Prelude.Just ("ForecastName" Data..= forecastName),
+            Prelude.Just ("PredictorArn" Data..= predictorArn)
+          ]
+      )
+
+instance Data.ToPath CreateForecast where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateForecast where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateForecastResponse' smart constructor.
+data CreateForecastResponse = CreateForecastResponse'
+  { -- | The Amazon Resource Name (ARN) of the forecast.
+    forecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateForecastResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastArn', 'createForecastResponse_forecastArn' - The Amazon Resource Name (ARN) of the forecast.
+--
+-- 'httpStatus', 'createForecastResponse_httpStatus' - The response's http status code.
+newCreateForecastResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateForecastResponse
+newCreateForecastResponse pHttpStatus_ =
+  CreateForecastResponse'
+    { forecastArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the forecast.
+createForecastResponse_forecastArn :: Lens.Lens' CreateForecastResponse (Prelude.Maybe Prelude.Text)
+createForecastResponse_forecastArn = Lens.lens (\CreateForecastResponse' {forecastArn} -> forecastArn) (\s@CreateForecastResponse' {} a -> s {forecastArn = a} :: CreateForecastResponse)
+
+-- | The response's http status code.
+createForecastResponse_httpStatus :: Lens.Lens' CreateForecastResponse Prelude.Int
+createForecastResponse_httpStatus = Lens.lens (\CreateForecastResponse' {httpStatus} -> httpStatus) (\s@CreateForecastResponse' {} a -> s {httpStatus = a} :: CreateForecastResponse)
+
+instance Prelude.NFData CreateForecastResponse where
+  rnf CreateForecastResponse' {..} =
+    Prelude.rnf forecastArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateForecastExportJob.hs b/gen/Amazonka/Forecast/CreateForecastExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateForecastExportJob.hs
@@ -0,0 +1,367 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateForecastExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports a forecast created by the CreateForecast operation to your
+-- Amazon Simple Storage Service (Amazon S3) bucket. The forecast file name
+-- will match the following conventions:
+--
+-- \<ForecastExportJobName>_\<ExportTimestamp>_\<PartNumber>
+--
+-- where the \<ExportTimestamp> component is in Java SimpleDateFormat
+-- (yyyy-MM-ddTHH-mm-ssZ).
+--
+-- You must specify a DataDestination object that includes an AWS Identity
+-- and Access Management (IAM) role that Amazon Forecast can assume to
+-- access the Amazon S3 bucket. For more information, see
+-- aws-forecast-iam-roles.
+--
+-- For more information, see howitworks-forecast.
+--
+-- To get a list of all your forecast export jobs, use the
+-- ListForecastExportJobs operation.
+--
+-- The @Status@ of the forecast export job must be @ACTIVE@ before you can
+-- access the forecast in your Amazon S3 bucket. To get the status, use the
+-- DescribeForecastExportJob operation.
+module Amazonka.Forecast.CreateForecastExportJob
+  ( -- * Creating a Request
+    CreateForecastExportJob (..),
+    newCreateForecastExportJob,
+
+    -- * Request Lenses
+    createForecastExportJob_format,
+    createForecastExportJob_tags,
+    createForecastExportJob_forecastExportJobName,
+    createForecastExportJob_forecastArn,
+    createForecastExportJob_destination,
+
+    -- * Destructuring the Response
+    CreateForecastExportJobResponse (..),
+    newCreateForecastExportJobResponse,
+
+    -- * Response Lenses
+    createForecastExportJobResponse_forecastExportJobArn,
+    createForecastExportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateForecastExportJob' smart constructor.
+data CreateForecastExportJob = CreateForecastExportJob'
+  { -- | The format of the exported data, CSV or PARQUET. The default value is
+    -- CSV.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The optional metadata that you apply to the forecast export job to help
+    -- you categorize and organize them. Each tag consists of a key and an
+    -- optional value, both of which you define.
+    --
+    -- The following basic restrictions apply to tags:
+    --
+    -- -   Maximum number of tags per resource - 50.
+    --
+    -- -   For each resource, each tag key must be unique, and each tag key can
+    --     have only one value.
+    --
+    -- -   Maximum key length - 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length - 256 Unicode characters in UTF-8.
+    --
+    -- -   If your tagging schema is used across multiple services and
+    --     resources, remember that other services may have restrictions on
+    --     allowed characters. Generally allowed characters are: letters,
+    --     numbers, and spaces representable in UTF-8, and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Tag keys and values are case sensitive.
+    --
+    -- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+    --     such as a prefix for keys as it is reserved for AWS use. You cannot
+    --     edit or delete tag keys with this prefix. Values can have this
+    --     prefix. If a tag value has @aws@ as its prefix but the key does not,
+    --     then Forecast considers it to be a user tag and will count against
+    --     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+    --     count against your tags per resource limit.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name for the forecast export job.
+    forecastExportJobName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the forecast that you want to export.
+    forecastArn :: Prelude.Text,
+    -- | The location where you want to save the forecast and an AWS Identity and
+    -- Access Management (IAM) role that Amazon Forecast can assume to access
+    -- the location. The forecast must be exported to an Amazon S3 bucket.
+    --
+    -- If encryption is used, @Destination@ must include an AWS Key Management
+    -- Service (KMS) key. The IAM role must allow Amazon Forecast permission to
+    -- access the key.
+    destination :: DataDestination
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateForecastExportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'createForecastExportJob_format' - The format of the exported data, CSV or PARQUET. The default value is
+-- CSV.
+--
+-- 'tags', 'createForecastExportJob_tags' - The optional metadata that you apply to the forecast export job to help
+-- you categorize and organize them. Each tag consists of a key and an
+-- optional value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+--
+-- 'forecastExportJobName', 'createForecastExportJob_forecastExportJobName' - The name for the forecast export job.
+--
+-- 'forecastArn', 'createForecastExportJob_forecastArn' - The Amazon Resource Name (ARN) of the forecast that you want to export.
+--
+-- 'destination', 'createForecastExportJob_destination' - The location where you want to save the forecast and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the location. The forecast must be exported to an Amazon S3 bucket.
+--
+-- If encryption is used, @Destination@ must include an AWS Key Management
+-- Service (KMS) key. The IAM role must allow Amazon Forecast permission to
+-- access the key.
+newCreateForecastExportJob ::
+  -- | 'forecastExportJobName'
+  Prelude.Text ->
+  -- | 'forecastArn'
+  Prelude.Text ->
+  -- | 'destination'
+  DataDestination ->
+  CreateForecastExportJob
+newCreateForecastExportJob
+  pForecastExportJobName_
+  pForecastArn_
+  pDestination_ =
+    CreateForecastExportJob'
+      { format = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        forecastExportJobName = pForecastExportJobName_,
+        forecastArn = pForecastArn_,
+        destination = pDestination_
+      }
+
+-- | The format of the exported data, CSV or PARQUET. The default value is
+-- CSV.
+createForecastExportJob_format :: Lens.Lens' CreateForecastExportJob (Prelude.Maybe Prelude.Text)
+createForecastExportJob_format = Lens.lens (\CreateForecastExportJob' {format} -> format) (\s@CreateForecastExportJob' {} a -> s {format = a} :: CreateForecastExportJob)
+
+-- | The optional metadata that you apply to the forecast export job to help
+-- you categorize and organize them. Each tag consists of a key and an
+-- optional value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+createForecastExportJob_tags :: Lens.Lens' CreateForecastExportJob (Prelude.Maybe [Tag])
+createForecastExportJob_tags = Lens.lens (\CreateForecastExportJob' {tags} -> tags) (\s@CreateForecastExportJob' {} a -> s {tags = a} :: CreateForecastExportJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the forecast export job.
+createForecastExportJob_forecastExportJobName :: Lens.Lens' CreateForecastExportJob Prelude.Text
+createForecastExportJob_forecastExportJobName = Lens.lens (\CreateForecastExportJob' {forecastExportJobName} -> forecastExportJobName) (\s@CreateForecastExportJob' {} a -> s {forecastExportJobName = a} :: CreateForecastExportJob)
+
+-- | The Amazon Resource Name (ARN) of the forecast that you want to export.
+createForecastExportJob_forecastArn :: Lens.Lens' CreateForecastExportJob Prelude.Text
+createForecastExportJob_forecastArn = Lens.lens (\CreateForecastExportJob' {forecastArn} -> forecastArn) (\s@CreateForecastExportJob' {} a -> s {forecastArn = a} :: CreateForecastExportJob)
+
+-- | The location where you want to save the forecast and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the location. The forecast must be exported to an Amazon S3 bucket.
+--
+-- If encryption is used, @Destination@ must include an AWS Key Management
+-- Service (KMS) key. The IAM role must allow Amazon Forecast permission to
+-- access the key.
+createForecastExportJob_destination :: Lens.Lens' CreateForecastExportJob DataDestination
+createForecastExportJob_destination = Lens.lens (\CreateForecastExportJob' {destination} -> destination) (\s@CreateForecastExportJob' {} a -> s {destination = a} :: CreateForecastExportJob)
+
+instance Core.AWSRequest CreateForecastExportJob where
+  type
+    AWSResponse CreateForecastExportJob =
+      CreateForecastExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateForecastExportJobResponse'
+            Prelude.<$> (x Data..?> "ForecastExportJobArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateForecastExportJob where
+  hashWithSalt _salt CreateForecastExportJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` forecastExportJobName
+      `Prelude.hashWithSalt` forecastArn
+      `Prelude.hashWithSalt` destination
+
+instance Prelude.NFData CreateForecastExportJob where
+  rnf CreateForecastExportJob' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf forecastExportJobName
+      `Prelude.seq` Prelude.rnf forecastArn
+      `Prelude.seq` Prelude.rnf destination
+
+instance Data.ToHeaders CreateForecastExportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateForecastExportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateForecastExportJob where
+  toJSON CreateForecastExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "ForecastExportJobName"
+                  Data..= forecastExportJobName
+              ),
+            Prelude.Just ("ForecastArn" Data..= forecastArn),
+            Prelude.Just ("Destination" Data..= destination)
+          ]
+      )
+
+instance Data.ToPath CreateForecastExportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateForecastExportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateForecastExportJobResponse' smart constructor.
+data CreateForecastExportJobResponse = CreateForecastExportJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the export job.
+    forecastExportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateForecastExportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastExportJobArn', 'createForecastExportJobResponse_forecastExportJobArn' - The Amazon Resource Name (ARN) of the export job.
+--
+-- 'httpStatus', 'createForecastExportJobResponse_httpStatus' - The response's http status code.
+newCreateForecastExportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateForecastExportJobResponse
+newCreateForecastExportJobResponse pHttpStatus_ =
+  CreateForecastExportJobResponse'
+    { forecastExportJobArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the export job.
+createForecastExportJobResponse_forecastExportJobArn :: Lens.Lens' CreateForecastExportJobResponse (Prelude.Maybe Prelude.Text)
+createForecastExportJobResponse_forecastExportJobArn = Lens.lens (\CreateForecastExportJobResponse' {forecastExportJobArn} -> forecastExportJobArn) (\s@CreateForecastExportJobResponse' {} a -> s {forecastExportJobArn = a} :: CreateForecastExportJobResponse)
+
+-- | The response's http status code.
+createForecastExportJobResponse_httpStatus :: Lens.Lens' CreateForecastExportJobResponse Prelude.Int
+createForecastExportJobResponse_httpStatus = Lens.lens (\CreateForecastExportJobResponse' {httpStatus} -> httpStatus) (\s@CreateForecastExportJobResponse' {} a -> s {httpStatus = a} :: CreateForecastExportJobResponse)
+
+instance
+  Prelude.NFData
+    CreateForecastExportJobResponse
+  where
+  rnf CreateForecastExportJobResponse' {..} =
+    Prelude.rnf forecastExportJobArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateMonitor.hs b/gen/Amazonka/Forecast/CreateMonitor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateMonitor.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateMonitor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a predictor monitor resource for an existing auto predictor.
+-- Predictor monitoring allows you to see how your predictor\'s performance
+-- changes over time. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring.html Predictor Monitoring>.
+module Amazonka.Forecast.CreateMonitor
+  ( -- * Creating a Request
+    CreateMonitor (..),
+    newCreateMonitor,
+
+    -- * Request Lenses
+    createMonitor_tags,
+    createMonitor_monitorName,
+    createMonitor_resourceArn,
+
+    -- * Destructuring the Response
+    CreateMonitorResponse (..),
+    newCreateMonitorResponse,
+
+    -- * Response Lenses
+    createMonitorResponse_monitorArn,
+    createMonitorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateMonitor' smart constructor.
+data CreateMonitor = CreateMonitor'
+  { -- | A list of
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+    -- to apply to the monitor resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the monitor resource.
+    monitorName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the predictor to monitor.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMonitor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createMonitor_tags' - A list of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+-- to apply to the monitor resource.
+--
+-- 'monitorName', 'createMonitor_monitorName' - The name of the monitor resource.
+--
+-- 'resourceArn', 'createMonitor_resourceArn' - The Amazon Resource Name (ARN) of the predictor to monitor.
+newCreateMonitor ::
+  -- | 'monitorName'
+  Prelude.Text ->
+  -- | 'resourceArn'
+  Prelude.Text ->
+  CreateMonitor
+newCreateMonitor pMonitorName_ pResourceArn_ =
+  CreateMonitor'
+    { tags = Prelude.Nothing,
+      monitorName = pMonitorName_,
+      resourceArn = pResourceArn_
+    }
+
+-- | A list of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+-- to apply to the monitor resource.
+createMonitor_tags :: Lens.Lens' CreateMonitor (Prelude.Maybe [Tag])
+createMonitor_tags = Lens.lens (\CreateMonitor' {tags} -> tags) (\s@CreateMonitor' {} a -> s {tags = a} :: CreateMonitor) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the monitor resource.
+createMonitor_monitorName :: Lens.Lens' CreateMonitor Prelude.Text
+createMonitor_monitorName = Lens.lens (\CreateMonitor' {monitorName} -> monitorName) (\s@CreateMonitor' {} a -> s {monitorName = a} :: CreateMonitor)
+
+-- | The Amazon Resource Name (ARN) of the predictor to monitor.
+createMonitor_resourceArn :: Lens.Lens' CreateMonitor Prelude.Text
+createMonitor_resourceArn = Lens.lens (\CreateMonitor' {resourceArn} -> resourceArn) (\s@CreateMonitor' {} a -> s {resourceArn = a} :: CreateMonitor)
+
+instance Core.AWSRequest CreateMonitor where
+  type
+    AWSResponse CreateMonitor =
+      CreateMonitorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateMonitorResponse'
+            Prelude.<$> (x Data..?> "MonitorArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateMonitor where
+  hashWithSalt _salt CreateMonitor' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` monitorName
+      `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData CreateMonitor where
+  rnf CreateMonitor' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf monitorName
+      `Prelude.seq` Prelude.rnf resourceArn
+
+instance Data.ToHeaders CreateMonitor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateMonitor" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateMonitor where
+  toJSON CreateMonitor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("MonitorName" Data..= monitorName),
+            Prelude.Just ("ResourceArn" Data..= resourceArn)
+          ]
+      )
+
+instance Data.ToPath CreateMonitor where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateMonitor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateMonitorResponse' smart constructor.
+data CreateMonitorResponse = CreateMonitorResponse'
+  { -- | The Amazon Resource Name (ARN) of the monitor resource.
+    monitorArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateMonitorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'monitorArn', 'createMonitorResponse_monitorArn' - The Amazon Resource Name (ARN) of the monitor resource.
+--
+-- 'httpStatus', 'createMonitorResponse_httpStatus' - The response's http status code.
+newCreateMonitorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateMonitorResponse
+newCreateMonitorResponse pHttpStatus_ =
+  CreateMonitorResponse'
+    { monitorArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the monitor resource.
+createMonitorResponse_monitorArn :: Lens.Lens' CreateMonitorResponse (Prelude.Maybe Prelude.Text)
+createMonitorResponse_monitorArn = Lens.lens (\CreateMonitorResponse' {monitorArn} -> monitorArn) (\s@CreateMonitorResponse' {} a -> s {monitorArn = a} :: CreateMonitorResponse)
+
+-- | The response's http status code.
+createMonitorResponse_httpStatus :: Lens.Lens' CreateMonitorResponse Prelude.Int
+createMonitorResponse_httpStatus = Lens.lens (\CreateMonitorResponse' {httpStatus} -> httpStatus) (\s@CreateMonitorResponse' {} a -> s {httpStatus = a} :: CreateMonitorResponse)
+
+instance Prelude.NFData CreateMonitorResponse where
+  rnf CreateMonitorResponse' {..} =
+    Prelude.rnf monitorArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreatePredictor.hs b/gen/Amazonka/Forecast/CreatePredictor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreatePredictor.hs
@@ -0,0 +1,746 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreatePredictor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation creates a legacy predictor that does not include all the
+-- predictor functionalities provided by Amazon Forecast. To create a
+-- predictor that is compatible with all aspects of Forecast, use
+-- CreateAutoPredictor.
+--
+-- Creates an Amazon Forecast predictor.
+--
+-- In the request, provide a dataset group and either specify an algorithm
+-- or let Amazon Forecast choose an algorithm for you using AutoML. If you
+-- specify an algorithm, you also can override algorithm-specific
+-- hyperparameters.
+--
+-- Amazon Forecast uses the algorithm to train a predictor using the latest
+-- version of the datasets in the specified dataset group. You can then
+-- generate a forecast using the CreateForecast operation.
+--
+-- To see the evaluation metrics, use the GetAccuracyMetrics operation.
+--
+-- You can specify a featurization configuration to fill and aggregate the
+-- data fields in the @TARGET_TIME_SERIES@ dataset to improve model
+-- training. For more information, see FeaturizationConfig.
+--
+-- For RELATED_TIME_SERIES datasets, @CreatePredictor@ verifies that the
+-- @DataFrequency@ specified when the dataset was created matches the
+-- @ForecastFrequency@. TARGET_TIME_SERIES datasets don\'t have this
+-- restriction. Amazon Forecast also verifies the delimiter and timestamp
+-- format. For more information, see howitworks-datasets-groups.
+--
+-- By default, predictors are trained and evaluated at the 0.1 (P10), 0.5
+-- (P50), and 0.9 (P90) quantiles. You can choose custom forecast types to
+-- train and evaluate your predictor by setting the @ForecastTypes@.
+--
+-- __AutoML__
+--
+-- If you want Amazon Forecast to evaluate each algorithm and choose the
+-- one that minimizes the @objective function@, set @PerformAutoML@ to
+-- @true@. The @objective function@ is defined as the mean of the weighted
+-- losses over the forecast types. By default, these are the p10, p50, and
+-- p90 quantile losses. For more information, see EvaluationResult.
+--
+-- When AutoML is enabled, the following properties are disallowed:
+--
+-- -   @AlgorithmArn@
+--
+-- -   @HPOConfig@
+--
+-- -   @PerformHPO@
+--
+-- -   @TrainingParameters@
+--
+-- To get a list of all of your predictors, use the ListPredictors
+-- operation.
+--
+-- Before you can use the predictor to create a forecast, the @Status@ of
+-- the predictor must be @ACTIVE@, signifying that training has completed.
+-- To get the status, use the DescribePredictor operation.
+module Amazonka.Forecast.CreatePredictor
+  ( -- * Creating a Request
+    CreatePredictor (..),
+    newCreatePredictor,
+
+    -- * Request Lenses
+    createPredictor_algorithmArn,
+    createPredictor_autoMLOverrideStrategy,
+    createPredictor_encryptionConfig,
+    createPredictor_evaluationParameters,
+    createPredictor_forecastTypes,
+    createPredictor_hPOConfig,
+    createPredictor_optimizationMetric,
+    createPredictor_performAutoML,
+    createPredictor_performHPO,
+    createPredictor_tags,
+    createPredictor_trainingParameters,
+    createPredictor_predictorName,
+    createPredictor_forecastHorizon,
+    createPredictor_inputDataConfig,
+    createPredictor_featurizationConfig,
+
+    -- * Destructuring the Response
+    CreatePredictorResponse (..),
+    newCreatePredictorResponse,
+
+    -- * Response Lenses
+    createPredictorResponse_predictorArn,
+    createPredictorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreatePredictor' smart constructor.
+data CreatePredictor = CreatePredictor'
+  { -- | The Amazon Resource Name (ARN) of the algorithm to use for model
+    -- training. Required if @PerformAutoML@ is not set to @true@.
+    --
+    -- __Supported algorithms:__
+    --
+    -- -   @arn:aws:forecast:::algorithm\/ARIMA@
+    --
+    -- -   @arn:aws:forecast:::algorithm\/CNN-QR@
+    --
+    -- -   @arn:aws:forecast:::algorithm\/Deep_AR_Plus@
+    --
+    -- -   @arn:aws:forecast:::algorithm\/ETS@
+    --
+    -- -   @arn:aws:forecast:::algorithm\/NPTS@
+    --
+    -- -   @arn:aws:forecast:::algorithm\/Prophet@
+    algorithmArn :: Prelude.Maybe Prelude.Text,
+    -- | The @LatencyOptimized@ AutoML override strategy is only available in
+    -- private beta. Contact AWS Support or your account manager to learn more
+    -- about access privileges.
+    --
+    -- Used to overide the default AutoML strategy, which is to optimize
+    -- predictor accuracy. To apply an AutoML strategy that minimizes training
+    -- time, use @LatencyOptimized@.
+    --
+    -- This parameter is only valid for predictors trained using AutoML.
+    autoMLOverrideStrategy :: Prelude.Maybe AutoMLOverrideStrategy,
+    -- | An AWS Key Management Service (KMS) key and the AWS Identity and Access
+    -- Management (IAM) role that Amazon Forecast can assume to access the key.
+    encryptionConfig :: Prelude.Maybe EncryptionConfig,
+    -- | Used to override the default evaluation parameters of the specified
+    -- algorithm. Amazon Forecast evaluates a predictor by splitting a dataset
+    -- into training data and testing data. The evaluation parameters define
+    -- how to perform the split and the number of iterations.
+    evaluationParameters :: Prelude.Maybe EvaluationParameters,
+    -- | Specifies the forecast types used to train a predictor. You can specify
+    -- up to five forecast types. Forecast types can be quantiles from 0.01 to
+    -- 0.99, by increments of 0.01 or higher. You can also specify the mean
+    -- forecast with @mean@.
+    --
+    -- The default value is @[\"0.10\", \"0.50\", \"0.9\"]@.
+    forecastTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | Provides hyperparameter override values for the algorithm. If you don\'t
+    -- provide this parameter, Amazon Forecast uses default values. The
+    -- individual algorithms specify which hyperparameters support
+    -- hyperparameter optimization (HPO). For more information, see
+    -- aws-forecast-choosing-recipes.
+    --
+    -- If you included the @HPOConfig@ object, you must set @PerformHPO@ to
+    -- true.
+    hPOConfig :: Prelude.Maybe HyperParameterTuningJobConfig,
+    -- | The accuracy metric used to optimize the predictor.
+    optimizationMetric :: Prelude.Maybe OptimizationMetric,
+    -- | Whether to perform AutoML. When Amazon Forecast performs AutoML, it
+    -- evaluates the algorithms it provides and chooses the best algorithm and
+    -- configuration for your training dataset.
+    --
+    -- The default value is @false@. In this case, you are required to specify
+    -- an algorithm.
+    --
+    -- Set @PerformAutoML@ to @true@ to have Amazon Forecast perform AutoML.
+    -- This is a good option if you aren\'t sure which algorithm is suitable
+    -- for your training data. In this case, @PerformHPO@ must be false.
+    performAutoML :: Prelude.Maybe Prelude.Bool,
+    -- | Whether to perform hyperparameter optimization (HPO). HPO finds optimal
+    -- hyperparameter values for your training data. The process of performing
+    -- HPO is known as running a hyperparameter tuning job.
+    --
+    -- The default value is @false@. In this case, Amazon Forecast uses default
+    -- hyperparameter values from the chosen algorithm.
+    --
+    -- To override the default values, set @PerformHPO@ to @true@ and,
+    -- optionally, supply the HyperParameterTuningJobConfig object. The tuning
+    -- job specifies a metric to optimize, which hyperparameters participate in
+    -- tuning, and the valid range for each tunable hyperparameter. In this
+    -- case, you are required to specify an algorithm and @PerformAutoML@ must
+    -- be false.
+    --
+    -- The following algorithms support HPO:
+    --
+    -- -   DeepAR+
+    --
+    -- -   CNN-QR
+    performHPO :: Prelude.Maybe Prelude.Bool,
+    -- | The optional metadata that you apply to the predictor to help you
+    -- categorize and organize them. Each tag consists of a key and an optional
+    -- value, both of which you define.
+    --
+    -- The following basic restrictions apply to tags:
+    --
+    -- -   Maximum number of tags per resource - 50.
+    --
+    -- -   For each resource, each tag key must be unique, and each tag key can
+    --     have only one value.
+    --
+    -- -   Maximum key length - 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length - 256 Unicode characters in UTF-8.
+    --
+    -- -   If your tagging schema is used across multiple services and
+    --     resources, remember that other services may have restrictions on
+    --     allowed characters. Generally allowed characters are: letters,
+    --     numbers, and spaces representable in UTF-8, and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Tag keys and values are case sensitive.
+    --
+    -- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+    --     such as a prefix for keys as it is reserved for AWS use. You cannot
+    --     edit or delete tag keys with this prefix. Values can have this
+    --     prefix. If a tag value has @aws@ as its prefix but the key does not,
+    --     then Forecast considers it to be a user tag and will count against
+    --     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+    --     count against your tags per resource limit.
+    tags :: Prelude.Maybe [Tag],
+    -- | The hyperparameters to override for model training. The hyperparameters
+    -- that you can override are listed in the individual algorithms. For the
+    -- list of supported algorithms, see aws-forecast-choosing-recipes.
+    trainingParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | A name for the predictor.
+    predictorName :: Prelude.Text,
+    -- | Specifies the number of time-steps that the model is trained to predict.
+    -- The forecast horizon is also called the prediction length.
+    --
+    -- For example, if you configure a dataset for daily data collection (using
+    -- the @DataFrequency@ parameter of the CreateDataset operation) and set
+    -- the forecast horizon to 10, the model returns predictions for 10 days.
+    --
+    -- The maximum forecast horizon is the lesser of 500 time-steps or 1\/3 of
+    -- the TARGET_TIME_SERIES dataset length.
+    forecastHorizon :: Prelude.Int,
+    -- | Describes the dataset group that contains the data to use to train the
+    -- predictor.
+    inputDataConfig :: InputDataConfig,
+    -- | The featurization configuration.
+    featurizationConfig :: FeaturizationConfig
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePredictor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'algorithmArn', 'createPredictor_algorithmArn' - The Amazon Resource Name (ARN) of the algorithm to use for model
+-- training. Required if @PerformAutoML@ is not set to @true@.
+--
+-- __Supported algorithms:__
+--
+-- -   @arn:aws:forecast:::algorithm\/ARIMA@
+--
+-- -   @arn:aws:forecast:::algorithm\/CNN-QR@
+--
+-- -   @arn:aws:forecast:::algorithm\/Deep_AR_Plus@
+--
+-- -   @arn:aws:forecast:::algorithm\/ETS@
+--
+-- -   @arn:aws:forecast:::algorithm\/NPTS@
+--
+-- -   @arn:aws:forecast:::algorithm\/Prophet@
+--
+-- 'autoMLOverrideStrategy', 'createPredictor_autoMLOverrideStrategy' - The @LatencyOptimized@ AutoML override strategy is only available in
+-- private beta. Contact AWS Support or your account manager to learn more
+-- about access privileges.
+--
+-- Used to overide the default AutoML strategy, which is to optimize
+-- predictor accuracy. To apply an AutoML strategy that minimizes training
+-- time, use @LatencyOptimized@.
+--
+-- This parameter is only valid for predictors trained using AutoML.
+--
+-- 'encryptionConfig', 'createPredictor_encryptionConfig' - An AWS Key Management Service (KMS) key and the AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+--
+-- 'evaluationParameters', 'createPredictor_evaluationParameters' - Used to override the default evaluation parameters of the specified
+-- algorithm. Amazon Forecast evaluates a predictor by splitting a dataset
+-- into training data and testing data. The evaluation parameters define
+-- how to perform the split and the number of iterations.
+--
+-- 'forecastTypes', 'createPredictor_forecastTypes' - Specifies the forecast types used to train a predictor. You can specify
+-- up to five forecast types. Forecast types can be quantiles from 0.01 to
+-- 0.99, by increments of 0.01 or higher. You can also specify the mean
+-- forecast with @mean@.
+--
+-- The default value is @[\"0.10\", \"0.50\", \"0.9\"]@.
+--
+-- 'hPOConfig', 'createPredictor_hPOConfig' - Provides hyperparameter override values for the algorithm. If you don\'t
+-- provide this parameter, Amazon Forecast uses default values. The
+-- individual algorithms specify which hyperparameters support
+-- hyperparameter optimization (HPO). For more information, see
+-- aws-forecast-choosing-recipes.
+--
+-- If you included the @HPOConfig@ object, you must set @PerformHPO@ to
+-- true.
+--
+-- 'optimizationMetric', 'createPredictor_optimizationMetric' - The accuracy metric used to optimize the predictor.
+--
+-- 'performAutoML', 'createPredictor_performAutoML' - Whether to perform AutoML. When Amazon Forecast performs AutoML, it
+-- evaluates the algorithms it provides and chooses the best algorithm and
+-- configuration for your training dataset.
+--
+-- The default value is @false@. In this case, you are required to specify
+-- an algorithm.
+--
+-- Set @PerformAutoML@ to @true@ to have Amazon Forecast perform AutoML.
+-- This is a good option if you aren\'t sure which algorithm is suitable
+-- for your training data. In this case, @PerformHPO@ must be false.
+--
+-- 'performHPO', 'createPredictor_performHPO' - Whether to perform hyperparameter optimization (HPO). HPO finds optimal
+-- hyperparameter values for your training data. The process of performing
+-- HPO is known as running a hyperparameter tuning job.
+--
+-- The default value is @false@. In this case, Amazon Forecast uses default
+-- hyperparameter values from the chosen algorithm.
+--
+-- To override the default values, set @PerformHPO@ to @true@ and,
+-- optionally, supply the HyperParameterTuningJobConfig object. The tuning
+-- job specifies a metric to optimize, which hyperparameters participate in
+-- tuning, and the valid range for each tunable hyperparameter. In this
+-- case, you are required to specify an algorithm and @PerformAutoML@ must
+-- be false.
+--
+-- The following algorithms support HPO:
+--
+-- -   DeepAR+
+--
+-- -   CNN-QR
+--
+-- 'tags', 'createPredictor_tags' - The optional metadata that you apply to the predictor to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+--
+-- 'trainingParameters', 'createPredictor_trainingParameters' - The hyperparameters to override for model training. The hyperparameters
+-- that you can override are listed in the individual algorithms. For the
+-- list of supported algorithms, see aws-forecast-choosing-recipes.
+--
+-- 'predictorName', 'createPredictor_predictorName' - A name for the predictor.
+--
+-- 'forecastHorizon', 'createPredictor_forecastHorizon' - Specifies the number of time-steps that the model is trained to predict.
+-- The forecast horizon is also called the prediction length.
+--
+-- For example, if you configure a dataset for daily data collection (using
+-- the @DataFrequency@ parameter of the CreateDataset operation) and set
+-- the forecast horizon to 10, the model returns predictions for 10 days.
+--
+-- The maximum forecast horizon is the lesser of 500 time-steps or 1\/3 of
+-- the TARGET_TIME_SERIES dataset length.
+--
+-- 'inputDataConfig', 'createPredictor_inputDataConfig' - Describes the dataset group that contains the data to use to train the
+-- predictor.
+--
+-- 'featurizationConfig', 'createPredictor_featurizationConfig' - The featurization configuration.
+newCreatePredictor ::
+  -- | 'predictorName'
+  Prelude.Text ->
+  -- | 'forecastHorizon'
+  Prelude.Int ->
+  -- | 'inputDataConfig'
+  InputDataConfig ->
+  -- | 'featurizationConfig'
+  FeaturizationConfig ->
+  CreatePredictor
+newCreatePredictor
+  pPredictorName_
+  pForecastHorizon_
+  pInputDataConfig_
+  pFeaturizationConfig_ =
+    CreatePredictor'
+      { algorithmArn = Prelude.Nothing,
+        autoMLOverrideStrategy = Prelude.Nothing,
+        encryptionConfig = Prelude.Nothing,
+        evaluationParameters = Prelude.Nothing,
+        forecastTypes = Prelude.Nothing,
+        hPOConfig = Prelude.Nothing,
+        optimizationMetric = Prelude.Nothing,
+        performAutoML = Prelude.Nothing,
+        performHPO = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        trainingParameters = Prelude.Nothing,
+        predictorName = pPredictorName_,
+        forecastHorizon = pForecastHorizon_,
+        inputDataConfig = pInputDataConfig_,
+        featurizationConfig = pFeaturizationConfig_
+      }
+
+-- | The Amazon Resource Name (ARN) of the algorithm to use for model
+-- training. Required if @PerformAutoML@ is not set to @true@.
+--
+-- __Supported algorithms:__
+--
+-- -   @arn:aws:forecast:::algorithm\/ARIMA@
+--
+-- -   @arn:aws:forecast:::algorithm\/CNN-QR@
+--
+-- -   @arn:aws:forecast:::algorithm\/Deep_AR_Plus@
+--
+-- -   @arn:aws:forecast:::algorithm\/ETS@
+--
+-- -   @arn:aws:forecast:::algorithm\/NPTS@
+--
+-- -   @arn:aws:forecast:::algorithm\/Prophet@
+createPredictor_algorithmArn :: Lens.Lens' CreatePredictor (Prelude.Maybe Prelude.Text)
+createPredictor_algorithmArn = Lens.lens (\CreatePredictor' {algorithmArn} -> algorithmArn) (\s@CreatePredictor' {} a -> s {algorithmArn = a} :: CreatePredictor)
+
+-- | The @LatencyOptimized@ AutoML override strategy is only available in
+-- private beta. Contact AWS Support or your account manager to learn more
+-- about access privileges.
+--
+-- Used to overide the default AutoML strategy, which is to optimize
+-- predictor accuracy. To apply an AutoML strategy that minimizes training
+-- time, use @LatencyOptimized@.
+--
+-- This parameter is only valid for predictors trained using AutoML.
+createPredictor_autoMLOverrideStrategy :: Lens.Lens' CreatePredictor (Prelude.Maybe AutoMLOverrideStrategy)
+createPredictor_autoMLOverrideStrategy = Lens.lens (\CreatePredictor' {autoMLOverrideStrategy} -> autoMLOverrideStrategy) (\s@CreatePredictor' {} a -> s {autoMLOverrideStrategy = a} :: CreatePredictor)
+
+-- | An AWS Key Management Service (KMS) key and the AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+createPredictor_encryptionConfig :: Lens.Lens' CreatePredictor (Prelude.Maybe EncryptionConfig)
+createPredictor_encryptionConfig = Lens.lens (\CreatePredictor' {encryptionConfig} -> encryptionConfig) (\s@CreatePredictor' {} a -> s {encryptionConfig = a} :: CreatePredictor)
+
+-- | Used to override the default evaluation parameters of the specified
+-- algorithm. Amazon Forecast evaluates a predictor by splitting a dataset
+-- into training data and testing data. The evaluation parameters define
+-- how to perform the split and the number of iterations.
+createPredictor_evaluationParameters :: Lens.Lens' CreatePredictor (Prelude.Maybe EvaluationParameters)
+createPredictor_evaluationParameters = Lens.lens (\CreatePredictor' {evaluationParameters} -> evaluationParameters) (\s@CreatePredictor' {} a -> s {evaluationParameters = a} :: CreatePredictor)
+
+-- | Specifies the forecast types used to train a predictor. You can specify
+-- up to five forecast types. Forecast types can be quantiles from 0.01 to
+-- 0.99, by increments of 0.01 or higher. You can also specify the mean
+-- forecast with @mean@.
+--
+-- The default value is @[\"0.10\", \"0.50\", \"0.9\"]@.
+createPredictor_forecastTypes :: Lens.Lens' CreatePredictor (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createPredictor_forecastTypes = Lens.lens (\CreatePredictor' {forecastTypes} -> forecastTypes) (\s@CreatePredictor' {} a -> s {forecastTypes = a} :: CreatePredictor) Prelude.. Lens.mapping Lens.coerced
+
+-- | Provides hyperparameter override values for the algorithm. If you don\'t
+-- provide this parameter, Amazon Forecast uses default values. The
+-- individual algorithms specify which hyperparameters support
+-- hyperparameter optimization (HPO). For more information, see
+-- aws-forecast-choosing-recipes.
+--
+-- If you included the @HPOConfig@ object, you must set @PerformHPO@ to
+-- true.
+createPredictor_hPOConfig :: Lens.Lens' CreatePredictor (Prelude.Maybe HyperParameterTuningJobConfig)
+createPredictor_hPOConfig = Lens.lens (\CreatePredictor' {hPOConfig} -> hPOConfig) (\s@CreatePredictor' {} a -> s {hPOConfig = a} :: CreatePredictor)
+
+-- | The accuracy metric used to optimize the predictor.
+createPredictor_optimizationMetric :: Lens.Lens' CreatePredictor (Prelude.Maybe OptimizationMetric)
+createPredictor_optimizationMetric = Lens.lens (\CreatePredictor' {optimizationMetric} -> optimizationMetric) (\s@CreatePredictor' {} a -> s {optimizationMetric = a} :: CreatePredictor)
+
+-- | Whether to perform AutoML. When Amazon Forecast performs AutoML, it
+-- evaluates the algorithms it provides and chooses the best algorithm and
+-- configuration for your training dataset.
+--
+-- The default value is @false@. In this case, you are required to specify
+-- an algorithm.
+--
+-- Set @PerformAutoML@ to @true@ to have Amazon Forecast perform AutoML.
+-- This is a good option if you aren\'t sure which algorithm is suitable
+-- for your training data. In this case, @PerformHPO@ must be false.
+createPredictor_performAutoML :: Lens.Lens' CreatePredictor (Prelude.Maybe Prelude.Bool)
+createPredictor_performAutoML = Lens.lens (\CreatePredictor' {performAutoML} -> performAutoML) (\s@CreatePredictor' {} a -> s {performAutoML = a} :: CreatePredictor)
+
+-- | Whether to perform hyperparameter optimization (HPO). HPO finds optimal
+-- hyperparameter values for your training data. The process of performing
+-- HPO is known as running a hyperparameter tuning job.
+--
+-- The default value is @false@. In this case, Amazon Forecast uses default
+-- hyperparameter values from the chosen algorithm.
+--
+-- To override the default values, set @PerformHPO@ to @true@ and,
+-- optionally, supply the HyperParameterTuningJobConfig object. The tuning
+-- job specifies a metric to optimize, which hyperparameters participate in
+-- tuning, and the valid range for each tunable hyperparameter. In this
+-- case, you are required to specify an algorithm and @PerformAutoML@ must
+-- be false.
+--
+-- The following algorithms support HPO:
+--
+-- -   DeepAR+
+--
+-- -   CNN-QR
+createPredictor_performHPO :: Lens.Lens' CreatePredictor (Prelude.Maybe Prelude.Bool)
+createPredictor_performHPO = Lens.lens (\CreatePredictor' {performHPO} -> performHPO) (\s@CreatePredictor' {} a -> s {performHPO = a} :: CreatePredictor)
+
+-- | The optional metadata that you apply to the predictor to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+createPredictor_tags :: Lens.Lens' CreatePredictor (Prelude.Maybe [Tag])
+createPredictor_tags = Lens.lens (\CreatePredictor' {tags} -> tags) (\s@CreatePredictor' {} a -> s {tags = a} :: CreatePredictor) Prelude.. Lens.mapping Lens.coerced
+
+-- | The hyperparameters to override for model training. The hyperparameters
+-- that you can override are listed in the individual algorithms. For the
+-- list of supported algorithms, see aws-forecast-choosing-recipes.
+createPredictor_trainingParameters :: Lens.Lens' CreatePredictor (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createPredictor_trainingParameters = Lens.lens (\CreatePredictor' {trainingParameters} -> trainingParameters) (\s@CreatePredictor' {} a -> s {trainingParameters = a} :: CreatePredictor) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the predictor.
+createPredictor_predictorName :: Lens.Lens' CreatePredictor Prelude.Text
+createPredictor_predictorName = Lens.lens (\CreatePredictor' {predictorName} -> predictorName) (\s@CreatePredictor' {} a -> s {predictorName = a} :: CreatePredictor)
+
+-- | Specifies the number of time-steps that the model is trained to predict.
+-- The forecast horizon is also called the prediction length.
+--
+-- For example, if you configure a dataset for daily data collection (using
+-- the @DataFrequency@ parameter of the CreateDataset operation) and set
+-- the forecast horizon to 10, the model returns predictions for 10 days.
+--
+-- The maximum forecast horizon is the lesser of 500 time-steps or 1\/3 of
+-- the TARGET_TIME_SERIES dataset length.
+createPredictor_forecastHorizon :: Lens.Lens' CreatePredictor Prelude.Int
+createPredictor_forecastHorizon = Lens.lens (\CreatePredictor' {forecastHorizon} -> forecastHorizon) (\s@CreatePredictor' {} a -> s {forecastHorizon = a} :: CreatePredictor)
+
+-- | Describes the dataset group that contains the data to use to train the
+-- predictor.
+createPredictor_inputDataConfig :: Lens.Lens' CreatePredictor InputDataConfig
+createPredictor_inputDataConfig = Lens.lens (\CreatePredictor' {inputDataConfig} -> inputDataConfig) (\s@CreatePredictor' {} a -> s {inputDataConfig = a} :: CreatePredictor)
+
+-- | The featurization configuration.
+createPredictor_featurizationConfig :: Lens.Lens' CreatePredictor FeaturizationConfig
+createPredictor_featurizationConfig = Lens.lens (\CreatePredictor' {featurizationConfig} -> featurizationConfig) (\s@CreatePredictor' {} a -> s {featurizationConfig = a} :: CreatePredictor)
+
+instance Core.AWSRequest CreatePredictor where
+  type
+    AWSResponse CreatePredictor =
+      CreatePredictorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreatePredictorResponse'
+            Prelude.<$> (x Data..?> "PredictorArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreatePredictor where
+  hashWithSalt _salt CreatePredictor' {..} =
+    _salt
+      `Prelude.hashWithSalt` algorithmArn
+      `Prelude.hashWithSalt` autoMLOverrideStrategy
+      `Prelude.hashWithSalt` encryptionConfig
+      `Prelude.hashWithSalt` evaluationParameters
+      `Prelude.hashWithSalt` forecastTypes
+      `Prelude.hashWithSalt` hPOConfig
+      `Prelude.hashWithSalt` optimizationMetric
+      `Prelude.hashWithSalt` performAutoML
+      `Prelude.hashWithSalt` performHPO
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trainingParameters
+      `Prelude.hashWithSalt` predictorName
+      `Prelude.hashWithSalt` forecastHorizon
+      `Prelude.hashWithSalt` inputDataConfig
+      `Prelude.hashWithSalt` featurizationConfig
+
+instance Prelude.NFData CreatePredictor where
+  rnf CreatePredictor' {..} =
+    Prelude.rnf algorithmArn
+      `Prelude.seq` Prelude.rnf autoMLOverrideStrategy
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf evaluationParameters
+      `Prelude.seq` Prelude.rnf forecastTypes
+      `Prelude.seq` Prelude.rnf hPOConfig
+      `Prelude.seq` Prelude.rnf optimizationMetric
+      `Prelude.seq` Prelude.rnf performAutoML
+      `Prelude.seq` Prelude.rnf performHPO
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trainingParameters
+      `Prelude.seq` Prelude.rnf predictorName
+      `Prelude.seq` Prelude.rnf forecastHorizon
+      `Prelude.seq` Prelude.rnf inputDataConfig
+      `Prelude.seq` Prelude.rnf featurizationConfig
+
+instance Data.ToHeaders CreatePredictor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreatePredictor" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreatePredictor where
+  toJSON CreatePredictor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AlgorithmArn" Data..=) Prelude.<$> algorithmArn,
+            ("AutoMLOverrideStrategy" Data..=)
+              Prelude.<$> autoMLOverrideStrategy,
+            ("EncryptionConfig" Data..=)
+              Prelude.<$> encryptionConfig,
+            ("EvaluationParameters" Data..=)
+              Prelude.<$> evaluationParameters,
+            ("ForecastTypes" Data..=) Prelude.<$> forecastTypes,
+            ("HPOConfig" Data..=) Prelude.<$> hPOConfig,
+            ("OptimizationMetric" Data..=)
+              Prelude.<$> optimizationMetric,
+            ("PerformAutoML" Data..=) Prelude.<$> performAutoML,
+            ("PerformHPO" Data..=) Prelude.<$> performHPO,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("TrainingParameters" Data..=)
+              Prelude.<$> trainingParameters,
+            Prelude.Just ("PredictorName" Data..= predictorName),
+            Prelude.Just
+              ("ForecastHorizon" Data..= forecastHorizon),
+            Prelude.Just
+              ("InputDataConfig" Data..= inputDataConfig),
+            Prelude.Just
+              ("FeaturizationConfig" Data..= featurizationConfig)
+          ]
+      )
+
+instance Data.ToPath CreatePredictor where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreatePredictor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreatePredictorResponse' smart constructor.
+data CreatePredictorResponse = CreatePredictorResponse'
+  { -- | The Amazon Resource Name (ARN) of the predictor.
+    predictorArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePredictorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorArn', 'createPredictorResponse_predictorArn' - The Amazon Resource Name (ARN) of the predictor.
+--
+-- 'httpStatus', 'createPredictorResponse_httpStatus' - The response's http status code.
+newCreatePredictorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreatePredictorResponse
+newCreatePredictorResponse pHttpStatus_ =
+  CreatePredictorResponse'
+    { predictorArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the predictor.
+createPredictorResponse_predictorArn :: Lens.Lens' CreatePredictorResponse (Prelude.Maybe Prelude.Text)
+createPredictorResponse_predictorArn = Lens.lens (\CreatePredictorResponse' {predictorArn} -> predictorArn) (\s@CreatePredictorResponse' {} a -> s {predictorArn = a} :: CreatePredictorResponse)
+
+-- | The response's http status code.
+createPredictorResponse_httpStatus :: Lens.Lens' CreatePredictorResponse Prelude.Int
+createPredictorResponse_httpStatus = Lens.lens (\CreatePredictorResponse' {httpStatus} -> httpStatus) (\s@CreatePredictorResponse' {} a -> s {httpStatus = a} :: CreatePredictorResponse)
+
+instance Prelude.NFData CreatePredictorResponse where
+  rnf CreatePredictorResponse' {..} =
+    Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreatePredictorBacktestExportJob.hs b/gen/Amazonka/Forecast/CreatePredictorBacktestExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreatePredictorBacktestExportJob.hs
@@ -0,0 +1,357 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreatePredictorBacktestExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports backtest forecasts and accuracy metrics generated by the
+-- CreateAutoPredictor or CreatePredictor operations. Two folders
+-- containing CSV or Parquet files are exported to your specified S3
+-- bucket.
+--
+-- The export file names will match the following conventions:
+--
+-- @\<ExportJobName>_\<ExportTimestamp>_\<PartNumber>.csv@
+--
+-- The \<ExportTimestamp> component is in Java SimpleDate format
+-- (yyyy-MM-ddTHH-mm-ssZ).
+--
+-- You must specify a DataDestination object that includes an Amazon S3
+-- bucket and an AWS Identity and Access Management (IAM) role that Amazon
+-- Forecast can assume to access the Amazon S3 bucket. For more
+-- information, see aws-forecast-iam-roles.
+--
+-- The @Status@ of the export job must be @ACTIVE@ before you can access
+-- the export in your Amazon S3 bucket. To get the status, use the
+-- DescribePredictorBacktestExportJob operation.
+module Amazonka.Forecast.CreatePredictorBacktestExportJob
+  ( -- * Creating a Request
+    CreatePredictorBacktestExportJob (..),
+    newCreatePredictorBacktestExportJob,
+
+    -- * Request Lenses
+    createPredictorBacktestExportJob_format,
+    createPredictorBacktestExportJob_tags,
+    createPredictorBacktestExportJob_predictorBacktestExportJobName,
+    createPredictorBacktestExportJob_predictorArn,
+    createPredictorBacktestExportJob_destination,
+
+    -- * Destructuring the Response
+    CreatePredictorBacktestExportJobResponse (..),
+    newCreatePredictorBacktestExportJobResponse,
+
+    -- * Response Lenses
+    createPredictorBacktestExportJobResponse_predictorBacktestExportJobArn,
+    createPredictorBacktestExportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreatePredictorBacktestExportJob' smart constructor.
+data CreatePredictorBacktestExportJob = CreatePredictorBacktestExportJob'
+  { -- | The format of the exported data, CSV or PARQUET. The default value is
+    -- CSV.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | Optional metadata to help you categorize and organize your backtests.
+    -- Each tag consists of a key and an optional value, both of which you
+    -- define. Tag keys and values are case sensitive.
+    --
+    -- The following restrictions apply to tags:
+    --
+    -- -   For each resource, each tag key must be unique and each tag key must
+    --     have one value.
+    --
+    -- -   Maximum number of tags per resource: 50.
+    --
+    -- -   Maximum key length: 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length: 256 Unicode characters in UTF-8.
+    --
+    -- -   Accepted characters: all letters and numbers, spaces representable
+    --     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+    --     across other services and resources, the character restrictions of
+    --     those services also apply.
+    --
+    -- -   Key prefixes cannot include any upper or lowercase combination of
+    --     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+    --     @aws@ as its prefix but the key does not, Forecast considers it to
+    --     be a user tag and will count against the limit of 50 tags. Tags with
+    --     only the key prefix of @aws@ do not count against your tags per
+    --     resource limit. You cannot edit or delete tag keys with this prefix.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name for the backtest export job.
+    predictorBacktestExportJobName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the predictor that you want to export.
+    predictorArn :: Prelude.Text,
+    destination :: DataDestination
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePredictorBacktestExportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'createPredictorBacktestExportJob_format' - The format of the exported data, CSV or PARQUET. The default value is
+-- CSV.
+--
+-- 'tags', 'createPredictorBacktestExportJob_tags' - Optional metadata to help you categorize and organize your backtests.
+-- Each tag consists of a key and an optional value, both of which you
+-- define. Tag keys and values are case sensitive.
+--
+-- The following restrictions apply to tags:
+--
+-- -   For each resource, each tag key must be unique and each tag key must
+--     have one value.
+--
+-- -   Maximum number of tags per resource: 50.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Accepted characters: all letters and numbers, spaces representable
+--     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+--     across other services and resources, the character restrictions of
+--     those services also apply.
+--
+-- -   Key prefixes cannot include any upper or lowercase combination of
+--     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+--     @aws@ as its prefix but the key does not, Forecast considers it to
+--     be a user tag and will count against the limit of 50 tags. Tags with
+--     only the key prefix of @aws@ do not count against your tags per
+--     resource limit. You cannot edit or delete tag keys with this prefix.
+--
+-- 'predictorBacktestExportJobName', 'createPredictorBacktestExportJob_predictorBacktestExportJobName' - The name for the backtest export job.
+--
+-- 'predictorArn', 'createPredictorBacktestExportJob_predictorArn' - The Amazon Resource Name (ARN) of the predictor that you want to export.
+--
+-- 'destination', 'createPredictorBacktestExportJob_destination' - Undocumented member.
+newCreatePredictorBacktestExportJob ::
+  -- | 'predictorBacktestExportJobName'
+  Prelude.Text ->
+  -- | 'predictorArn'
+  Prelude.Text ->
+  -- | 'destination'
+  DataDestination ->
+  CreatePredictorBacktestExportJob
+newCreatePredictorBacktestExportJob
+  pPredictorBacktestExportJobName_
+  pPredictorArn_
+  pDestination_ =
+    CreatePredictorBacktestExportJob'
+      { format =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        predictorBacktestExportJobName =
+          pPredictorBacktestExportJobName_,
+        predictorArn = pPredictorArn_,
+        destination = pDestination_
+      }
+
+-- | The format of the exported data, CSV or PARQUET. The default value is
+-- CSV.
+createPredictorBacktestExportJob_format :: Lens.Lens' CreatePredictorBacktestExportJob (Prelude.Maybe Prelude.Text)
+createPredictorBacktestExportJob_format = Lens.lens (\CreatePredictorBacktestExportJob' {format} -> format) (\s@CreatePredictorBacktestExportJob' {} a -> s {format = a} :: CreatePredictorBacktestExportJob)
+
+-- | Optional metadata to help you categorize and organize your backtests.
+-- Each tag consists of a key and an optional value, both of which you
+-- define. Tag keys and values are case sensitive.
+--
+-- The following restrictions apply to tags:
+--
+-- -   For each resource, each tag key must be unique and each tag key must
+--     have one value.
+--
+-- -   Maximum number of tags per resource: 50.
+--
+-- -   Maximum key length: 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length: 256 Unicode characters in UTF-8.
+--
+-- -   Accepted characters: all letters and numbers, spaces representable
+--     in UTF-8, and + - = . _ : \/ \@. If your tagging schema is used
+--     across other services and resources, the character restrictions of
+--     those services also apply.
+--
+-- -   Key prefixes cannot include any upper or lowercase combination of
+--     @aws:@ or @AWS:@. Values can have this prefix. If a tag value has
+--     @aws@ as its prefix but the key does not, Forecast considers it to
+--     be a user tag and will count against the limit of 50 tags. Tags with
+--     only the key prefix of @aws@ do not count against your tags per
+--     resource limit. You cannot edit or delete tag keys with this prefix.
+createPredictorBacktestExportJob_tags :: Lens.Lens' CreatePredictorBacktestExportJob (Prelude.Maybe [Tag])
+createPredictorBacktestExportJob_tags = Lens.lens (\CreatePredictorBacktestExportJob' {tags} -> tags) (\s@CreatePredictorBacktestExportJob' {} a -> s {tags = a} :: CreatePredictorBacktestExportJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name for the backtest export job.
+createPredictorBacktestExportJob_predictorBacktestExportJobName :: Lens.Lens' CreatePredictorBacktestExportJob Prelude.Text
+createPredictorBacktestExportJob_predictorBacktestExportJobName = Lens.lens (\CreatePredictorBacktestExportJob' {predictorBacktestExportJobName} -> predictorBacktestExportJobName) (\s@CreatePredictorBacktestExportJob' {} a -> s {predictorBacktestExportJobName = a} :: CreatePredictorBacktestExportJob)
+
+-- | The Amazon Resource Name (ARN) of the predictor that you want to export.
+createPredictorBacktestExportJob_predictorArn :: Lens.Lens' CreatePredictorBacktestExportJob Prelude.Text
+createPredictorBacktestExportJob_predictorArn = Lens.lens (\CreatePredictorBacktestExportJob' {predictorArn} -> predictorArn) (\s@CreatePredictorBacktestExportJob' {} a -> s {predictorArn = a} :: CreatePredictorBacktestExportJob)
+
+-- | Undocumented member.
+createPredictorBacktestExportJob_destination :: Lens.Lens' CreatePredictorBacktestExportJob DataDestination
+createPredictorBacktestExportJob_destination = Lens.lens (\CreatePredictorBacktestExportJob' {destination} -> destination) (\s@CreatePredictorBacktestExportJob' {} a -> s {destination = a} :: CreatePredictorBacktestExportJob)
+
+instance
+  Core.AWSRequest
+    CreatePredictorBacktestExportJob
+  where
+  type
+    AWSResponse CreatePredictorBacktestExportJob =
+      CreatePredictorBacktestExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreatePredictorBacktestExportJobResponse'
+            Prelude.<$> (x Data..?> "PredictorBacktestExportJobArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreatePredictorBacktestExportJob
+  where
+  hashWithSalt
+    _salt
+    CreatePredictorBacktestExportJob' {..} =
+      _salt
+        `Prelude.hashWithSalt` format
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` predictorBacktestExportJobName
+        `Prelude.hashWithSalt` predictorArn
+        `Prelude.hashWithSalt` destination
+
+instance
+  Prelude.NFData
+    CreatePredictorBacktestExportJob
+  where
+  rnf CreatePredictorBacktestExportJob' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf predictorBacktestExportJobName
+      `Prelude.seq` Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf destination
+
+instance
+  Data.ToHeaders
+    CreatePredictorBacktestExportJob
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreatePredictorBacktestExportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreatePredictorBacktestExportJob where
+  toJSON CreatePredictorBacktestExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "PredictorBacktestExportJobName"
+                  Data..= predictorBacktestExportJobName
+              ),
+            Prelude.Just ("PredictorArn" Data..= predictorArn),
+            Prelude.Just ("Destination" Data..= destination)
+          ]
+      )
+
+instance Data.ToPath CreatePredictorBacktestExportJob where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreatePredictorBacktestExportJob
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreatePredictorBacktestExportJobResponse' smart constructor.
+data CreatePredictorBacktestExportJobResponse = CreatePredictorBacktestExportJobResponse'
+  { -- | The Amazon Resource Name (ARN) of the predictor backtest export job that
+    -- you want to export.
+    predictorBacktestExportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePredictorBacktestExportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorBacktestExportJobArn', 'createPredictorBacktestExportJobResponse_predictorBacktestExportJobArn' - The Amazon Resource Name (ARN) of the predictor backtest export job that
+-- you want to export.
+--
+-- 'httpStatus', 'createPredictorBacktestExportJobResponse_httpStatus' - The response's http status code.
+newCreatePredictorBacktestExportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreatePredictorBacktestExportJobResponse
+newCreatePredictorBacktestExportJobResponse
+  pHttpStatus_ =
+    CreatePredictorBacktestExportJobResponse'
+      { predictorBacktestExportJobArn =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Resource Name (ARN) of the predictor backtest export job that
+-- you want to export.
+createPredictorBacktestExportJobResponse_predictorBacktestExportJobArn :: Lens.Lens' CreatePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.Text)
+createPredictorBacktestExportJobResponse_predictorBacktestExportJobArn = Lens.lens (\CreatePredictorBacktestExportJobResponse' {predictorBacktestExportJobArn} -> predictorBacktestExportJobArn) (\s@CreatePredictorBacktestExportJobResponse' {} a -> s {predictorBacktestExportJobArn = a} :: CreatePredictorBacktestExportJobResponse)
+
+-- | The response's http status code.
+createPredictorBacktestExportJobResponse_httpStatus :: Lens.Lens' CreatePredictorBacktestExportJobResponse Prelude.Int
+createPredictorBacktestExportJobResponse_httpStatus = Lens.lens (\CreatePredictorBacktestExportJobResponse' {httpStatus} -> httpStatus) (\s@CreatePredictorBacktestExportJobResponse' {} a -> s {httpStatus = a} :: CreatePredictorBacktestExportJobResponse)
+
+instance
+  Prelude.NFData
+    CreatePredictorBacktestExportJobResponse
+  where
+  rnf CreatePredictorBacktestExportJobResponse' {..} =
+    Prelude.rnf predictorBacktestExportJobArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateWhatIfAnalysis.hs b/gen/Amazonka/Forecast/CreateWhatIfAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateWhatIfAnalysis.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateWhatIfAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- What-if analysis is a scenario modeling technique where you make a
+-- hypothetical change to a time series and compare the forecasts generated
+-- by these changes against the baseline, unchanged time series. It is
+-- important to remember that the purpose of a what-if analysis is to
+-- understand how a forecast can change given different modifications to
+-- the baseline time series.
+--
+-- For example, imagine you are a clothing retailer who is considering an
+-- end of season sale to clear space for new styles. After creating a
+-- baseline forecast, you can use a what-if analysis to investigate how
+-- different sales tactics might affect your goals. You could create a
+-- scenario where everything is given a 25% markdown and another where
+-- everything is given a fixed dollar markdown. You can create a scenario
+-- where the sale lasts for 1 week and another where the sale lasts for 1
+-- month. Your what-if analysis enables you to compare many different
+-- scenarios against each other.
+--
+-- Note that a what-if analysis is meant to display what the forecasting
+-- model has learned and how it will behave in the scenarios that you are
+-- evaluating. Do not blindly use the results of the what-if analysis to
+-- make business decisions. For instance, forecasts might not be accurate
+-- for novel scenarios where there is no reference available to determine
+-- whether a forecast is good.
+--
+-- The TimeSeriesSelector object defines the items that you want in the
+-- what-if analysis.
+module Amazonka.Forecast.CreateWhatIfAnalysis
+  ( -- * Creating a Request
+    CreateWhatIfAnalysis (..),
+    newCreateWhatIfAnalysis,
+
+    -- * Request Lenses
+    createWhatIfAnalysis_tags,
+    createWhatIfAnalysis_timeSeriesSelector,
+    createWhatIfAnalysis_whatIfAnalysisName,
+    createWhatIfAnalysis_forecastArn,
+
+    -- * Destructuring the Response
+    CreateWhatIfAnalysisResponse (..),
+    newCreateWhatIfAnalysisResponse,
+
+    -- * Response Lenses
+    createWhatIfAnalysisResponse_whatIfAnalysisArn,
+    createWhatIfAnalysisResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWhatIfAnalysis' smart constructor.
+data CreateWhatIfAnalysis = CreateWhatIfAnalysis'
+  { -- | A list of
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+    -- to apply to the what if forecast.
+    tags :: Prelude.Maybe [Tag],
+    -- | Defines the set of time series that are used in the what-if analysis
+    -- with a @TimeSeriesIdentifiers@ object. What-if analyses are performed
+    -- only for the time series in this object.
+    --
+    -- The @TimeSeriesIdentifiers@ object needs the following information:
+    --
+    -- -   @DataSource@
+    --
+    -- -   @Format@
+    --
+    -- -   @Schema@
+    timeSeriesSelector :: Prelude.Maybe TimeSeriesSelector,
+    -- | The name of the what-if analysis. Each name must be unique.
+    whatIfAnalysisName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the baseline forecast.
+    forecastArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWhatIfAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createWhatIfAnalysis_tags' - A list of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+-- to apply to the what if forecast.
+--
+-- 'timeSeriesSelector', 'createWhatIfAnalysis_timeSeriesSelector' - Defines the set of time series that are used in the what-if analysis
+-- with a @TimeSeriesIdentifiers@ object. What-if analyses are performed
+-- only for the time series in this object.
+--
+-- The @TimeSeriesIdentifiers@ object needs the following information:
+--
+-- -   @DataSource@
+--
+-- -   @Format@
+--
+-- -   @Schema@
+--
+-- 'whatIfAnalysisName', 'createWhatIfAnalysis_whatIfAnalysisName' - The name of the what-if analysis. Each name must be unique.
+--
+-- 'forecastArn', 'createWhatIfAnalysis_forecastArn' - The Amazon Resource Name (ARN) of the baseline forecast.
+newCreateWhatIfAnalysis ::
+  -- | 'whatIfAnalysisName'
+  Prelude.Text ->
+  -- | 'forecastArn'
+  Prelude.Text ->
+  CreateWhatIfAnalysis
+newCreateWhatIfAnalysis
+  pWhatIfAnalysisName_
+  pForecastArn_ =
+    CreateWhatIfAnalysis'
+      { tags = Prelude.Nothing,
+        timeSeriesSelector = Prelude.Nothing,
+        whatIfAnalysisName = pWhatIfAnalysisName_,
+        forecastArn = pForecastArn_
+      }
+
+-- | A list of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+-- to apply to the what if forecast.
+createWhatIfAnalysis_tags :: Lens.Lens' CreateWhatIfAnalysis (Prelude.Maybe [Tag])
+createWhatIfAnalysis_tags = Lens.lens (\CreateWhatIfAnalysis' {tags} -> tags) (\s@CreateWhatIfAnalysis' {} a -> s {tags = a} :: CreateWhatIfAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | Defines the set of time series that are used in the what-if analysis
+-- with a @TimeSeriesIdentifiers@ object. What-if analyses are performed
+-- only for the time series in this object.
+--
+-- The @TimeSeriesIdentifiers@ object needs the following information:
+--
+-- -   @DataSource@
+--
+-- -   @Format@
+--
+-- -   @Schema@
+createWhatIfAnalysis_timeSeriesSelector :: Lens.Lens' CreateWhatIfAnalysis (Prelude.Maybe TimeSeriesSelector)
+createWhatIfAnalysis_timeSeriesSelector = Lens.lens (\CreateWhatIfAnalysis' {timeSeriesSelector} -> timeSeriesSelector) (\s@CreateWhatIfAnalysis' {} a -> s {timeSeriesSelector = a} :: CreateWhatIfAnalysis)
+
+-- | The name of the what-if analysis. Each name must be unique.
+createWhatIfAnalysis_whatIfAnalysisName :: Lens.Lens' CreateWhatIfAnalysis Prelude.Text
+createWhatIfAnalysis_whatIfAnalysisName = Lens.lens (\CreateWhatIfAnalysis' {whatIfAnalysisName} -> whatIfAnalysisName) (\s@CreateWhatIfAnalysis' {} a -> s {whatIfAnalysisName = a} :: CreateWhatIfAnalysis)
+
+-- | The Amazon Resource Name (ARN) of the baseline forecast.
+createWhatIfAnalysis_forecastArn :: Lens.Lens' CreateWhatIfAnalysis Prelude.Text
+createWhatIfAnalysis_forecastArn = Lens.lens (\CreateWhatIfAnalysis' {forecastArn} -> forecastArn) (\s@CreateWhatIfAnalysis' {} a -> s {forecastArn = a} :: CreateWhatIfAnalysis)
+
+instance Core.AWSRequest CreateWhatIfAnalysis where
+  type
+    AWSResponse CreateWhatIfAnalysis =
+      CreateWhatIfAnalysisResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWhatIfAnalysisResponse'
+            Prelude.<$> (x Data..?> "WhatIfAnalysisArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWhatIfAnalysis where
+  hashWithSalt _salt CreateWhatIfAnalysis' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeSeriesSelector
+      `Prelude.hashWithSalt` whatIfAnalysisName
+      `Prelude.hashWithSalt` forecastArn
+
+instance Prelude.NFData CreateWhatIfAnalysis where
+  rnf CreateWhatIfAnalysis' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeSeriesSelector
+      `Prelude.seq` Prelude.rnf whatIfAnalysisName
+      `Prelude.seq` Prelude.rnf forecastArn
+
+instance Data.ToHeaders CreateWhatIfAnalysis where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateWhatIfAnalysis" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWhatIfAnalysis where
+  toJSON CreateWhatIfAnalysis' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            ("TimeSeriesSelector" Data..=)
+              Prelude.<$> timeSeriesSelector,
+            Prelude.Just
+              ("WhatIfAnalysisName" Data..= whatIfAnalysisName),
+            Prelude.Just ("ForecastArn" Data..= forecastArn)
+          ]
+      )
+
+instance Data.ToPath CreateWhatIfAnalysis where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateWhatIfAnalysis where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWhatIfAnalysisResponse' smart constructor.
+data CreateWhatIfAnalysisResponse = CreateWhatIfAnalysisResponse'
+  { -- | The Amazon Resource Name (ARN) of the what-if analysis.
+    whatIfAnalysisArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWhatIfAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfAnalysisArn', 'createWhatIfAnalysisResponse_whatIfAnalysisArn' - The Amazon Resource Name (ARN) of the what-if analysis.
+--
+-- 'httpStatus', 'createWhatIfAnalysisResponse_httpStatus' - The response's http status code.
+newCreateWhatIfAnalysisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWhatIfAnalysisResponse
+newCreateWhatIfAnalysisResponse pHttpStatus_ =
+  CreateWhatIfAnalysisResponse'
+    { whatIfAnalysisArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the what-if analysis.
+createWhatIfAnalysisResponse_whatIfAnalysisArn :: Lens.Lens' CreateWhatIfAnalysisResponse (Prelude.Maybe Prelude.Text)
+createWhatIfAnalysisResponse_whatIfAnalysisArn = Lens.lens (\CreateWhatIfAnalysisResponse' {whatIfAnalysisArn} -> whatIfAnalysisArn) (\s@CreateWhatIfAnalysisResponse' {} a -> s {whatIfAnalysisArn = a} :: CreateWhatIfAnalysisResponse)
+
+-- | The response's http status code.
+createWhatIfAnalysisResponse_httpStatus :: Lens.Lens' CreateWhatIfAnalysisResponse Prelude.Int
+createWhatIfAnalysisResponse_httpStatus = Lens.lens (\CreateWhatIfAnalysisResponse' {httpStatus} -> httpStatus) (\s@CreateWhatIfAnalysisResponse' {} a -> s {httpStatus = a} :: CreateWhatIfAnalysisResponse)
+
+instance Prelude.NFData CreateWhatIfAnalysisResponse where
+  rnf CreateWhatIfAnalysisResponse' {..} =
+    Prelude.rnf whatIfAnalysisArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateWhatIfForecast.hs b/gen/Amazonka/Forecast/CreateWhatIfForecast.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateWhatIfForecast.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateWhatIfForecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A what-if forecast is a forecast that is created from a modified version
+-- of the baseline forecast. Each what-if forecast incorporates either a
+-- replacement dataset or a set of transformations to the original dataset.
+module Amazonka.Forecast.CreateWhatIfForecast
+  ( -- * Creating a Request
+    CreateWhatIfForecast (..),
+    newCreateWhatIfForecast,
+
+    -- * Request Lenses
+    createWhatIfForecast_tags,
+    createWhatIfForecast_timeSeriesReplacementsDataSource,
+    createWhatIfForecast_timeSeriesTransformations,
+    createWhatIfForecast_whatIfForecastName,
+    createWhatIfForecast_whatIfAnalysisArn,
+
+    -- * Destructuring the Response
+    CreateWhatIfForecastResponse (..),
+    newCreateWhatIfForecastResponse,
+
+    -- * Response Lenses
+    createWhatIfForecastResponse_whatIfForecastArn,
+    createWhatIfForecastResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWhatIfForecast' smart constructor.
+data CreateWhatIfForecast = CreateWhatIfForecast'
+  { -- | A list of
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+    -- to apply to the what if forecast.
+    tags :: Prelude.Maybe [Tag],
+    -- | The replacement time series dataset, which contains the rows that you
+    -- want to change in the related time series dataset. A replacement time
+    -- series does not need to contain all rows that are in the baseline
+    -- related time series. Include only the rows (measure-dimension
+    -- combinations) that you want to include in the what-if forecast. This
+    -- dataset is merged with the original time series to create a transformed
+    -- dataset that is used for the what-if analysis.
+    --
+    -- This dataset should contain the items to modify (such as item_id or
+    -- workforce_type), any relevant dimensions, the timestamp column, and at
+    -- least one of the related time series columns. This file should not
+    -- contain duplicate timestamps for the same time series.
+    --
+    -- Timestamps and item_ids not included in this dataset are not included in
+    -- the what-if analysis.
+    timeSeriesReplacementsDataSource :: Prelude.Maybe TimeSeriesReplacementsDataSource,
+    -- | The transformations that are applied to the baseline time series. Each
+    -- transformation contains an action and a set of conditions. An action is
+    -- applied only when all conditions are met. If no conditions are provided,
+    -- the action is applied to all items.
+    timeSeriesTransformations :: Prelude.Maybe [TimeSeriesTransformation],
+    -- | The name of the what-if forecast. Names must be unique within each
+    -- what-if analysis.
+    whatIfForecastName :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the what-if analysis.
+    whatIfAnalysisArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWhatIfForecast' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createWhatIfForecast_tags' - A list of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+-- to apply to the what if forecast.
+--
+-- 'timeSeriesReplacementsDataSource', 'createWhatIfForecast_timeSeriesReplacementsDataSource' - The replacement time series dataset, which contains the rows that you
+-- want to change in the related time series dataset. A replacement time
+-- series does not need to contain all rows that are in the baseline
+-- related time series. Include only the rows (measure-dimension
+-- combinations) that you want to include in the what-if forecast. This
+-- dataset is merged with the original time series to create a transformed
+-- dataset that is used for the what-if analysis.
+--
+-- This dataset should contain the items to modify (such as item_id or
+-- workforce_type), any relevant dimensions, the timestamp column, and at
+-- least one of the related time series columns. This file should not
+-- contain duplicate timestamps for the same time series.
+--
+-- Timestamps and item_ids not included in this dataset are not included in
+-- the what-if analysis.
+--
+-- 'timeSeriesTransformations', 'createWhatIfForecast_timeSeriesTransformations' - The transformations that are applied to the baseline time series. Each
+-- transformation contains an action and a set of conditions. An action is
+-- applied only when all conditions are met. If no conditions are provided,
+-- the action is applied to all items.
+--
+-- 'whatIfForecastName', 'createWhatIfForecast_whatIfForecastName' - The name of the what-if forecast. Names must be unique within each
+-- what-if analysis.
+--
+-- 'whatIfAnalysisArn', 'createWhatIfForecast_whatIfAnalysisArn' - The Amazon Resource Name (ARN) of the what-if analysis.
+newCreateWhatIfForecast ::
+  -- | 'whatIfForecastName'
+  Prelude.Text ->
+  -- | 'whatIfAnalysisArn'
+  Prelude.Text ->
+  CreateWhatIfForecast
+newCreateWhatIfForecast
+  pWhatIfForecastName_
+  pWhatIfAnalysisArn_ =
+    CreateWhatIfForecast'
+      { tags = Prelude.Nothing,
+        timeSeriesReplacementsDataSource = Prelude.Nothing,
+        timeSeriesTransformations = Prelude.Nothing,
+        whatIfForecastName = pWhatIfForecastName_,
+        whatIfAnalysisArn = pWhatIfAnalysisArn_
+      }
+
+-- | A list of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+-- to apply to the what if forecast.
+createWhatIfForecast_tags :: Lens.Lens' CreateWhatIfForecast (Prelude.Maybe [Tag])
+createWhatIfForecast_tags = Lens.lens (\CreateWhatIfForecast' {tags} -> tags) (\s@CreateWhatIfForecast' {} a -> s {tags = a} :: CreateWhatIfForecast) Prelude.. Lens.mapping Lens.coerced
+
+-- | The replacement time series dataset, which contains the rows that you
+-- want to change in the related time series dataset. A replacement time
+-- series does not need to contain all rows that are in the baseline
+-- related time series. Include only the rows (measure-dimension
+-- combinations) that you want to include in the what-if forecast. This
+-- dataset is merged with the original time series to create a transformed
+-- dataset that is used for the what-if analysis.
+--
+-- This dataset should contain the items to modify (such as item_id or
+-- workforce_type), any relevant dimensions, the timestamp column, and at
+-- least one of the related time series columns. This file should not
+-- contain duplicate timestamps for the same time series.
+--
+-- Timestamps and item_ids not included in this dataset are not included in
+-- the what-if analysis.
+createWhatIfForecast_timeSeriesReplacementsDataSource :: Lens.Lens' CreateWhatIfForecast (Prelude.Maybe TimeSeriesReplacementsDataSource)
+createWhatIfForecast_timeSeriesReplacementsDataSource = Lens.lens (\CreateWhatIfForecast' {timeSeriesReplacementsDataSource} -> timeSeriesReplacementsDataSource) (\s@CreateWhatIfForecast' {} a -> s {timeSeriesReplacementsDataSource = a} :: CreateWhatIfForecast)
+
+-- | The transformations that are applied to the baseline time series. Each
+-- transformation contains an action and a set of conditions. An action is
+-- applied only when all conditions are met. If no conditions are provided,
+-- the action is applied to all items.
+createWhatIfForecast_timeSeriesTransformations :: Lens.Lens' CreateWhatIfForecast (Prelude.Maybe [TimeSeriesTransformation])
+createWhatIfForecast_timeSeriesTransformations = Lens.lens (\CreateWhatIfForecast' {timeSeriesTransformations} -> timeSeriesTransformations) (\s@CreateWhatIfForecast' {} a -> s {timeSeriesTransformations = a} :: CreateWhatIfForecast) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the what-if forecast. Names must be unique within each
+-- what-if analysis.
+createWhatIfForecast_whatIfForecastName :: Lens.Lens' CreateWhatIfForecast Prelude.Text
+createWhatIfForecast_whatIfForecastName = Lens.lens (\CreateWhatIfForecast' {whatIfForecastName} -> whatIfForecastName) (\s@CreateWhatIfForecast' {} a -> s {whatIfForecastName = a} :: CreateWhatIfForecast)
+
+-- | The Amazon Resource Name (ARN) of the what-if analysis.
+createWhatIfForecast_whatIfAnalysisArn :: Lens.Lens' CreateWhatIfForecast Prelude.Text
+createWhatIfForecast_whatIfAnalysisArn = Lens.lens (\CreateWhatIfForecast' {whatIfAnalysisArn} -> whatIfAnalysisArn) (\s@CreateWhatIfForecast' {} a -> s {whatIfAnalysisArn = a} :: CreateWhatIfForecast)
+
+instance Core.AWSRequest CreateWhatIfForecast where
+  type
+    AWSResponse CreateWhatIfForecast =
+      CreateWhatIfForecastResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWhatIfForecastResponse'
+            Prelude.<$> (x Data..?> "WhatIfForecastArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWhatIfForecast where
+  hashWithSalt _salt CreateWhatIfForecast' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeSeriesReplacementsDataSource
+      `Prelude.hashWithSalt` timeSeriesTransformations
+      `Prelude.hashWithSalt` whatIfForecastName
+      `Prelude.hashWithSalt` whatIfAnalysisArn
+
+instance Prelude.NFData CreateWhatIfForecast where
+  rnf CreateWhatIfForecast' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeSeriesReplacementsDataSource
+      `Prelude.seq` Prelude.rnf timeSeriesTransformations
+      `Prelude.seq` Prelude.rnf whatIfForecastName
+      `Prelude.seq` Prelude.rnf whatIfAnalysisArn
+
+instance Data.ToHeaders CreateWhatIfForecast where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateWhatIfForecast" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWhatIfForecast where
+  toJSON CreateWhatIfForecast' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Tags" Data..=) Prelude.<$> tags,
+            ("TimeSeriesReplacementsDataSource" Data..=)
+              Prelude.<$> timeSeriesReplacementsDataSource,
+            ("TimeSeriesTransformations" Data..=)
+              Prelude.<$> timeSeriesTransformations,
+            Prelude.Just
+              ("WhatIfForecastName" Data..= whatIfForecastName),
+            Prelude.Just
+              ("WhatIfAnalysisArn" Data..= whatIfAnalysisArn)
+          ]
+      )
+
+instance Data.ToPath CreateWhatIfForecast where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateWhatIfForecast where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWhatIfForecastResponse' smart constructor.
+data CreateWhatIfForecastResponse = CreateWhatIfForecastResponse'
+  { -- | The Amazon Resource Name (ARN) of the what-if forecast.
+    whatIfForecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWhatIfForecastResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfForecastArn', 'createWhatIfForecastResponse_whatIfForecastArn' - The Amazon Resource Name (ARN) of the what-if forecast.
+--
+-- 'httpStatus', 'createWhatIfForecastResponse_httpStatus' - The response's http status code.
+newCreateWhatIfForecastResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWhatIfForecastResponse
+newCreateWhatIfForecastResponse pHttpStatus_ =
+  CreateWhatIfForecastResponse'
+    { whatIfForecastArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast.
+createWhatIfForecastResponse_whatIfForecastArn :: Lens.Lens' CreateWhatIfForecastResponse (Prelude.Maybe Prelude.Text)
+createWhatIfForecastResponse_whatIfForecastArn = Lens.lens (\CreateWhatIfForecastResponse' {whatIfForecastArn} -> whatIfForecastArn) (\s@CreateWhatIfForecastResponse' {} a -> s {whatIfForecastArn = a} :: CreateWhatIfForecastResponse)
+
+-- | The response's http status code.
+createWhatIfForecastResponse_httpStatus :: Lens.Lens' CreateWhatIfForecastResponse Prelude.Int
+createWhatIfForecastResponse_httpStatus = Lens.lens (\CreateWhatIfForecastResponse' {httpStatus} -> httpStatus) (\s@CreateWhatIfForecastResponse' {} a -> s {httpStatus = a} :: CreateWhatIfForecastResponse)
+
+instance Prelude.NFData CreateWhatIfForecastResponse where
+  rnf CreateWhatIfForecastResponse' {..} =
+    Prelude.rnf whatIfForecastArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/CreateWhatIfForecastExport.hs b/gen/Amazonka/Forecast/CreateWhatIfForecastExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/CreateWhatIfForecastExport.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.CreateWhatIfForecastExport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports a forecast created by the CreateWhatIfForecast operation to your
+-- Amazon Simple Storage Service (Amazon S3) bucket. The forecast file name
+-- will match the following conventions:
+--
+-- @≈\<ForecastExportJobName>_\<ExportTimestamp>_\<PartNumber>@
+--
+-- The \<ExportTimestamp> component is in Java SimpleDateFormat
+-- (yyyy-MM-ddTHH-mm-ssZ).
+--
+-- You must specify a DataDestination object that includes an AWS Identity
+-- and Access Management (IAM) role that Amazon Forecast can assume to
+-- access the Amazon S3 bucket. For more information, see
+-- aws-forecast-iam-roles.
+--
+-- For more information, see howitworks-forecast.
+--
+-- To get a list of all your what-if forecast export jobs, use the
+-- ListWhatIfForecastExports operation.
+--
+-- The @Status@ of the forecast export job must be @ACTIVE@ before you can
+-- access the forecast in your Amazon S3 bucket. To get the status, use the
+-- DescribeWhatIfForecastExport operation.
+module Amazonka.Forecast.CreateWhatIfForecastExport
+  ( -- * Creating a Request
+    CreateWhatIfForecastExport (..),
+    newCreateWhatIfForecastExport,
+
+    -- * Request Lenses
+    createWhatIfForecastExport_format,
+    createWhatIfForecastExport_tags,
+    createWhatIfForecastExport_whatIfForecastExportName,
+    createWhatIfForecastExport_whatIfForecastArns,
+    createWhatIfForecastExport_destination,
+
+    -- * Destructuring the Response
+    CreateWhatIfForecastExportResponse (..),
+    newCreateWhatIfForecastExportResponse,
+
+    -- * Response Lenses
+    createWhatIfForecastExportResponse_whatIfForecastExportArn,
+    createWhatIfForecastExportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateWhatIfForecastExport' smart constructor.
+data CreateWhatIfForecastExport = CreateWhatIfForecastExport'
+  { -- | The format of the exported data, CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | A list of
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+    -- to apply to the what if forecast.
+    tags :: Prelude.Maybe [Tag],
+    -- | The name of the what-if forecast to export.
+    whatIfForecastExportName :: Prelude.Text,
+    -- | The list of what-if forecast Amazon Resource Names (ARNs) to export.
+    whatIfForecastArns :: Prelude.NonEmpty Prelude.Text,
+    -- | The location where you want to save the forecast and an AWS Identity and
+    -- Access Management (IAM) role that Amazon Forecast can assume to access
+    -- the location. The forecast must be exported to an Amazon S3 bucket.
+    --
+    -- If encryption is used, @Destination@ must include an AWS Key Management
+    -- Service (KMS) key. The IAM role must allow Amazon Forecast permission to
+    -- access the key.
+    destination :: DataDestination
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWhatIfForecastExport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'createWhatIfForecastExport_format' - The format of the exported data, CSV or PARQUET.
+--
+-- 'tags', 'createWhatIfForecastExport_tags' - A list of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+-- to apply to the what if forecast.
+--
+-- 'whatIfForecastExportName', 'createWhatIfForecastExport_whatIfForecastExportName' - The name of the what-if forecast to export.
+--
+-- 'whatIfForecastArns', 'createWhatIfForecastExport_whatIfForecastArns' - The list of what-if forecast Amazon Resource Names (ARNs) to export.
+--
+-- 'destination', 'createWhatIfForecastExport_destination' - The location where you want to save the forecast and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the location. The forecast must be exported to an Amazon S3 bucket.
+--
+-- If encryption is used, @Destination@ must include an AWS Key Management
+-- Service (KMS) key. The IAM role must allow Amazon Forecast permission to
+-- access the key.
+newCreateWhatIfForecastExport ::
+  -- | 'whatIfForecastExportName'
+  Prelude.Text ->
+  -- | 'whatIfForecastArns'
+  Prelude.NonEmpty Prelude.Text ->
+  -- | 'destination'
+  DataDestination ->
+  CreateWhatIfForecastExport
+newCreateWhatIfForecastExport
+  pWhatIfForecastExportName_
+  pWhatIfForecastArns_
+  pDestination_ =
+    CreateWhatIfForecastExport'
+      { format =
+          Prelude.Nothing,
+        tags = Prelude.Nothing,
+        whatIfForecastExportName =
+          pWhatIfForecastExportName_,
+        whatIfForecastArns =
+          Lens.coerced Lens.# pWhatIfForecastArns_,
+        destination = pDestination_
+      }
+
+-- | The format of the exported data, CSV or PARQUET.
+createWhatIfForecastExport_format :: Lens.Lens' CreateWhatIfForecastExport (Prelude.Maybe Prelude.Text)
+createWhatIfForecastExport_format = Lens.lens (\CreateWhatIfForecastExport' {format} -> format) (\s@CreateWhatIfForecastExport' {} a -> s {format = a} :: CreateWhatIfForecastExport)
+
+-- | A list of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/tagging-forecast-resources.html tags>
+-- to apply to the what if forecast.
+createWhatIfForecastExport_tags :: Lens.Lens' CreateWhatIfForecastExport (Prelude.Maybe [Tag])
+createWhatIfForecastExport_tags = Lens.lens (\CreateWhatIfForecastExport' {tags} -> tags) (\s@CreateWhatIfForecastExport' {} a -> s {tags = a} :: CreateWhatIfForecastExport) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the what-if forecast to export.
+createWhatIfForecastExport_whatIfForecastExportName :: Lens.Lens' CreateWhatIfForecastExport Prelude.Text
+createWhatIfForecastExport_whatIfForecastExportName = Lens.lens (\CreateWhatIfForecastExport' {whatIfForecastExportName} -> whatIfForecastExportName) (\s@CreateWhatIfForecastExport' {} a -> s {whatIfForecastExportName = a} :: CreateWhatIfForecastExport)
+
+-- | The list of what-if forecast Amazon Resource Names (ARNs) to export.
+createWhatIfForecastExport_whatIfForecastArns :: Lens.Lens' CreateWhatIfForecastExport (Prelude.NonEmpty Prelude.Text)
+createWhatIfForecastExport_whatIfForecastArns = Lens.lens (\CreateWhatIfForecastExport' {whatIfForecastArns} -> whatIfForecastArns) (\s@CreateWhatIfForecastExport' {} a -> s {whatIfForecastArns = a} :: CreateWhatIfForecastExport) Prelude.. Lens.coerced
+
+-- | The location where you want to save the forecast and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the location. The forecast must be exported to an Amazon S3 bucket.
+--
+-- If encryption is used, @Destination@ must include an AWS Key Management
+-- Service (KMS) key. The IAM role must allow Amazon Forecast permission to
+-- access the key.
+createWhatIfForecastExport_destination :: Lens.Lens' CreateWhatIfForecastExport DataDestination
+createWhatIfForecastExport_destination = Lens.lens (\CreateWhatIfForecastExport' {destination} -> destination) (\s@CreateWhatIfForecastExport' {} a -> s {destination = a} :: CreateWhatIfForecastExport)
+
+instance Core.AWSRequest CreateWhatIfForecastExport where
+  type
+    AWSResponse CreateWhatIfForecastExport =
+      CreateWhatIfForecastExportResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateWhatIfForecastExportResponse'
+            Prelude.<$> (x Data..?> "WhatIfForecastExportArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateWhatIfForecastExport where
+  hashWithSalt _salt CreateWhatIfForecastExport' {..} =
+    _salt
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` whatIfForecastExportName
+      `Prelude.hashWithSalt` whatIfForecastArns
+      `Prelude.hashWithSalt` destination
+
+instance Prelude.NFData CreateWhatIfForecastExport where
+  rnf CreateWhatIfForecastExport' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf whatIfForecastExportName
+      `Prelude.seq` Prelude.rnf whatIfForecastArns
+      `Prelude.seq` Prelude.rnf destination
+
+instance Data.ToHeaders CreateWhatIfForecastExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.CreateWhatIfForecastExport" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateWhatIfForecastExport where
+  toJSON CreateWhatIfForecastExport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ( "WhatIfForecastExportName"
+                  Data..= whatIfForecastExportName
+              ),
+            Prelude.Just
+              ("WhatIfForecastArns" Data..= whatIfForecastArns),
+            Prelude.Just ("Destination" Data..= destination)
+          ]
+      )
+
+instance Data.ToPath CreateWhatIfForecastExport where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateWhatIfForecastExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateWhatIfForecastExportResponse' smart constructor.
+data CreateWhatIfForecastExportResponse = CreateWhatIfForecastExportResponse'
+  { -- | The Amazon Resource Name (ARN) of the what-if forecast.
+    whatIfForecastExportArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateWhatIfForecastExportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfForecastExportArn', 'createWhatIfForecastExportResponse_whatIfForecastExportArn' - The Amazon Resource Name (ARN) of the what-if forecast.
+--
+-- 'httpStatus', 'createWhatIfForecastExportResponse_httpStatus' - The response's http status code.
+newCreateWhatIfForecastExportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateWhatIfForecastExportResponse
+newCreateWhatIfForecastExportResponse pHttpStatus_ =
+  CreateWhatIfForecastExportResponse'
+    { whatIfForecastExportArn =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast.
+createWhatIfForecastExportResponse_whatIfForecastExportArn :: Lens.Lens' CreateWhatIfForecastExportResponse (Prelude.Maybe Prelude.Text)
+createWhatIfForecastExportResponse_whatIfForecastExportArn = Lens.lens (\CreateWhatIfForecastExportResponse' {whatIfForecastExportArn} -> whatIfForecastExportArn) (\s@CreateWhatIfForecastExportResponse' {} a -> s {whatIfForecastExportArn = a} :: CreateWhatIfForecastExportResponse)
+
+-- | The response's http status code.
+createWhatIfForecastExportResponse_httpStatus :: Lens.Lens' CreateWhatIfForecastExportResponse Prelude.Int
+createWhatIfForecastExportResponse_httpStatus = Lens.lens (\CreateWhatIfForecastExportResponse' {httpStatus} -> httpStatus) (\s@CreateWhatIfForecastExportResponse' {} a -> s {httpStatus = a} :: CreateWhatIfForecastExportResponse)
+
+instance
+  Prelude.NFData
+    CreateWhatIfForecastExportResponse
+  where
+  rnf CreateWhatIfForecastExportResponse' {..} =
+    Prelude.rnf whatIfForecastExportArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DeleteDataset.hs b/gen/Amazonka/Forecast/DeleteDataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteDataset.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteDataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Amazon Forecast dataset that was created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+-- operation. You can only delete datasets that have a status of @ACTIVE@
+-- or @CREATE_FAILED@. To get the status use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDataset.html DescribeDataset>
+-- operation.
+--
+-- Forecast does not automatically update any dataset groups that contain
+-- the deleted dataset. In order to update the dataset group, use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+-- operation, omitting the deleted dataset\'s ARN.
+module Amazonka.Forecast.DeleteDataset
+  ( -- * Creating a Request
+    DeleteDataset (..),
+    newDeleteDataset,
+
+    -- * Request Lenses
+    deleteDataset_datasetArn,
+
+    -- * Destructuring the Response
+    DeleteDatasetResponse (..),
+    newDeleteDatasetResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDataset' smart constructor.
+data DeleteDataset = DeleteDataset'
+  { -- | The Amazon Resource Name (ARN) of the dataset to delete.
+    datasetArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetArn', 'deleteDataset_datasetArn' - The Amazon Resource Name (ARN) of the dataset to delete.
+newDeleteDataset ::
+  -- | 'datasetArn'
+  Prelude.Text ->
+  DeleteDataset
+newDeleteDataset pDatasetArn_ =
+  DeleteDataset' {datasetArn = pDatasetArn_}
+
+-- | The Amazon Resource Name (ARN) of the dataset to delete.
+deleteDataset_datasetArn :: Lens.Lens' DeleteDataset Prelude.Text
+deleteDataset_datasetArn = Lens.lens (\DeleteDataset' {datasetArn} -> datasetArn) (\s@DeleteDataset' {} a -> s {datasetArn = a} :: DeleteDataset)
+
+instance Core.AWSRequest DeleteDataset where
+  type
+    AWSResponse DeleteDataset =
+      DeleteDatasetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteDatasetResponse'
+
+instance Prelude.Hashable DeleteDataset where
+  hashWithSalt _salt DeleteDataset' {..} =
+    _salt `Prelude.hashWithSalt` datasetArn
+
+instance Prelude.NFData DeleteDataset where
+  rnf DeleteDataset' {..} = Prelude.rnf datasetArn
+
+instance Data.ToHeaders DeleteDataset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteDataset" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDataset where
+  toJSON DeleteDataset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("DatasetArn" Data..= datasetArn)]
+      )
+
+instance Data.ToPath DeleteDataset where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDataset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDatasetResponse' smart constructor.
+data DeleteDatasetResponse = DeleteDatasetResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDatasetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDatasetResponse ::
+  DeleteDatasetResponse
+newDeleteDatasetResponse = DeleteDatasetResponse'
+
+instance Prelude.NFData DeleteDatasetResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteDatasetGroup.hs b/gen/Amazonka/Forecast/DeleteDatasetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteDatasetGroup.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteDatasetGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a dataset group created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetGroup.html CreateDatasetGroup>
+-- operation. You can only delete dataset groups that have a status of
+-- @ACTIVE@, @CREATE_FAILED@, or @UPDATE_FAILED@. To get the status, use
+-- the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDatasetGroup.html DescribeDatasetGroup>
+-- operation.
+--
+-- This operation deletes only the dataset group, not the datasets in the
+-- group.
+module Amazonka.Forecast.DeleteDatasetGroup
+  ( -- * Creating a Request
+    DeleteDatasetGroup (..),
+    newDeleteDatasetGroup,
+
+    -- * Request Lenses
+    deleteDatasetGroup_datasetGroupArn,
+
+    -- * Destructuring the Response
+    DeleteDatasetGroupResponse (..),
+    newDeleteDatasetGroupResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDatasetGroup' smart constructor.
+data DeleteDatasetGroup = DeleteDatasetGroup'
+  { -- | The Amazon Resource Name (ARN) of the dataset group to delete.
+    datasetGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDatasetGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetGroupArn', 'deleteDatasetGroup_datasetGroupArn' - The Amazon Resource Name (ARN) of the dataset group to delete.
+newDeleteDatasetGroup ::
+  -- | 'datasetGroupArn'
+  Prelude.Text ->
+  DeleteDatasetGroup
+newDeleteDatasetGroup pDatasetGroupArn_ =
+  DeleteDatasetGroup'
+    { datasetGroupArn =
+        pDatasetGroupArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the dataset group to delete.
+deleteDatasetGroup_datasetGroupArn :: Lens.Lens' DeleteDatasetGroup Prelude.Text
+deleteDatasetGroup_datasetGroupArn = Lens.lens (\DeleteDatasetGroup' {datasetGroupArn} -> datasetGroupArn) (\s@DeleteDatasetGroup' {} a -> s {datasetGroupArn = a} :: DeleteDatasetGroup)
+
+instance Core.AWSRequest DeleteDatasetGroup where
+  type
+    AWSResponse DeleteDatasetGroup =
+      DeleteDatasetGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteDatasetGroupResponse'
+
+instance Prelude.Hashable DeleteDatasetGroup where
+  hashWithSalt _salt DeleteDatasetGroup' {..} =
+    _salt `Prelude.hashWithSalt` datasetGroupArn
+
+instance Prelude.NFData DeleteDatasetGroup where
+  rnf DeleteDatasetGroup' {..} =
+    Prelude.rnf datasetGroupArn
+
+instance Data.ToHeaders DeleteDatasetGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteDatasetGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDatasetGroup where
+  toJSON DeleteDatasetGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DatasetGroupArn" Data..= datasetGroupArn)
+          ]
+      )
+
+instance Data.ToPath DeleteDatasetGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDatasetGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDatasetGroupResponse' smart constructor.
+data DeleteDatasetGroupResponse = DeleteDatasetGroupResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDatasetGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDatasetGroupResponse ::
+  DeleteDatasetGroupResponse
+newDeleteDatasetGroupResponse =
+  DeleteDatasetGroupResponse'
+
+instance Prelude.NFData DeleteDatasetGroupResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteDatasetImportJob.hs b/gen/Amazonka/Forecast/DeleteDatasetImportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteDatasetImportJob.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteDatasetImportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a dataset import job created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation. You can delete only dataset import jobs that have a status of
+-- @ACTIVE@ or @CREATE_FAILED@. To get the status, use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDatasetImportJob.html DescribeDatasetImportJob>
+-- operation.
+module Amazonka.Forecast.DeleteDatasetImportJob
+  ( -- * Creating a Request
+    DeleteDatasetImportJob (..),
+    newDeleteDatasetImportJob,
+
+    -- * Request Lenses
+    deleteDatasetImportJob_datasetImportJobArn,
+
+    -- * Destructuring the Response
+    DeleteDatasetImportJobResponse (..),
+    newDeleteDatasetImportJobResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDatasetImportJob' smart constructor.
+data DeleteDatasetImportJob = DeleteDatasetImportJob'
+  { -- | The Amazon Resource Name (ARN) of the dataset import job to delete.
+    datasetImportJobArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDatasetImportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetImportJobArn', 'deleteDatasetImportJob_datasetImportJobArn' - The Amazon Resource Name (ARN) of the dataset import job to delete.
+newDeleteDatasetImportJob ::
+  -- | 'datasetImportJobArn'
+  Prelude.Text ->
+  DeleteDatasetImportJob
+newDeleteDatasetImportJob pDatasetImportJobArn_ =
+  DeleteDatasetImportJob'
+    { datasetImportJobArn =
+        pDatasetImportJobArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the dataset import job to delete.
+deleteDatasetImportJob_datasetImportJobArn :: Lens.Lens' DeleteDatasetImportJob Prelude.Text
+deleteDatasetImportJob_datasetImportJobArn = Lens.lens (\DeleteDatasetImportJob' {datasetImportJobArn} -> datasetImportJobArn) (\s@DeleteDatasetImportJob' {} a -> s {datasetImportJobArn = a} :: DeleteDatasetImportJob)
+
+instance Core.AWSRequest DeleteDatasetImportJob where
+  type
+    AWSResponse DeleteDatasetImportJob =
+      DeleteDatasetImportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteDatasetImportJobResponse'
+
+instance Prelude.Hashable DeleteDatasetImportJob where
+  hashWithSalt _salt DeleteDatasetImportJob' {..} =
+    _salt `Prelude.hashWithSalt` datasetImportJobArn
+
+instance Prelude.NFData DeleteDatasetImportJob where
+  rnf DeleteDatasetImportJob' {..} =
+    Prelude.rnf datasetImportJobArn
+
+instance Data.ToHeaders DeleteDatasetImportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteDatasetImportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDatasetImportJob where
+  toJSON DeleteDatasetImportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DatasetImportJobArn" Data..= datasetImportJobArn)
+          ]
+      )
+
+instance Data.ToPath DeleteDatasetImportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDatasetImportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDatasetImportJobResponse' smart constructor.
+data DeleteDatasetImportJobResponse = DeleteDatasetImportJobResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDatasetImportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDatasetImportJobResponse ::
+  DeleteDatasetImportJobResponse
+newDeleteDatasetImportJobResponse =
+  DeleteDatasetImportJobResponse'
+
+instance
+  Prelude.NFData
+    DeleteDatasetImportJobResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteExplainability.hs b/gen/Amazonka/Forecast/DeleteExplainability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteExplainability.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteExplainability
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Explainability resource.
+--
+-- You can delete only predictor that have a status of @ACTIVE@ or
+-- @CREATE_FAILED@. To get the status, use the DescribeExplainability
+-- operation.
+module Amazonka.Forecast.DeleteExplainability
+  ( -- * Creating a Request
+    DeleteExplainability (..),
+    newDeleteExplainability,
+
+    -- * Request Lenses
+    deleteExplainability_explainabilityArn,
+
+    -- * Destructuring the Response
+    DeleteExplainabilityResponse (..),
+    newDeleteExplainabilityResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteExplainability' smart constructor.
+data DeleteExplainability = DeleteExplainability'
+  { -- | The Amazon Resource Name (ARN) of the Explainability resource to delete.
+    explainabilityArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExplainability' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilityArn', 'deleteExplainability_explainabilityArn' - The Amazon Resource Name (ARN) of the Explainability resource to delete.
+newDeleteExplainability ::
+  -- | 'explainabilityArn'
+  Prelude.Text ->
+  DeleteExplainability
+newDeleteExplainability pExplainabilityArn_ =
+  DeleteExplainability'
+    { explainabilityArn =
+        pExplainabilityArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the Explainability resource to delete.
+deleteExplainability_explainabilityArn :: Lens.Lens' DeleteExplainability Prelude.Text
+deleteExplainability_explainabilityArn = Lens.lens (\DeleteExplainability' {explainabilityArn} -> explainabilityArn) (\s@DeleteExplainability' {} a -> s {explainabilityArn = a} :: DeleteExplainability)
+
+instance Core.AWSRequest DeleteExplainability where
+  type
+    AWSResponse DeleteExplainability =
+      DeleteExplainabilityResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteExplainabilityResponse'
+
+instance Prelude.Hashable DeleteExplainability where
+  hashWithSalt _salt DeleteExplainability' {..} =
+    _salt `Prelude.hashWithSalt` explainabilityArn
+
+instance Prelude.NFData DeleteExplainability where
+  rnf DeleteExplainability' {..} =
+    Prelude.rnf explainabilityArn
+
+instance Data.ToHeaders DeleteExplainability where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteExplainability" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteExplainability where
+  toJSON DeleteExplainability' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ExplainabilityArn" Data..= explainabilityArn)
+          ]
+      )
+
+instance Data.ToPath DeleteExplainability where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteExplainability where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteExplainabilityResponse' smart constructor.
+data DeleteExplainabilityResponse = DeleteExplainabilityResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExplainabilityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteExplainabilityResponse ::
+  DeleteExplainabilityResponse
+newDeleteExplainabilityResponse =
+  DeleteExplainabilityResponse'
+
+instance Prelude.NFData DeleteExplainabilityResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteExplainabilityExport.hs b/gen/Amazonka/Forecast/DeleteExplainabilityExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteExplainabilityExport.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteExplainabilityExport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Explainability export.
+module Amazonka.Forecast.DeleteExplainabilityExport
+  ( -- * Creating a Request
+    DeleteExplainabilityExport (..),
+    newDeleteExplainabilityExport,
+
+    -- * Request Lenses
+    deleteExplainabilityExport_explainabilityExportArn,
+
+    -- * Destructuring the Response
+    DeleteExplainabilityExportResponse (..),
+    newDeleteExplainabilityExportResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteExplainabilityExport' smart constructor.
+data DeleteExplainabilityExport = DeleteExplainabilityExport'
+  { -- | The Amazon Resource Name (ARN) of the Explainability export to delete.
+    explainabilityExportArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExplainabilityExport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilityExportArn', 'deleteExplainabilityExport_explainabilityExportArn' - The Amazon Resource Name (ARN) of the Explainability export to delete.
+newDeleteExplainabilityExport ::
+  -- | 'explainabilityExportArn'
+  Prelude.Text ->
+  DeleteExplainabilityExport
+newDeleteExplainabilityExport
+  pExplainabilityExportArn_ =
+    DeleteExplainabilityExport'
+      { explainabilityExportArn =
+          pExplainabilityExportArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the Explainability export to delete.
+deleteExplainabilityExport_explainabilityExportArn :: Lens.Lens' DeleteExplainabilityExport Prelude.Text
+deleteExplainabilityExport_explainabilityExportArn = Lens.lens (\DeleteExplainabilityExport' {explainabilityExportArn} -> explainabilityExportArn) (\s@DeleteExplainabilityExport' {} a -> s {explainabilityExportArn = a} :: DeleteExplainabilityExport)
+
+instance Core.AWSRequest DeleteExplainabilityExport where
+  type
+    AWSResponse DeleteExplainabilityExport =
+      DeleteExplainabilityExportResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteExplainabilityExportResponse'
+
+instance Prelude.Hashable DeleteExplainabilityExport where
+  hashWithSalt _salt DeleteExplainabilityExport' {..} =
+    _salt
+      `Prelude.hashWithSalt` explainabilityExportArn
+
+instance Prelude.NFData DeleteExplainabilityExport where
+  rnf DeleteExplainabilityExport' {..} =
+    Prelude.rnf explainabilityExportArn
+
+instance Data.ToHeaders DeleteExplainabilityExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteExplainabilityExport" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteExplainabilityExport where
+  toJSON DeleteExplainabilityExport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ExplainabilityExportArn"
+                  Data..= explainabilityExportArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeleteExplainabilityExport where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteExplainabilityExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteExplainabilityExportResponse' smart constructor.
+data DeleteExplainabilityExportResponse = DeleteExplainabilityExportResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteExplainabilityExportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteExplainabilityExportResponse ::
+  DeleteExplainabilityExportResponse
+newDeleteExplainabilityExportResponse =
+  DeleteExplainabilityExportResponse'
+
+instance
+  Prelude.NFData
+    DeleteExplainabilityExportResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteForecast.hs b/gen/Amazonka/Forecast/DeleteForecast.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteForecast.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteForecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a forecast created using the CreateForecast operation. You can
+-- delete only forecasts that have a status of @ACTIVE@ or @CREATE_FAILED@.
+-- To get the status, use the DescribeForecast operation.
+--
+-- You can\'t delete a forecast while it is being exported. After a
+-- forecast is deleted, you can no longer query the forecast.
+module Amazonka.Forecast.DeleteForecast
+  ( -- * Creating a Request
+    DeleteForecast (..),
+    newDeleteForecast,
+
+    -- * Request Lenses
+    deleteForecast_forecastArn,
+
+    -- * Destructuring the Response
+    DeleteForecastResponse (..),
+    newDeleteForecastResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteForecast' smart constructor.
+data DeleteForecast = DeleteForecast'
+  { -- | The Amazon Resource Name (ARN) of the forecast to delete.
+    forecastArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteForecast' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastArn', 'deleteForecast_forecastArn' - The Amazon Resource Name (ARN) of the forecast to delete.
+newDeleteForecast ::
+  -- | 'forecastArn'
+  Prelude.Text ->
+  DeleteForecast
+newDeleteForecast pForecastArn_ =
+  DeleteForecast' {forecastArn = pForecastArn_}
+
+-- | The Amazon Resource Name (ARN) of the forecast to delete.
+deleteForecast_forecastArn :: Lens.Lens' DeleteForecast Prelude.Text
+deleteForecast_forecastArn = Lens.lens (\DeleteForecast' {forecastArn} -> forecastArn) (\s@DeleteForecast' {} a -> s {forecastArn = a} :: DeleteForecast)
+
+instance Core.AWSRequest DeleteForecast where
+  type
+    AWSResponse DeleteForecast =
+      DeleteForecastResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteForecastResponse'
+
+instance Prelude.Hashable DeleteForecast where
+  hashWithSalt _salt DeleteForecast' {..} =
+    _salt `Prelude.hashWithSalt` forecastArn
+
+instance Prelude.NFData DeleteForecast where
+  rnf DeleteForecast' {..} = Prelude.rnf forecastArn
+
+instance Data.ToHeaders DeleteForecast where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteForecast" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteForecast where
+  toJSON DeleteForecast' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ForecastArn" Data..= forecastArn)]
+      )
+
+instance Data.ToPath DeleteForecast where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteForecast where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteForecastResponse' smart constructor.
+data DeleteForecastResponse = DeleteForecastResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteForecastResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteForecastResponse ::
+  DeleteForecastResponse
+newDeleteForecastResponse = DeleteForecastResponse'
+
+instance Prelude.NFData DeleteForecastResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteForecastExportJob.hs b/gen/Amazonka/Forecast/DeleteForecastExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteForecastExportJob.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteForecastExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a forecast export job created using the CreateForecastExportJob
+-- operation. You can delete only export jobs that have a status of
+-- @ACTIVE@ or @CREATE_FAILED@. To get the status, use the
+-- DescribeForecastExportJob operation.
+module Amazonka.Forecast.DeleteForecastExportJob
+  ( -- * Creating a Request
+    DeleteForecastExportJob (..),
+    newDeleteForecastExportJob,
+
+    -- * Request Lenses
+    deleteForecastExportJob_forecastExportJobArn,
+
+    -- * Destructuring the Response
+    DeleteForecastExportJobResponse (..),
+    newDeleteForecastExportJobResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteForecastExportJob' smart constructor.
+data DeleteForecastExportJob = DeleteForecastExportJob'
+  { -- | The Amazon Resource Name (ARN) of the forecast export job to delete.
+    forecastExportJobArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteForecastExportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastExportJobArn', 'deleteForecastExportJob_forecastExportJobArn' - The Amazon Resource Name (ARN) of the forecast export job to delete.
+newDeleteForecastExportJob ::
+  -- | 'forecastExportJobArn'
+  Prelude.Text ->
+  DeleteForecastExportJob
+newDeleteForecastExportJob pForecastExportJobArn_ =
+  DeleteForecastExportJob'
+    { forecastExportJobArn =
+        pForecastExportJobArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the forecast export job to delete.
+deleteForecastExportJob_forecastExportJobArn :: Lens.Lens' DeleteForecastExportJob Prelude.Text
+deleteForecastExportJob_forecastExportJobArn = Lens.lens (\DeleteForecastExportJob' {forecastExportJobArn} -> forecastExportJobArn) (\s@DeleteForecastExportJob' {} a -> s {forecastExportJobArn = a} :: DeleteForecastExportJob)
+
+instance Core.AWSRequest DeleteForecastExportJob where
+  type
+    AWSResponse DeleteForecastExportJob =
+      DeleteForecastExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteForecastExportJobResponse'
+
+instance Prelude.Hashable DeleteForecastExportJob where
+  hashWithSalt _salt DeleteForecastExportJob' {..} =
+    _salt `Prelude.hashWithSalt` forecastExportJobArn
+
+instance Prelude.NFData DeleteForecastExportJob where
+  rnf DeleteForecastExportJob' {..} =
+    Prelude.rnf forecastExportJobArn
+
+instance Data.ToHeaders DeleteForecastExportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteForecastExportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteForecastExportJob where
+  toJSON DeleteForecastExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ForecastExportJobArn"
+                  Data..= forecastExportJobArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeleteForecastExportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteForecastExportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteForecastExportJobResponse' smart constructor.
+data DeleteForecastExportJobResponse = DeleteForecastExportJobResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteForecastExportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteForecastExportJobResponse ::
+  DeleteForecastExportJobResponse
+newDeleteForecastExportJobResponse =
+  DeleteForecastExportJobResponse'
+
+instance
+  Prelude.NFData
+    DeleteForecastExportJobResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteMonitor.hs b/gen/Amazonka/Forecast/DeleteMonitor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteMonitor.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteMonitor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a monitor resource. You can only delete a monitor resource with
+-- a status of @ACTIVE@, @ACTIVE_STOPPED@, @CREATE_FAILED@, or
+-- @CREATE_STOPPED@.
+module Amazonka.Forecast.DeleteMonitor
+  ( -- * Creating a Request
+    DeleteMonitor (..),
+    newDeleteMonitor,
+
+    -- * Request Lenses
+    deleteMonitor_monitorArn,
+
+    -- * Destructuring the Response
+    DeleteMonitorResponse (..),
+    newDeleteMonitorResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteMonitor' smart constructor.
+data DeleteMonitor = DeleteMonitor'
+  { -- | The Amazon Resource Name (ARN) of the monitor resource to delete.
+    monitorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMonitor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'monitorArn', 'deleteMonitor_monitorArn' - The Amazon Resource Name (ARN) of the monitor resource to delete.
+newDeleteMonitor ::
+  -- | 'monitorArn'
+  Prelude.Text ->
+  DeleteMonitor
+newDeleteMonitor pMonitorArn_ =
+  DeleteMonitor' {monitorArn = pMonitorArn_}
+
+-- | The Amazon Resource Name (ARN) of the monitor resource to delete.
+deleteMonitor_monitorArn :: Lens.Lens' DeleteMonitor Prelude.Text
+deleteMonitor_monitorArn = Lens.lens (\DeleteMonitor' {monitorArn} -> monitorArn) (\s@DeleteMonitor' {} a -> s {monitorArn = a} :: DeleteMonitor)
+
+instance Core.AWSRequest DeleteMonitor where
+  type
+    AWSResponse DeleteMonitor =
+      DeleteMonitorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteMonitorResponse'
+
+instance Prelude.Hashable DeleteMonitor where
+  hashWithSalt _salt DeleteMonitor' {..} =
+    _salt `Prelude.hashWithSalt` monitorArn
+
+instance Prelude.NFData DeleteMonitor where
+  rnf DeleteMonitor' {..} = Prelude.rnf monitorArn
+
+instance Data.ToHeaders DeleteMonitor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteMonitor" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteMonitor where
+  toJSON DeleteMonitor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("MonitorArn" Data..= monitorArn)]
+      )
+
+instance Data.ToPath DeleteMonitor where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteMonitor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteMonitorResponse' smart constructor.
+data DeleteMonitorResponse = DeleteMonitorResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteMonitorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteMonitorResponse ::
+  DeleteMonitorResponse
+newDeleteMonitorResponse = DeleteMonitorResponse'
+
+instance Prelude.NFData DeleteMonitorResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeletePredictor.hs b/gen/Amazonka/Forecast/DeletePredictor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeletePredictor.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeletePredictor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a predictor created using the DescribePredictor or
+-- CreatePredictor operations. You can delete only predictor that have a
+-- status of @ACTIVE@ or @CREATE_FAILED@. To get the status, use the
+-- DescribePredictor operation.
+module Amazonka.Forecast.DeletePredictor
+  ( -- * Creating a Request
+    DeletePredictor (..),
+    newDeletePredictor,
+
+    -- * Request Lenses
+    deletePredictor_predictorArn,
+
+    -- * Destructuring the Response
+    DeletePredictorResponse (..),
+    newDeletePredictorResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePredictor' smart constructor.
+data DeletePredictor = DeletePredictor'
+  { -- | The Amazon Resource Name (ARN) of the predictor to delete.
+    predictorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePredictor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorArn', 'deletePredictor_predictorArn' - The Amazon Resource Name (ARN) of the predictor to delete.
+newDeletePredictor ::
+  -- | 'predictorArn'
+  Prelude.Text ->
+  DeletePredictor
+newDeletePredictor pPredictorArn_ =
+  DeletePredictor' {predictorArn = pPredictorArn_}
+
+-- | The Amazon Resource Name (ARN) of the predictor to delete.
+deletePredictor_predictorArn :: Lens.Lens' DeletePredictor Prelude.Text
+deletePredictor_predictorArn = Lens.lens (\DeletePredictor' {predictorArn} -> predictorArn) (\s@DeletePredictor' {} a -> s {predictorArn = a} :: DeletePredictor)
+
+instance Core.AWSRequest DeletePredictor where
+  type
+    AWSResponse DeletePredictor =
+      DeletePredictorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeletePredictorResponse'
+
+instance Prelude.Hashable DeletePredictor where
+  hashWithSalt _salt DeletePredictor' {..} =
+    _salt `Prelude.hashWithSalt` predictorArn
+
+instance Prelude.NFData DeletePredictor where
+  rnf DeletePredictor' {..} = Prelude.rnf predictorArn
+
+instance Data.ToHeaders DeletePredictor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeletePredictor" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeletePredictor where
+  toJSON DeletePredictor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("PredictorArn" Data..= predictorArn)]
+      )
+
+instance Data.ToPath DeletePredictor where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeletePredictor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeletePredictorResponse' smart constructor.
+data DeletePredictorResponse = DeletePredictorResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePredictorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeletePredictorResponse ::
+  DeletePredictorResponse
+newDeletePredictorResponse = DeletePredictorResponse'
+
+instance Prelude.NFData DeletePredictorResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeletePredictorBacktestExportJob.hs b/gen/Amazonka/Forecast/DeletePredictorBacktestExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeletePredictorBacktestExportJob.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeletePredictorBacktestExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a predictor backtest export job.
+module Amazonka.Forecast.DeletePredictorBacktestExportJob
+  ( -- * Creating a Request
+    DeletePredictorBacktestExportJob (..),
+    newDeletePredictorBacktestExportJob,
+
+    -- * Request Lenses
+    deletePredictorBacktestExportJob_predictorBacktestExportJobArn,
+
+    -- * Destructuring the Response
+    DeletePredictorBacktestExportJobResponse (..),
+    newDeletePredictorBacktestExportJobResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePredictorBacktestExportJob' smart constructor.
+data DeletePredictorBacktestExportJob = DeletePredictorBacktestExportJob'
+  { -- | The Amazon Resource Name (ARN) of the predictor backtest export job to
+    -- delete.
+    predictorBacktestExportJobArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePredictorBacktestExportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorBacktestExportJobArn', 'deletePredictorBacktestExportJob_predictorBacktestExportJobArn' - The Amazon Resource Name (ARN) of the predictor backtest export job to
+-- delete.
+newDeletePredictorBacktestExportJob ::
+  -- | 'predictorBacktestExportJobArn'
+  Prelude.Text ->
+  DeletePredictorBacktestExportJob
+newDeletePredictorBacktestExportJob
+  pPredictorBacktestExportJobArn_ =
+    DeletePredictorBacktestExportJob'
+      { predictorBacktestExportJobArn =
+          pPredictorBacktestExportJobArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the predictor backtest export job to
+-- delete.
+deletePredictorBacktestExportJob_predictorBacktestExportJobArn :: Lens.Lens' DeletePredictorBacktestExportJob Prelude.Text
+deletePredictorBacktestExportJob_predictorBacktestExportJobArn = Lens.lens (\DeletePredictorBacktestExportJob' {predictorBacktestExportJobArn} -> predictorBacktestExportJobArn) (\s@DeletePredictorBacktestExportJob' {} a -> s {predictorBacktestExportJobArn = a} :: DeletePredictorBacktestExportJob)
+
+instance
+  Core.AWSRequest
+    DeletePredictorBacktestExportJob
+  where
+  type
+    AWSResponse DeletePredictorBacktestExportJob =
+      DeletePredictorBacktestExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeletePredictorBacktestExportJobResponse'
+
+instance
+  Prelude.Hashable
+    DeletePredictorBacktestExportJob
+  where
+  hashWithSalt
+    _salt
+    DeletePredictorBacktestExportJob' {..} =
+      _salt
+        `Prelude.hashWithSalt` predictorBacktestExportJobArn
+
+instance
+  Prelude.NFData
+    DeletePredictorBacktestExportJob
+  where
+  rnf DeletePredictorBacktestExportJob' {..} =
+    Prelude.rnf predictorBacktestExportJobArn
+
+instance
+  Data.ToHeaders
+    DeletePredictorBacktestExportJob
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeletePredictorBacktestExportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeletePredictorBacktestExportJob where
+  toJSON DeletePredictorBacktestExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "PredictorBacktestExportJobArn"
+                  Data..= predictorBacktestExportJobArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeletePredictorBacktestExportJob where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeletePredictorBacktestExportJob
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeletePredictorBacktestExportJobResponse' smart constructor.
+data DeletePredictorBacktestExportJobResponse = DeletePredictorBacktestExportJobResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePredictorBacktestExportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeletePredictorBacktestExportJobResponse ::
+  DeletePredictorBacktestExportJobResponse
+newDeletePredictorBacktestExportJobResponse =
+  DeletePredictorBacktestExportJobResponse'
+
+instance
+  Prelude.NFData
+    DeletePredictorBacktestExportJobResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteResourceTree.hs b/gen/Amazonka/Forecast/DeleteResourceTree.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteResourceTree.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteResourceTree
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an entire resource tree. This operation will delete the parent
+-- resource and its child resources.
+--
+-- Child resources are resources that were created from another resource.
+-- For example, when a forecast is generated from a predictor, the forecast
+-- is the child resource and the predictor is the parent resource.
+--
+-- Amazon Forecast resources possess the following parent-child resource
+-- hierarchies:
+--
+-- -   __Dataset__: dataset import jobs
+--
+-- -   __Dataset Group__: predictors, predictor backtest export jobs,
+--     forecasts, forecast export jobs
+--
+-- -   __Predictor__: predictor backtest export jobs, forecasts, forecast
+--     export jobs
+--
+-- -   __Forecast__: forecast export jobs
+--
+-- @DeleteResourceTree@ will only delete Amazon Forecast resources, and
+-- will not delete datasets or exported files stored in Amazon S3.
+module Amazonka.Forecast.DeleteResourceTree
+  ( -- * Creating a Request
+    DeleteResourceTree (..),
+    newDeleteResourceTree,
+
+    -- * Request Lenses
+    deleteResourceTree_resourceArn,
+
+    -- * Destructuring the Response
+    DeleteResourceTreeResponse (..),
+    newDeleteResourceTreeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteResourceTree' smart constructor.
+data DeleteResourceTree = DeleteResourceTree'
+  { -- | The Amazon Resource Name (ARN) of the parent resource to delete. All
+    -- child resources of the parent resource will also be deleted.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourceTree' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'deleteResourceTree_resourceArn' - The Amazon Resource Name (ARN) of the parent resource to delete. All
+-- child resources of the parent resource will also be deleted.
+newDeleteResourceTree ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  DeleteResourceTree
+newDeleteResourceTree pResourceArn_ =
+  DeleteResourceTree' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the parent resource to delete. All
+-- child resources of the parent resource will also be deleted.
+deleteResourceTree_resourceArn :: Lens.Lens' DeleteResourceTree Prelude.Text
+deleteResourceTree_resourceArn = Lens.lens (\DeleteResourceTree' {resourceArn} -> resourceArn) (\s@DeleteResourceTree' {} a -> s {resourceArn = a} :: DeleteResourceTree)
+
+instance Core.AWSRequest DeleteResourceTree where
+  type
+    AWSResponse DeleteResourceTree =
+      DeleteResourceTreeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteResourceTreeResponse'
+
+instance Prelude.Hashable DeleteResourceTree where
+  hashWithSalt _salt DeleteResourceTree' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData DeleteResourceTree where
+  rnf DeleteResourceTree' {..} = Prelude.rnf resourceArn
+
+instance Data.ToHeaders DeleteResourceTree where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteResourceTree" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteResourceTree where
+  toJSON DeleteResourceTree' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath DeleteResourceTree where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteResourceTree where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteResourceTreeResponse' smart constructor.
+data DeleteResourceTreeResponse = DeleteResourceTreeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteResourceTreeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteResourceTreeResponse ::
+  DeleteResourceTreeResponse
+newDeleteResourceTreeResponse =
+  DeleteResourceTreeResponse'
+
+instance Prelude.NFData DeleteResourceTreeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteWhatIfAnalysis.hs b/gen/Amazonka/Forecast/DeleteWhatIfAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteWhatIfAnalysis.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteWhatIfAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a what-if analysis created using the CreateWhatIfAnalysis
+-- operation. You can delete only what-if analyses that have a status of
+-- @ACTIVE@ or @CREATE_FAILED@. To get the status, use the
+-- DescribeWhatIfAnalysis operation.
+--
+-- You can\'t delete a what-if analysis while any of its forecasts are
+-- being exported.
+module Amazonka.Forecast.DeleteWhatIfAnalysis
+  ( -- * Creating a Request
+    DeleteWhatIfAnalysis (..),
+    newDeleteWhatIfAnalysis,
+
+    -- * Request Lenses
+    deleteWhatIfAnalysis_whatIfAnalysisArn,
+
+    -- * Destructuring the Response
+    DeleteWhatIfAnalysisResponse (..),
+    newDeleteWhatIfAnalysisResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWhatIfAnalysis' smart constructor.
+data DeleteWhatIfAnalysis = DeleteWhatIfAnalysis'
+  { -- | The Amazon Resource Name (ARN) of the what-if analysis that you want to
+    -- delete.
+    whatIfAnalysisArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWhatIfAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfAnalysisArn', 'deleteWhatIfAnalysis_whatIfAnalysisArn' - The Amazon Resource Name (ARN) of the what-if analysis that you want to
+-- delete.
+newDeleteWhatIfAnalysis ::
+  -- | 'whatIfAnalysisArn'
+  Prelude.Text ->
+  DeleteWhatIfAnalysis
+newDeleteWhatIfAnalysis pWhatIfAnalysisArn_ =
+  DeleteWhatIfAnalysis'
+    { whatIfAnalysisArn =
+        pWhatIfAnalysisArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the what-if analysis that you want to
+-- delete.
+deleteWhatIfAnalysis_whatIfAnalysisArn :: Lens.Lens' DeleteWhatIfAnalysis Prelude.Text
+deleteWhatIfAnalysis_whatIfAnalysisArn = Lens.lens (\DeleteWhatIfAnalysis' {whatIfAnalysisArn} -> whatIfAnalysisArn) (\s@DeleteWhatIfAnalysis' {} a -> s {whatIfAnalysisArn = a} :: DeleteWhatIfAnalysis)
+
+instance Core.AWSRequest DeleteWhatIfAnalysis where
+  type
+    AWSResponse DeleteWhatIfAnalysis =
+      DeleteWhatIfAnalysisResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteWhatIfAnalysisResponse'
+
+instance Prelude.Hashable DeleteWhatIfAnalysis where
+  hashWithSalt _salt DeleteWhatIfAnalysis' {..} =
+    _salt `Prelude.hashWithSalt` whatIfAnalysisArn
+
+instance Prelude.NFData DeleteWhatIfAnalysis where
+  rnf DeleteWhatIfAnalysis' {..} =
+    Prelude.rnf whatIfAnalysisArn
+
+instance Data.ToHeaders DeleteWhatIfAnalysis where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteWhatIfAnalysis" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWhatIfAnalysis where
+  toJSON DeleteWhatIfAnalysis' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("WhatIfAnalysisArn" Data..= whatIfAnalysisArn)
+          ]
+      )
+
+instance Data.ToPath DeleteWhatIfAnalysis where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteWhatIfAnalysis where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWhatIfAnalysisResponse' smart constructor.
+data DeleteWhatIfAnalysisResponse = DeleteWhatIfAnalysisResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWhatIfAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteWhatIfAnalysisResponse ::
+  DeleteWhatIfAnalysisResponse
+newDeleteWhatIfAnalysisResponse =
+  DeleteWhatIfAnalysisResponse'
+
+instance Prelude.NFData DeleteWhatIfAnalysisResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteWhatIfForecast.hs b/gen/Amazonka/Forecast/DeleteWhatIfForecast.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteWhatIfForecast.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteWhatIfForecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a what-if forecast created using the CreateWhatIfForecast
+-- operation. You can delete only what-if forecasts that have a status of
+-- @ACTIVE@ or @CREATE_FAILED@. To get the status, use the
+-- DescribeWhatIfForecast operation.
+--
+-- You can\'t delete a what-if forecast while it is being exported. After a
+-- what-if forecast is deleted, you can no longer query the what-if
+-- analysis.
+module Amazonka.Forecast.DeleteWhatIfForecast
+  ( -- * Creating a Request
+    DeleteWhatIfForecast (..),
+    newDeleteWhatIfForecast,
+
+    -- * Request Lenses
+    deleteWhatIfForecast_whatIfForecastArn,
+
+    -- * Destructuring the Response
+    DeleteWhatIfForecastResponse (..),
+    newDeleteWhatIfForecastResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWhatIfForecast' smart constructor.
+data DeleteWhatIfForecast = DeleteWhatIfForecast'
+  { -- | The Amazon Resource Name (ARN) of the what-if forecast that you want to
+    -- delete.
+    whatIfForecastArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWhatIfForecast' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfForecastArn', 'deleteWhatIfForecast_whatIfForecastArn' - The Amazon Resource Name (ARN) of the what-if forecast that you want to
+-- delete.
+newDeleteWhatIfForecast ::
+  -- | 'whatIfForecastArn'
+  Prelude.Text ->
+  DeleteWhatIfForecast
+newDeleteWhatIfForecast pWhatIfForecastArn_ =
+  DeleteWhatIfForecast'
+    { whatIfForecastArn =
+        pWhatIfForecastArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast that you want to
+-- delete.
+deleteWhatIfForecast_whatIfForecastArn :: Lens.Lens' DeleteWhatIfForecast Prelude.Text
+deleteWhatIfForecast_whatIfForecastArn = Lens.lens (\DeleteWhatIfForecast' {whatIfForecastArn} -> whatIfForecastArn) (\s@DeleteWhatIfForecast' {} a -> s {whatIfForecastArn = a} :: DeleteWhatIfForecast)
+
+instance Core.AWSRequest DeleteWhatIfForecast where
+  type
+    AWSResponse DeleteWhatIfForecast =
+      DeleteWhatIfForecastResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull DeleteWhatIfForecastResponse'
+
+instance Prelude.Hashable DeleteWhatIfForecast where
+  hashWithSalt _salt DeleteWhatIfForecast' {..} =
+    _salt `Prelude.hashWithSalt` whatIfForecastArn
+
+instance Prelude.NFData DeleteWhatIfForecast where
+  rnf DeleteWhatIfForecast' {..} =
+    Prelude.rnf whatIfForecastArn
+
+instance Data.ToHeaders DeleteWhatIfForecast where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteWhatIfForecast" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWhatIfForecast where
+  toJSON DeleteWhatIfForecast' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("WhatIfForecastArn" Data..= whatIfForecastArn)
+          ]
+      )
+
+instance Data.ToPath DeleteWhatIfForecast where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteWhatIfForecast where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWhatIfForecastResponse' smart constructor.
+data DeleteWhatIfForecastResponse = DeleteWhatIfForecastResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWhatIfForecastResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteWhatIfForecastResponse ::
+  DeleteWhatIfForecastResponse
+newDeleteWhatIfForecastResponse =
+  DeleteWhatIfForecastResponse'
+
+instance Prelude.NFData DeleteWhatIfForecastResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DeleteWhatIfForecastExport.hs b/gen/Amazonka/Forecast/DeleteWhatIfForecastExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DeleteWhatIfForecastExport.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DeleteWhatIfForecastExport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a what-if forecast export created using the
+-- CreateWhatIfForecastExport operation. You can delete only what-if
+-- forecast exports that have a status of @ACTIVE@ or @CREATE_FAILED@. To
+-- get the status, use the DescribeWhatIfForecastExport operation.
+module Amazonka.Forecast.DeleteWhatIfForecastExport
+  ( -- * Creating a Request
+    DeleteWhatIfForecastExport (..),
+    newDeleteWhatIfForecastExport,
+
+    -- * Request Lenses
+    deleteWhatIfForecastExport_whatIfForecastExportArn,
+
+    -- * Destructuring the Response
+    DeleteWhatIfForecastExportResponse (..),
+    newDeleteWhatIfForecastExportResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteWhatIfForecastExport' smart constructor.
+data DeleteWhatIfForecastExport = DeleteWhatIfForecastExport'
+  { -- | The Amazon Resource Name (ARN) of the what-if forecast export that you
+    -- want to delete.
+    whatIfForecastExportArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWhatIfForecastExport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfForecastExportArn', 'deleteWhatIfForecastExport_whatIfForecastExportArn' - The Amazon Resource Name (ARN) of the what-if forecast export that you
+-- want to delete.
+newDeleteWhatIfForecastExport ::
+  -- | 'whatIfForecastExportArn'
+  Prelude.Text ->
+  DeleteWhatIfForecastExport
+newDeleteWhatIfForecastExport
+  pWhatIfForecastExportArn_ =
+    DeleteWhatIfForecastExport'
+      { whatIfForecastExportArn =
+          pWhatIfForecastExportArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast export that you
+-- want to delete.
+deleteWhatIfForecastExport_whatIfForecastExportArn :: Lens.Lens' DeleteWhatIfForecastExport Prelude.Text
+deleteWhatIfForecastExport_whatIfForecastExportArn = Lens.lens (\DeleteWhatIfForecastExport' {whatIfForecastExportArn} -> whatIfForecastExportArn) (\s@DeleteWhatIfForecastExport' {} a -> s {whatIfForecastExportArn = a} :: DeleteWhatIfForecastExport)
+
+instance Core.AWSRequest DeleteWhatIfForecastExport where
+  type
+    AWSResponse DeleteWhatIfForecastExport =
+      DeleteWhatIfForecastExportResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteWhatIfForecastExportResponse'
+
+instance Prelude.Hashable DeleteWhatIfForecastExport where
+  hashWithSalt _salt DeleteWhatIfForecastExport' {..} =
+    _salt
+      `Prelude.hashWithSalt` whatIfForecastExportArn
+
+instance Prelude.NFData DeleteWhatIfForecastExport where
+  rnf DeleteWhatIfForecastExport' {..} =
+    Prelude.rnf whatIfForecastExportArn
+
+instance Data.ToHeaders DeleteWhatIfForecastExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DeleteWhatIfForecastExport" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteWhatIfForecastExport where
+  toJSON DeleteWhatIfForecastExport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "WhatIfForecastExportArn"
+                  Data..= whatIfForecastExportArn
+              )
+          ]
+      )
+
+instance Data.ToPath DeleteWhatIfForecastExport where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteWhatIfForecastExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteWhatIfForecastExportResponse' smart constructor.
+data DeleteWhatIfForecastExportResponse = DeleteWhatIfForecastExportResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteWhatIfForecastExportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteWhatIfForecastExportResponse ::
+  DeleteWhatIfForecastExportResponse
+newDeleteWhatIfForecastExportResponse =
+  DeleteWhatIfForecastExportResponse'
+
+instance
+  Prelude.NFData
+    DeleteWhatIfForecastExportResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/DescribeAutoPredictor.hs b/gen/Amazonka/Forecast/DescribeAutoPredictor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeAutoPredictor.hs
@@ -0,0 +1,489 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeAutoPredictor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a predictor created using the CreateAutoPredictor operation.
+module Amazonka.Forecast.DescribeAutoPredictor
+  ( -- * Creating a Request
+    DescribeAutoPredictor (..),
+    newDescribeAutoPredictor,
+
+    -- * Request Lenses
+    describeAutoPredictor_predictorArn,
+
+    -- * Destructuring the Response
+    DescribeAutoPredictorResponse (..),
+    newDescribeAutoPredictorResponse,
+
+    -- * Response Lenses
+    describeAutoPredictorResponse_creationTime,
+    describeAutoPredictorResponse_dataConfig,
+    describeAutoPredictorResponse_datasetImportJobArns,
+    describeAutoPredictorResponse_encryptionConfig,
+    describeAutoPredictorResponse_estimatedTimeRemainingInMinutes,
+    describeAutoPredictorResponse_explainabilityInfo,
+    describeAutoPredictorResponse_forecastDimensions,
+    describeAutoPredictorResponse_forecastFrequency,
+    describeAutoPredictorResponse_forecastHorizon,
+    describeAutoPredictorResponse_forecastTypes,
+    describeAutoPredictorResponse_lastModificationTime,
+    describeAutoPredictorResponse_message,
+    describeAutoPredictorResponse_monitorInfo,
+    describeAutoPredictorResponse_optimizationMetric,
+    describeAutoPredictorResponse_predictorArn,
+    describeAutoPredictorResponse_predictorName,
+    describeAutoPredictorResponse_referencePredictorSummary,
+    describeAutoPredictorResponse_status,
+    describeAutoPredictorResponse_timeAlignmentBoundary,
+    describeAutoPredictorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAutoPredictor' smart constructor.
+data DescribeAutoPredictor = DescribeAutoPredictor'
+  { -- | The Amazon Resource Name (ARN) of the predictor.
+    predictorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAutoPredictor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorArn', 'describeAutoPredictor_predictorArn' - The Amazon Resource Name (ARN) of the predictor.
+newDescribeAutoPredictor ::
+  -- | 'predictorArn'
+  Prelude.Text ->
+  DescribeAutoPredictor
+newDescribeAutoPredictor pPredictorArn_ =
+  DescribeAutoPredictor'
+    { predictorArn =
+        pPredictorArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the predictor.
+describeAutoPredictor_predictorArn :: Lens.Lens' DescribeAutoPredictor Prelude.Text
+describeAutoPredictor_predictorArn = Lens.lens (\DescribeAutoPredictor' {predictorArn} -> predictorArn) (\s@DescribeAutoPredictor' {} a -> s {predictorArn = a} :: DescribeAutoPredictor)
+
+instance Core.AWSRequest DescribeAutoPredictor where
+  type
+    AWSResponse DescribeAutoPredictor =
+      DescribeAutoPredictorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAutoPredictorResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DataConfig")
+            Prelude.<*> ( x
+                            Data..?> "DatasetImportJobArns"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "EncryptionConfig")
+            Prelude.<*> (x Data..?> "EstimatedTimeRemainingInMinutes")
+            Prelude.<*> (x Data..?> "ExplainabilityInfo")
+            Prelude.<*> (x Data..?> "ForecastDimensions")
+            Prelude.<*> (x Data..?> "ForecastFrequency")
+            Prelude.<*> (x Data..?> "ForecastHorizon")
+            Prelude.<*> (x Data..?> "ForecastTypes")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "MonitorInfo")
+            Prelude.<*> (x Data..?> "OptimizationMetric")
+            Prelude.<*> (x Data..?> "PredictorArn")
+            Prelude.<*> (x Data..?> "PredictorName")
+            Prelude.<*> (x Data..?> "ReferencePredictorSummary")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TimeAlignmentBoundary")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAutoPredictor where
+  hashWithSalt _salt DescribeAutoPredictor' {..} =
+    _salt `Prelude.hashWithSalt` predictorArn
+
+instance Prelude.NFData DescribeAutoPredictor where
+  rnf DescribeAutoPredictor' {..} =
+    Prelude.rnf predictorArn
+
+instance Data.ToHeaders DescribeAutoPredictor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeAutoPredictor" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAutoPredictor where
+  toJSON DescribeAutoPredictor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("PredictorArn" Data..= predictorArn)]
+      )
+
+instance Data.ToPath DescribeAutoPredictor where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAutoPredictor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAutoPredictorResponse' smart constructor.
+data DescribeAutoPredictorResponse = DescribeAutoPredictorResponse'
+  { -- | The timestamp of the CreateAutoPredictor request.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The data configuration for your dataset group and any additional
+    -- datasets.
+    dataConfig :: Prelude.Maybe DataConfig,
+    -- | An array of the ARNs of the dataset import jobs used to import training
+    -- data for the predictor.
+    datasetImportJobArns :: Prelude.Maybe [Prelude.Text],
+    encryptionConfig :: Prelude.Maybe EncryptionConfig,
+    -- | The estimated time remaining in minutes for the predictor training job
+    -- to complete.
+    estimatedTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | Provides the status and ARN of the Predictor Explainability.
+    explainabilityInfo :: Prelude.Maybe ExplainabilityInfo,
+    -- | An array of dimension (field) names that specify the attributes used to
+    -- group your time series.
+    forecastDimensions :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The frequency of predictions in a forecast.
+    --
+    -- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+    -- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+    -- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+    -- and \"5min\" indicates every five minutes.
+    forecastFrequency :: Prelude.Maybe Prelude.Text,
+    -- | The number of time-steps that the model predicts. The forecast horizon
+    -- is also called the prediction length.
+    forecastHorizon :: Prelude.Maybe Prelude.Int,
+    -- | The forecast types used during predictor training. Default value is
+    -- [\"0.1\",\"0.5\",\"0.9\"].
+    forecastTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | In the event of an error, a message detailing the cause of the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | A object with the Amazon Resource Name (ARN) and status of the monitor
+    -- resource.
+    monitorInfo :: Prelude.Maybe MonitorInfo,
+    -- | The accuracy metric used to optimize the predictor.
+    optimizationMetric :: Prelude.Maybe OptimizationMetric,
+    -- | The Amazon Resource Name (ARN) of the predictor
+    predictorArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the predictor.
+    predictorName :: Prelude.Maybe Prelude.Text,
+    -- | The ARN and state of the reference predictor. This parameter is only
+    -- valid for retrained or upgraded predictors.
+    referencePredictorSummary :: Prelude.Maybe ReferencePredictorSummary,
+    -- | The status of the predictor. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The time boundary Forecast uses when aggregating data.
+    timeAlignmentBoundary :: Prelude.Maybe TimeAlignmentBoundary,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAutoPredictorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeAutoPredictorResponse_creationTime' - The timestamp of the CreateAutoPredictor request.
+--
+-- 'dataConfig', 'describeAutoPredictorResponse_dataConfig' - The data configuration for your dataset group and any additional
+-- datasets.
+--
+-- 'datasetImportJobArns', 'describeAutoPredictorResponse_datasetImportJobArns' - An array of the ARNs of the dataset import jobs used to import training
+-- data for the predictor.
+--
+-- 'encryptionConfig', 'describeAutoPredictorResponse_encryptionConfig' - Undocumented member.
+--
+-- 'estimatedTimeRemainingInMinutes', 'describeAutoPredictorResponse_estimatedTimeRemainingInMinutes' - The estimated time remaining in minutes for the predictor training job
+-- to complete.
+--
+-- 'explainabilityInfo', 'describeAutoPredictorResponse_explainabilityInfo' - Provides the status and ARN of the Predictor Explainability.
+--
+-- 'forecastDimensions', 'describeAutoPredictorResponse_forecastDimensions' - An array of dimension (field) names that specify the attributes used to
+-- group your time series.
+--
+-- 'forecastFrequency', 'describeAutoPredictorResponse_forecastFrequency' - The frequency of predictions in a forecast.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+-- and \"5min\" indicates every five minutes.
+--
+-- 'forecastHorizon', 'describeAutoPredictorResponse_forecastHorizon' - The number of time-steps that the model predicts. The forecast horizon
+-- is also called the prediction length.
+--
+-- 'forecastTypes', 'describeAutoPredictorResponse_forecastTypes' - The forecast types used during predictor training. Default value is
+-- [\"0.1\",\"0.5\",\"0.9\"].
+--
+-- 'lastModificationTime', 'describeAutoPredictorResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeAutoPredictorResponse_message' - In the event of an error, a message detailing the cause of the error.
+--
+-- 'monitorInfo', 'describeAutoPredictorResponse_monitorInfo' - A object with the Amazon Resource Name (ARN) and status of the monitor
+-- resource.
+--
+-- 'optimizationMetric', 'describeAutoPredictorResponse_optimizationMetric' - The accuracy metric used to optimize the predictor.
+--
+-- 'predictorArn', 'describeAutoPredictorResponse_predictorArn' - The Amazon Resource Name (ARN) of the predictor
+--
+-- 'predictorName', 'describeAutoPredictorResponse_predictorName' - The name of the predictor.
+--
+-- 'referencePredictorSummary', 'describeAutoPredictorResponse_referencePredictorSummary' - The ARN and state of the reference predictor. This parameter is only
+-- valid for retrained or upgraded predictors.
+--
+-- 'status', 'describeAutoPredictorResponse_status' - The status of the predictor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- 'timeAlignmentBoundary', 'describeAutoPredictorResponse_timeAlignmentBoundary' - The time boundary Forecast uses when aggregating data.
+--
+-- 'httpStatus', 'describeAutoPredictorResponse_httpStatus' - The response's http status code.
+newDescribeAutoPredictorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAutoPredictorResponse
+newDescribeAutoPredictorResponse pHttpStatus_ =
+  DescribeAutoPredictorResponse'
+    { creationTime =
+        Prelude.Nothing,
+      dataConfig = Prelude.Nothing,
+      datasetImportJobArns = Prelude.Nothing,
+      encryptionConfig = Prelude.Nothing,
+      estimatedTimeRemainingInMinutes =
+        Prelude.Nothing,
+      explainabilityInfo = Prelude.Nothing,
+      forecastDimensions = Prelude.Nothing,
+      forecastFrequency = Prelude.Nothing,
+      forecastHorizon = Prelude.Nothing,
+      forecastTypes = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      monitorInfo = Prelude.Nothing,
+      optimizationMetric = Prelude.Nothing,
+      predictorArn = Prelude.Nothing,
+      predictorName = Prelude.Nothing,
+      referencePredictorSummary = Prelude.Nothing,
+      status = Prelude.Nothing,
+      timeAlignmentBoundary = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The timestamp of the CreateAutoPredictor request.
+describeAutoPredictorResponse_creationTime :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.UTCTime)
+describeAutoPredictorResponse_creationTime = Lens.lens (\DescribeAutoPredictorResponse' {creationTime} -> creationTime) (\s@DescribeAutoPredictorResponse' {} a -> s {creationTime = a} :: DescribeAutoPredictorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The data configuration for your dataset group and any additional
+-- datasets.
+describeAutoPredictorResponse_dataConfig :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe DataConfig)
+describeAutoPredictorResponse_dataConfig = Lens.lens (\DescribeAutoPredictorResponse' {dataConfig} -> dataConfig) (\s@DescribeAutoPredictorResponse' {} a -> s {dataConfig = a} :: DescribeAutoPredictorResponse)
+
+-- | An array of the ARNs of the dataset import jobs used to import training
+-- data for the predictor.
+describeAutoPredictorResponse_datasetImportJobArns :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe [Prelude.Text])
+describeAutoPredictorResponse_datasetImportJobArns = Lens.lens (\DescribeAutoPredictorResponse' {datasetImportJobArns} -> datasetImportJobArns) (\s@DescribeAutoPredictorResponse' {} a -> s {datasetImportJobArns = a} :: DescribeAutoPredictorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+describeAutoPredictorResponse_encryptionConfig :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe EncryptionConfig)
+describeAutoPredictorResponse_encryptionConfig = Lens.lens (\DescribeAutoPredictorResponse' {encryptionConfig} -> encryptionConfig) (\s@DescribeAutoPredictorResponse' {} a -> s {encryptionConfig = a} :: DescribeAutoPredictorResponse)
+
+-- | The estimated time remaining in minutes for the predictor training job
+-- to complete.
+describeAutoPredictorResponse_estimatedTimeRemainingInMinutes :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.Integer)
+describeAutoPredictorResponse_estimatedTimeRemainingInMinutes = Lens.lens (\DescribeAutoPredictorResponse' {estimatedTimeRemainingInMinutes} -> estimatedTimeRemainingInMinutes) (\s@DescribeAutoPredictorResponse' {} a -> s {estimatedTimeRemainingInMinutes = a} :: DescribeAutoPredictorResponse)
+
+-- | Provides the status and ARN of the Predictor Explainability.
+describeAutoPredictorResponse_explainabilityInfo :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe ExplainabilityInfo)
+describeAutoPredictorResponse_explainabilityInfo = Lens.lens (\DescribeAutoPredictorResponse' {explainabilityInfo} -> explainabilityInfo) (\s@DescribeAutoPredictorResponse' {} a -> s {explainabilityInfo = a} :: DescribeAutoPredictorResponse)
+
+-- | An array of dimension (field) names that specify the attributes used to
+-- group your time series.
+describeAutoPredictorResponse_forecastDimensions :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeAutoPredictorResponse_forecastDimensions = Lens.lens (\DescribeAutoPredictorResponse' {forecastDimensions} -> forecastDimensions) (\s@DescribeAutoPredictorResponse' {} a -> s {forecastDimensions = a} :: DescribeAutoPredictorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The frequency of predictions in a forecast.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+-- and \"5min\" indicates every five minutes.
+describeAutoPredictorResponse_forecastFrequency :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.Text)
+describeAutoPredictorResponse_forecastFrequency = Lens.lens (\DescribeAutoPredictorResponse' {forecastFrequency} -> forecastFrequency) (\s@DescribeAutoPredictorResponse' {} a -> s {forecastFrequency = a} :: DescribeAutoPredictorResponse)
+
+-- | The number of time-steps that the model predicts. The forecast horizon
+-- is also called the prediction length.
+describeAutoPredictorResponse_forecastHorizon :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.Int)
+describeAutoPredictorResponse_forecastHorizon = Lens.lens (\DescribeAutoPredictorResponse' {forecastHorizon} -> forecastHorizon) (\s@DescribeAutoPredictorResponse' {} a -> s {forecastHorizon = a} :: DescribeAutoPredictorResponse)
+
+-- | The forecast types used during predictor training. Default value is
+-- [\"0.1\",\"0.5\",\"0.9\"].
+describeAutoPredictorResponse_forecastTypes :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeAutoPredictorResponse_forecastTypes = Lens.lens (\DescribeAutoPredictorResponse' {forecastTypes} -> forecastTypes) (\s@DescribeAutoPredictorResponse' {} a -> s {forecastTypes = a} :: DescribeAutoPredictorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeAutoPredictorResponse_lastModificationTime :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.UTCTime)
+describeAutoPredictorResponse_lastModificationTime = Lens.lens (\DescribeAutoPredictorResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeAutoPredictorResponse' {} a -> s {lastModificationTime = a} :: DescribeAutoPredictorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | In the event of an error, a message detailing the cause of the error.
+describeAutoPredictorResponse_message :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.Text)
+describeAutoPredictorResponse_message = Lens.lens (\DescribeAutoPredictorResponse' {message} -> message) (\s@DescribeAutoPredictorResponse' {} a -> s {message = a} :: DescribeAutoPredictorResponse)
+
+-- | A object with the Amazon Resource Name (ARN) and status of the monitor
+-- resource.
+describeAutoPredictorResponse_monitorInfo :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe MonitorInfo)
+describeAutoPredictorResponse_monitorInfo = Lens.lens (\DescribeAutoPredictorResponse' {monitorInfo} -> monitorInfo) (\s@DescribeAutoPredictorResponse' {} a -> s {monitorInfo = a} :: DescribeAutoPredictorResponse)
+
+-- | The accuracy metric used to optimize the predictor.
+describeAutoPredictorResponse_optimizationMetric :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe OptimizationMetric)
+describeAutoPredictorResponse_optimizationMetric = Lens.lens (\DescribeAutoPredictorResponse' {optimizationMetric} -> optimizationMetric) (\s@DescribeAutoPredictorResponse' {} a -> s {optimizationMetric = a} :: DescribeAutoPredictorResponse)
+
+-- | The Amazon Resource Name (ARN) of the predictor
+describeAutoPredictorResponse_predictorArn :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.Text)
+describeAutoPredictorResponse_predictorArn = Lens.lens (\DescribeAutoPredictorResponse' {predictorArn} -> predictorArn) (\s@DescribeAutoPredictorResponse' {} a -> s {predictorArn = a} :: DescribeAutoPredictorResponse)
+
+-- | The name of the predictor.
+describeAutoPredictorResponse_predictorName :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.Text)
+describeAutoPredictorResponse_predictorName = Lens.lens (\DescribeAutoPredictorResponse' {predictorName} -> predictorName) (\s@DescribeAutoPredictorResponse' {} a -> s {predictorName = a} :: DescribeAutoPredictorResponse)
+
+-- | The ARN and state of the reference predictor. This parameter is only
+-- valid for retrained or upgraded predictors.
+describeAutoPredictorResponse_referencePredictorSummary :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe ReferencePredictorSummary)
+describeAutoPredictorResponse_referencePredictorSummary = Lens.lens (\DescribeAutoPredictorResponse' {referencePredictorSummary} -> referencePredictorSummary) (\s@DescribeAutoPredictorResponse' {} a -> s {referencePredictorSummary = a} :: DescribeAutoPredictorResponse)
+
+-- | The status of the predictor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+describeAutoPredictorResponse_status :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe Prelude.Text)
+describeAutoPredictorResponse_status = Lens.lens (\DescribeAutoPredictorResponse' {status} -> status) (\s@DescribeAutoPredictorResponse' {} a -> s {status = a} :: DescribeAutoPredictorResponse)
+
+-- | The time boundary Forecast uses when aggregating data.
+describeAutoPredictorResponse_timeAlignmentBoundary :: Lens.Lens' DescribeAutoPredictorResponse (Prelude.Maybe TimeAlignmentBoundary)
+describeAutoPredictorResponse_timeAlignmentBoundary = Lens.lens (\DescribeAutoPredictorResponse' {timeAlignmentBoundary} -> timeAlignmentBoundary) (\s@DescribeAutoPredictorResponse' {} a -> s {timeAlignmentBoundary = a} :: DescribeAutoPredictorResponse)
+
+-- | The response's http status code.
+describeAutoPredictorResponse_httpStatus :: Lens.Lens' DescribeAutoPredictorResponse Prelude.Int
+describeAutoPredictorResponse_httpStatus = Lens.lens (\DescribeAutoPredictorResponse' {httpStatus} -> httpStatus) (\s@DescribeAutoPredictorResponse' {} a -> s {httpStatus = a} :: DescribeAutoPredictorResponse)
+
+instance Prelude.NFData DescribeAutoPredictorResponse where
+  rnf DescribeAutoPredictorResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataConfig
+      `Prelude.seq` Prelude.rnf datasetImportJobArns
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf estimatedTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf explainabilityInfo
+      `Prelude.seq` Prelude.rnf forecastDimensions
+      `Prelude.seq` Prelude.rnf forecastFrequency
+      `Prelude.seq` Prelude.rnf forecastHorizon
+      `Prelude.seq` Prelude.rnf forecastTypes
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf monitorInfo
+      `Prelude.seq` Prelude.rnf optimizationMetric
+      `Prelude.seq` Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf predictorName
+      `Prelude.seq` Prelude.rnf
+        referencePredictorSummary
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf
+        timeAlignmentBoundary
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeDataset.hs b/gen/Amazonka/Forecast/DescribeDataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeDataset.hs
@@ -0,0 +1,380 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeDataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an Amazon Forecast dataset created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+-- operation.
+--
+-- In addition to listing the parameters specified in the @CreateDataset@
+-- request, this operation includes the following dataset properties:
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Status@
+module Amazonka.Forecast.DescribeDataset
+  ( -- * Creating a Request
+    DescribeDataset (..),
+    newDescribeDataset,
+
+    -- * Request Lenses
+    describeDataset_datasetArn,
+
+    -- * Destructuring the Response
+    DescribeDatasetResponse (..),
+    newDescribeDatasetResponse,
+
+    -- * Response Lenses
+    describeDatasetResponse_creationTime,
+    describeDatasetResponse_dataFrequency,
+    describeDatasetResponse_datasetArn,
+    describeDatasetResponse_datasetName,
+    describeDatasetResponse_datasetType,
+    describeDatasetResponse_domain,
+    describeDatasetResponse_encryptionConfig,
+    describeDatasetResponse_lastModificationTime,
+    describeDatasetResponse_schema,
+    describeDatasetResponse_status,
+    describeDatasetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDataset' smart constructor.
+data DescribeDataset = DescribeDataset'
+  { -- | The Amazon Resource Name (ARN) of the dataset.
+    datasetArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetArn', 'describeDataset_datasetArn' - The Amazon Resource Name (ARN) of the dataset.
+newDescribeDataset ::
+  -- | 'datasetArn'
+  Prelude.Text ->
+  DescribeDataset
+newDescribeDataset pDatasetArn_ =
+  DescribeDataset' {datasetArn = pDatasetArn_}
+
+-- | The Amazon Resource Name (ARN) of the dataset.
+describeDataset_datasetArn :: Lens.Lens' DescribeDataset Prelude.Text
+describeDataset_datasetArn = Lens.lens (\DescribeDataset' {datasetArn} -> datasetArn) (\s@DescribeDataset' {} a -> s {datasetArn = a} :: DescribeDataset)
+
+instance Core.AWSRequest DescribeDataset where
+  type
+    AWSResponse DescribeDataset =
+      DescribeDatasetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDatasetResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DataFrequency")
+            Prelude.<*> (x Data..?> "DatasetArn")
+            Prelude.<*> (x Data..?> "DatasetName")
+            Prelude.<*> (x Data..?> "DatasetType")
+            Prelude.<*> (x Data..?> "Domain")
+            Prelude.<*> (x Data..?> "EncryptionConfig")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Schema")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDataset where
+  hashWithSalt _salt DescribeDataset' {..} =
+    _salt `Prelude.hashWithSalt` datasetArn
+
+instance Prelude.NFData DescribeDataset where
+  rnf DescribeDataset' {..} = Prelude.rnf datasetArn
+
+instance Data.ToHeaders DescribeDataset where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeDataset" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeDataset where
+  toJSON DescribeDataset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("DatasetArn" Data..= datasetArn)]
+      )
+
+instance Data.ToPath DescribeDataset where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeDataset where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDatasetResponse' smart constructor.
+data DescribeDatasetResponse = DescribeDatasetResponse'
+  { -- | When the dataset was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The frequency of data collection.
+    --
+    -- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+    -- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+    -- minutes), and 1min (1 minute). For example, \"M\" indicates every month
+    -- and \"30min\" indicates every 30 minutes.
+    dataFrequency :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the dataset.
+    datasetArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the dataset.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | The dataset type.
+    datasetType :: Prelude.Maybe DatasetType,
+    -- | The domain associated with the dataset.
+    domain :: Prelude.Maybe Domain,
+    -- | The AWS Key Management Service (KMS) key and the AWS Identity and Access
+    -- Management (IAM) role that Amazon Forecast can assume to access the key.
+    encryptionConfig :: Prelude.Maybe EncryptionConfig,
+    -- | When you create a dataset, @LastModificationTime@ is the same as
+    -- @CreationTime@. While data is being imported to the dataset,
+    -- @LastModificationTime@ is the current time of the @DescribeDataset@
+    -- call. After a
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+    -- operation has finished, @LastModificationTime@ is when the import job
+    -- completed or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | An array of @SchemaAttribute@ objects that specify the dataset fields.
+    -- Each @SchemaAttribute@ specifies the name and data type of a field.
+    schema :: Prelude.Maybe Schema,
+    -- | The status of the dataset. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- -   @UPDATE_PENDING@, @UPDATE_IN_PROGRESS@, @UPDATE_FAILED@
+    --
+    -- The @UPDATE@ states apply while data is imported to the dataset from a
+    -- call to the
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+    -- operation and reflect the status of the dataset import job. For example,
+    -- when the import job status is @CREATE_IN_PROGRESS@, the status of the
+    -- dataset is @UPDATE_IN_PROGRESS@.
+    --
+    -- The @Status@ of the dataset must be @ACTIVE@ before you can import
+    -- training data.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDatasetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeDatasetResponse_creationTime' - When the dataset was created.
+--
+-- 'dataFrequency', 'describeDatasetResponse_dataFrequency' - The frequency of data collection.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"M\" indicates every month
+-- and \"30min\" indicates every 30 minutes.
+--
+-- 'datasetArn', 'describeDatasetResponse_datasetArn' - The Amazon Resource Name (ARN) of the dataset.
+--
+-- 'datasetName', 'describeDatasetResponse_datasetName' - The name of the dataset.
+--
+-- 'datasetType', 'describeDatasetResponse_datasetType' - The dataset type.
+--
+-- 'domain', 'describeDatasetResponse_domain' - The domain associated with the dataset.
+--
+-- 'encryptionConfig', 'describeDatasetResponse_encryptionConfig' - The AWS Key Management Service (KMS) key and the AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+--
+-- 'lastModificationTime', 'describeDatasetResponse_lastModificationTime' - When you create a dataset, @LastModificationTime@ is the same as
+-- @CreationTime@. While data is being imported to the dataset,
+-- @LastModificationTime@ is the current time of the @DescribeDataset@
+-- call. After a
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation has finished, @LastModificationTime@ is when the import job
+-- completed or failed.
+--
+-- 'schema', 'describeDatasetResponse_schema' - An array of @SchemaAttribute@ objects that specify the dataset fields.
+-- Each @SchemaAttribute@ specifies the name and data type of a field.
+--
+-- 'status', 'describeDatasetResponse_status' - The status of the dataset. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @UPDATE_PENDING@, @UPDATE_IN_PROGRESS@, @UPDATE_FAILED@
+--
+-- The @UPDATE@ states apply while data is imported to the dataset from a
+-- call to the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation and reflect the status of the dataset import job. For example,
+-- when the import job status is @CREATE_IN_PROGRESS@, the status of the
+-- dataset is @UPDATE_IN_PROGRESS@.
+--
+-- The @Status@ of the dataset must be @ACTIVE@ before you can import
+-- training data.
+--
+-- 'httpStatus', 'describeDatasetResponse_httpStatus' - The response's http status code.
+newDescribeDatasetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDatasetResponse
+newDescribeDatasetResponse pHttpStatus_ =
+  DescribeDatasetResponse'
+    { creationTime =
+        Prelude.Nothing,
+      dataFrequency = Prelude.Nothing,
+      datasetArn = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      datasetType = Prelude.Nothing,
+      domain = Prelude.Nothing,
+      encryptionConfig = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      schema = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the dataset was created.
+describeDatasetResponse_creationTime :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.UTCTime)
+describeDatasetResponse_creationTime = Lens.lens (\DescribeDatasetResponse' {creationTime} -> creationTime) (\s@DescribeDatasetResponse' {} a -> s {creationTime = a} :: DescribeDatasetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The frequency of data collection.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"M\" indicates every month
+-- and \"30min\" indicates every 30 minutes.
+describeDatasetResponse_dataFrequency :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.Text)
+describeDatasetResponse_dataFrequency = Lens.lens (\DescribeDatasetResponse' {dataFrequency} -> dataFrequency) (\s@DescribeDatasetResponse' {} a -> s {dataFrequency = a} :: DescribeDatasetResponse)
+
+-- | The Amazon Resource Name (ARN) of the dataset.
+describeDatasetResponse_datasetArn :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.Text)
+describeDatasetResponse_datasetArn = Lens.lens (\DescribeDatasetResponse' {datasetArn} -> datasetArn) (\s@DescribeDatasetResponse' {} a -> s {datasetArn = a} :: DescribeDatasetResponse)
+
+-- | The name of the dataset.
+describeDatasetResponse_datasetName :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.Text)
+describeDatasetResponse_datasetName = Lens.lens (\DescribeDatasetResponse' {datasetName} -> datasetName) (\s@DescribeDatasetResponse' {} a -> s {datasetName = a} :: DescribeDatasetResponse)
+
+-- | The dataset type.
+describeDatasetResponse_datasetType :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe DatasetType)
+describeDatasetResponse_datasetType = Lens.lens (\DescribeDatasetResponse' {datasetType} -> datasetType) (\s@DescribeDatasetResponse' {} a -> s {datasetType = a} :: DescribeDatasetResponse)
+
+-- | The domain associated with the dataset.
+describeDatasetResponse_domain :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Domain)
+describeDatasetResponse_domain = Lens.lens (\DescribeDatasetResponse' {domain} -> domain) (\s@DescribeDatasetResponse' {} a -> s {domain = a} :: DescribeDatasetResponse)
+
+-- | The AWS Key Management Service (KMS) key and the AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+describeDatasetResponse_encryptionConfig :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe EncryptionConfig)
+describeDatasetResponse_encryptionConfig = Lens.lens (\DescribeDatasetResponse' {encryptionConfig} -> encryptionConfig) (\s@DescribeDatasetResponse' {} a -> s {encryptionConfig = a} :: DescribeDatasetResponse)
+
+-- | When you create a dataset, @LastModificationTime@ is the same as
+-- @CreationTime@. While data is being imported to the dataset,
+-- @LastModificationTime@ is the current time of the @DescribeDataset@
+-- call. After a
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation has finished, @LastModificationTime@ is when the import job
+-- completed or failed.
+describeDatasetResponse_lastModificationTime :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.UTCTime)
+describeDatasetResponse_lastModificationTime = Lens.lens (\DescribeDatasetResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeDatasetResponse' {} a -> s {lastModificationTime = a} :: DescribeDatasetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | An array of @SchemaAttribute@ objects that specify the dataset fields.
+-- Each @SchemaAttribute@ specifies the name and data type of a field.
+describeDatasetResponse_schema :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Schema)
+describeDatasetResponse_schema = Lens.lens (\DescribeDatasetResponse' {schema} -> schema) (\s@DescribeDatasetResponse' {} a -> s {schema = a} :: DescribeDatasetResponse)
+
+-- | The status of the dataset. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @UPDATE_PENDING@, @UPDATE_IN_PROGRESS@, @UPDATE_FAILED@
+--
+-- The @UPDATE@ states apply while data is imported to the dataset from a
+-- call to the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation and reflect the status of the dataset import job. For example,
+-- when the import job status is @CREATE_IN_PROGRESS@, the status of the
+-- dataset is @UPDATE_IN_PROGRESS@.
+--
+-- The @Status@ of the dataset must be @ACTIVE@ before you can import
+-- training data.
+describeDatasetResponse_status :: Lens.Lens' DescribeDatasetResponse (Prelude.Maybe Prelude.Text)
+describeDatasetResponse_status = Lens.lens (\DescribeDatasetResponse' {status} -> status) (\s@DescribeDatasetResponse' {} a -> s {status = a} :: DescribeDatasetResponse)
+
+-- | The response's http status code.
+describeDatasetResponse_httpStatus :: Lens.Lens' DescribeDatasetResponse Prelude.Int
+describeDatasetResponse_httpStatus = Lens.lens (\DescribeDatasetResponse' {httpStatus} -> httpStatus) (\s@DescribeDatasetResponse' {} a -> s {httpStatus = a} :: DescribeDatasetResponse)
+
+instance Prelude.NFData DescribeDatasetResponse where
+  rnf DescribeDatasetResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataFrequency
+      `Prelude.seq` Prelude.rnf datasetArn
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf datasetType
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeDatasetGroup.hs b/gen/Amazonka/Forecast/DescribeDatasetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeDatasetGroup.hs
@@ -0,0 +1,320 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeDatasetGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a dataset group created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetGroup.html CreateDatasetGroup>
+-- operation.
+--
+-- In addition to listing the parameters provided in the
+-- @CreateDatasetGroup@ request, this operation includes the following
+-- properties:
+--
+-- -   @DatasetArns@ - The datasets belonging to the group.
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Status@
+module Amazonka.Forecast.DescribeDatasetGroup
+  ( -- * Creating a Request
+    DescribeDatasetGroup (..),
+    newDescribeDatasetGroup,
+
+    -- * Request Lenses
+    describeDatasetGroup_datasetGroupArn,
+
+    -- * Destructuring the Response
+    DescribeDatasetGroupResponse (..),
+    newDescribeDatasetGroupResponse,
+
+    -- * Response Lenses
+    describeDatasetGroupResponse_creationTime,
+    describeDatasetGroupResponse_datasetArns,
+    describeDatasetGroupResponse_datasetGroupArn,
+    describeDatasetGroupResponse_datasetGroupName,
+    describeDatasetGroupResponse_domain,
+    describeDatasetGroupResponse_lastModificationTime,
+    describeDatasetGroupResponse_status,
+    describeDatasetGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDatasetGroup' smart constructor.
+data DescribeDatasetGroup = DescribeDatasetGroup'
+  { -- | The Amazon Resource Name (ARN) of the dataset group.
+    datasetGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDatasetGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetGroupArn', 'describeDatasetGroup_datasetGroupArn' - The Amazon Resource Name (ARN) of the dataset group.
+newDescribeDatasetGroup ::
+  -- | 'datasetGroupArn'
+  Prelude.Text ->
+  DescribeDatasetGroup
+newDescribeDatasetGroup pDatasetGroupArn_ =
+  DescribeDatasetGroup'
+    { datasetGroupArn =
+        pDatasetGroupArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the dataset group.
+describeDatasetGroup_datasetGroupArn :: Lens.Lens' DescribeDatasetGroup Prelude.Text
+describeDatasetGroup_datasetGroupArn = Lens.lens (\DescribeDatasetGroup' {datasetGroupArn} -> datasetGroupArn) (\s@DescribeDatasetGroup' {} a -> s {datasetGroupArn = a} :: DescribeDatasetGroup)
+
+instance Core.AWSRequest DescribeDatasetGroup where
+  type
+    AWSResponse DescribeDatasetGroup =
+      DescribeDatasetGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDatasetGroupResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DatasetArns" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "DatasetGroupArn")
+            Prelude.<*> (x Data..?> "DatasetGroupName")
+            Prelude.<*> (x Data..?> "Domain")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDatasetGroup where
+  hashWithSalt _salt DescribeDatasetGroup' {..} =
+    _salt `Prelude.hashWithSalt` datasetGroupArn
+
+instance Prelude.NFData DescribeDatasetGroup where
+  rnf DescribeDatasetGroup' {..} =
+    Prelude.rnf datasetGroupArn
+
+instance Data.ToHeaders DescribeDatasetGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeDatasetGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeDatasetGroup where
+  toJSON DescribeDatasetGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DatasetGroupArn" Data..= datasetGroupArn)
+          ]
+      )
+
+instance Data.ToPath DescribeDatasetGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeDatasetGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDatasetGroupResponse' smart constructor.
+data DescribeDatasetGroupResponse = DescribeDatasetGroupResponse'
+  { -- | When the dataset group was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | An array of Amazon Resource Names (ARNs) of the datasets contained in
+    -- the dataset group.
+    datasetArns :: Prelude.Maybe [Prelude.Text],
+    -- | The ARN of the dataset group.
+    datasetGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the dataset group.
+    datasetGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The domain associated with the dataset group.
+    domain :: Prelude.Maybe Domain,
+    -- | When the dataset group was created or last updated from a call to the
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+    -- operation. While the dataset group is being updated,
+    -- @LastModificationTime@ is the current time of the @DescribeDatasetGroup@
+    -- call.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The status of the dataset group. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- -   @UPDATE_PENDING@, @UPDATE_IN_PROGRESS@, @UPDATE_FAILED@
+    --
+    -- The @UPDATE@ states apply when you call the
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+    -- operation.
+    --
+    -- The @Status@ of the dataset group must be @ACTIVE@ before you can use
+    -- the dataset group to create a predictor.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDatasetGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeDatasetGroupResponse_creationTime' - When the dataset group was created.
+--
+-- 'datasetArns', 'describeDatasetGroupResponse_datasetArns' - An array of Amazon Resource Names (ARNs) of the datasets contained in
+-- the dataset group.
+--
+-- 'datasetGroupArn', 'describeDatasetGroupResponse_datasetGroupArn' - The ARN of the dataset group.
+--
+-- 'datasetGroupName', 'describeDatasetGroupResponse_datasetGroupName' - The name of the dataset group.
+--
+-- 'domain', 'describeDatasetGroupResponse_domain' - The domain associated with the dataset group.
+--
+-- 'lastModificationTime', 'describeDatasetGroupResponse_lastModificationTime' - When the dataset group was created or last updated from a call to the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+-- operation. While the dataset group is being updated,
+-- @LastModificationTime@ is the current time of the @DescribeDatasetGroup@
+-- call.
+--
+-- 'status', 'describeDatasetGroupResponse_status' - The status of the dataset group. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @UPDATE_PENDING@, @UPDATE_IN_PROGRESS@, @UPDATE_FAILED@
+--
+-- The @UPDATE@ states apply when you call the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+-- operation.
+--
+-- The @Status@ of the dataset group must be @ACTIVE@ before you can use
+-- the dataset group to create a predictor.
+--
+-- 'httpStatus', 'describeDatasetGroupResponse_httpStatus' - The response's http status code.
+newDescribeDatasetGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDatasetGroupResponse
+newDescribeDatasetGroupResponse pHttpStatus_ =
+  DescribeDatasetGroupResponse'
+    { creationTime =
+        Prelude.Nothing,
+      datasetArns = Prelude.Nothing,
+      datasetGroupArn = Prelude.Nothing,
+      datasetGroupName = Prelude.Nothing,
+      domain = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the dataset group was created.
+describeDatasetGroupResponse_creationTime :: Lens.Lens' DescribeDatasetGroupResponse (Prelude.Maybe Prelude.UTCTime)
+describeDatasetGroupResponse_creationTime = Lens.lens (\DescribeDatasetGroupResponse' {creationTime} -> creationTime) (\s@DescribeDatasetGroupResponse' {} a -> s {creationTime = a} :: DescribeDatasetGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | An array of Amazon Resource Names (ARNs) of the datasets contained in
+-- the dataset group.
+describeDatasetGroupResponse_datasetArns :: Lens.Lens' DescribeDatasetGroupResponse (Prelude.Maybe [Prelude.Text])
+describeDatasetGroupResponse_datasetArns = Lens.lens (\DescribeDatasetGroupResponse' {datasetArns} -> datasetArns) (\s@DescribeDatasetGroupResponse' {} a -> s {datasetArns = a} :: DescribeDatasetGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the dataset group.
+describeDatasetGroupResponse_datasetGroupArn :: Lens.Lens' DescribeDatasetGroupResponse (Prelude.Maybe Prelude.Text)
+describeDatasetGroupResponse_datasetGroupArn = Lens.lens (\DescribeDatasetGroupResponse' {datasetGroupArn} -> datasetGroupArn) (\s@DescribeDatasetGroupResponse' {} a -> s {datasetGroupArn = a} :: DescribeDatasetGroupResponse)
+
+-- | The name of the dataset group.
+describeDatasetGroupResponse_datasetGroupName :: Lens.Lens' DescribeDatasetGroupResponse (Prelude.Maybe Prelude.Text)
+describeDatasetGroupResponse_datasetGroupName = Lens.lens (\DescribeDatasetGroupResponse' {datasetGroupName} -> datasetGroupName) (\s@DescribeDatasetGroupResponse' {} a -> s {datasetGroupName = a} :: DescribeDatasetGroupResponse)
+
+-- | The domain associated with the dataset group.
+describeDatasetGroupResponse_domain :: Lens.Lens' DescribeDatasetGroupResponse (Prelude.Maybe Domain)
+describeDatasetGroupResponse_domain = Lens.lens (\DescribeDatasetGroupResponse' {domain} -> domain) (\s@DescribeDatasetGroupResponse' {} a -> s {domain = a} :: DescribeDatasetGroupResponse)
+
+-- | When the dataset group was created or last updated from a call to the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+-- operation. While the dataset group is being updated,
+-- @LastModificationTime@ is the current time of the @DescribeDatasetGroup@
+-- call.
+describeDatasetGroupResponse_lastModificationTime :: Lens.Lens' DescribeDatasetGroupResponse (Prelude.Maybe Prelude.UTCTime)
+describeDatasetGroupResponse_lastModificationTime = Lens.lens (\DescribeDatasetGroupResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeDatasetGroupResponse' {} a -> s {lastModificationTime = a} :: DescribeDatasetGroupResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the dataset group. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @UPDATE_PENDING@, @UPDATE_IN_PROGRESS@, @UPDATE_FAILED@
+--
+-- The @UPDATE@ states apply when you call the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+-- operation.
+--
+-- The @Status@ of the dataset group must be @ACTIVE@ before you can use
+-- the dataset group to create a predictor.
+describeDatasetGroupResponse_status :: Lens.Lens' DescribeDatasetGroupResponse (Prelude.Maybe Prelude.Text)
+describeDatasetGroupResponse_status = Lens.lens (\DescribeDatasetGroupResponse' {status} -> status) (\s@DescribeDatasetGroupResponse' {} a -> s {status = a} :: DescribeDatasetGroupResponse)
+
+-- | The response's http status code.
+describeDatasetGroupResponse_httpStatus :: Lens.Lens' DescribeDatasetGroupResponse Prelude.Int
+describeDatasetGroupResponse_httpStatus = Lens.lens (\DescribeDatasetGroupResponse' {httpStatus} -> httpStatus) (\s@DescribeDatasetGroupResponse' {} a -> s {httpStatus = a} :: DescribeDatasetGroupResponse)
+
+instance Prelude.NFData DescribeDatasetGroupResponse where
+  rnf DescribeDatasetGroupResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf datasetArns
+      `Prelude.seq` Prelude.rnf datasetGroupArn
+      `Prelude.seq` Prelude.rnf datasetGroupName
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeDatasetImportJob.hs b/gen/Amazonka/Forecast/DescribeDatasetImportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeDatasetImportJob.hs
@@ -0,0 +1,500 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeDatasetImportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a dataset import job created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation.
+--
+-- In addition to listing the parameters provided in the
+-- @CreateDatasetImportJob@ request, this operation includes the following
+-- properties:
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @DataSize@
+--
+-- -   @FieldStatistics@
+--
+-- -   @Status@
+--
+-- -   @Message@ - If an error occurred, information about the error.
+module Amazonka.Forecast.DescribeDatasetImportJob
+  ( -- * Creating a Request
+    DescribeDatasetImportJob (..),
+    newDescribeDatasetImportJob,
+
+    -- * Request Lenses
+    describeDatasetImportJob_datasetImportJobArn,
+
+    -- * Destructuring the Response
+    DescribeDatasetImportJobResponse (..),
+    newDescribeDatasetImportJobResponse,
+
+    -- * Response Lenses
+    describeDatasetImportJobResponse_creationTime,
+    describeDatasetImportJobResponse_dataSize,
+    describeDatasetImportJobResponse_dataSource,
+    describeDatasetImportJobResponse_datasetArn,
+    describeDatasetImportJobResponse_datasetImportJobArn,
+    describeDatasetImportJobResponse_datasetImportJobName,
+    describeDatasetImportJobResponse_estimatedTimeRemainingInMinutes,
+    describeDatasetImportJobResponse_fieldStatistics,
+    describeDatasetImportJobResponse_format,
+    describeDatasetImportJobResponse_geolocationFormat,
+    describeDatasetImportJobResponse_lastModificationTime,
+    describeDatasetImportJobResponse_message,
+    describeDatasetImportJobResponse_status,
+    describeDatasetImportJobResponse_timeZone,
+    describeDatasetImportJobResponse_timestampFormat,
+    describeDatasetImportJobResponse_useGeolocationForTimeZone,
+    describeDatasetImportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDatasetImportJob' smart constructor.
+data DescribeDatasetImportJob = DescribeDatasetImportJob'
+  { -- | The Amazon Resource Name (ARN) of the dataset import job.
+    datasetImportJobArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDatasetImportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetImportJobArn', 'describeDatasetImportJob_datasetImportJobArn' - The Amazon Resource Name (ARN) of the dataset import job.
+newDescribeDatasetImportJob ::
+  -- | 'datasetImportJobArn'
+  Prelude.Text ->
+  DescribeDatasetImportJob
+newDescribeDatasetImportJob pDatasetImportJobArn_ =
+  DescribeDatasetImportJob'
+    { datasetImportJobArn =
+        pDatasetImportJobArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the dataset import job.
+describeDatasetImportJob_datasetImportJobArn :: Lens.Lens' DescribeDatasetImportJob Prelude.Text
+describeDatasetImportJob_datasetImportJobArn = Lens.lens (\DescribeDatasetImportJob' {datasetImportJobArn} -> datasetImportJobArn) (\s@DescribeDatasetImportJob' {} a -> s {datasetImportJobArn = a} :: DescribeDatasetImportJob)
+
+instance Core.AWSRequest DescribeDatasetImportJob where
+  type
+    AWSResponse DescribeDatasetImportJob =
+      DescribeDatasetImportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDatasetImportJobResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DataSize")
+            Prelude.<*> (x Data..?> "DataSource")
+            Prelude.<*> (x Data..?> "DatasetArn")
+            Prelude.<*> (x Data..?> "DatasetImportJobArn")
+            Prelude.<*> (x Data..?> "DatasetImportJobName")
+            Prelude.<*> (x Data..?> "EstimatedTimeRemainingInMinutes")
+            Prelude.<*> ( x
+                            Data..?> "FieldStatistics"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "Format")
+            Prelude.<*> (x Data..?> "GeolocationFormat")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TimeZone")
+            Prelude.<*> (x Data..?> "TimestampFormat")
+            Prelude.<*> (x Data..?> "UseGeolocationForTimeZone")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDatasetImportJob where
+  hashWithSalt _salt DescribeDatasetImportJob' {..} =
+    _salt `Prelude.hashWithSalt` datasetImportJobArn
+
+instance Prelude.NFData DescribeDatasetImportJob where
+  rnf DescribeDatasetImportJob' {..} =
+    Prelude.rnf datasetImportJobArn
+
+instance Data.ToHeaders DescribeDatasetImportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeDatasetImportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeDatasetImportJob where
+  toJSON DescribeDatasetImportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DatasetImportJobArn" Data..= datasetImportJobArn)
+          ]
+      )
+
+instance Data.ToPath DescribeDatasetImportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeDatasetImportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDatasetImportJobResponse' smart constructor.
+data DescribeDatasetImportJobResponse = DescribeDatasetImportJobResponse'
+  { -- | When the dataset import job was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The size of the dataset in gigabytes (GB) after the import job has
+    -- finished.
+    dataSize :: Prelude.Maybe Prelude.Double,
+    -- | The location of the training data to import and an AWS Identity and
+    -- Access Management (IAM) role that Amazon Forecast can assume to access
+    -- the data.
+    --
+    -- If encryption is used, @DataSource@ includes an AWS Key Management
+    -- Service (KMS) key.
+    dataSource :: Prelude.Maybe DataSource,
+    -- | The Amazon Resource Name (ARN) of the dataset that the training data was
+    -- imported to.
+    datasetArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the dataset import job.
+    datasetImportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the dataset import job.
+    datasetImportJobName :: Prelude.Maybe Prelude.Text,
+    -- | The estimated time remaining in minutes for the dataset import job to
+    -- complete.
+    estimatedTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | Statistical information about each field in the input data.
+    fieldStatistics :: Prelude.Maybe (Prelude.HashMap Prelude.Text Statistics),
+    -- | The format of the imported data, CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The format of the geolocation attribute. Valid Values:@\"LAT_LONG\"@ and
+    -- @\"CC_POSTALCODE\"@.
+    geolocationFormat :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the dataset import job. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The single time zone applied to every item in the dataset
+    timeZone :: Prelude.Maybe Prelude.Text,
+    -- | The format of timestamps in the dataset. The format that you specify
+    -- depends on the @DataFrequency@ specified when the dataset was created.
+    -- The following formats are supported
+    --
+    -- -   \"yyyy-MM-dd\"
+    --
+    --     For the following data frequencies: Y, M, W, and D
+    --
+    -- -   \"yyyy-MM-dd HH:mm:ss\"
+    --
+    --     For the following data frequencies: H, 30min, 15min, and 1min; and
+    --     optionally, for: Y, M, W, and D
+    timestampFormat :: Prelude.Maybe Prelude.Text,
+    -- | Whether @TimeZone@ is automatically derived from the geolocation
+    -- attribute.
+    useGeolocationForTimeZone :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDatasetImportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeDatasetImportJobResponse_creationTime' - When the dataset import job was created.
+--
+-- 'dataSize', 'describeDatasetImportJobResponse_dataSize' - The size of the dataset in gigabytes (GB) after the import job has
+-- finished.
+--
+-- 'dataSource', 'describeDatasetImportJobResponse_dataSource' - The location of the training data to import and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the data.
+--
+-- If encryption is used, @DataSource@ includes an AWS Key Management
+-- Service (KMS) key.
+--
+-- 'datasetArn', 'describeDatasetImportJobResponse_datasetArn' - The Amazon Resource Name (ARN) of the dataset that the training data was
+-- imported to.
+--
+-- 'datasetImportJobArn', 'describeDatasetImportJobResponse_datasetImportJobArn' - The ARN of the dataset import job.
+--
+-- 'datasetImportJobName', 'describeDatasetImportJobResponse_datasetImportJobName' - The name of the dataset import job.
+--
+-- 'estimatedTimeRemainingInMinutes', 'describeDatasetImportJobResponse_estimatedTimeRemainingInMinutes' - The estimated time remaining in minutes for the dataset import job to
+-- complete.
+--
+-- 'fieldStatistics', 'describeDatasetImportJobResponse_fieldStatistics' - Statistical information about each field in the input data.
+--
+-- 'format', 'describeDatasetImportJobResponse_format' - The format of the imported data, CSV or PARQUET.
+--
+-- 'geolocationFormat', 'describeDatasetImportJobResponse_geolocationFormat' - The format of the geolocation attribute. Valid Values:@\"LAT_LONG\"@ and
+-- @\"CC_POSTALCODE\"@.
+--
+-- 'lastModificationTime', 'describeDatasetImportJobResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeDatasetImportJobResponse_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'describeDatasetImportJobResponse_status' - The status of the dataset import job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- 'timeZone', 'describeDatasetImportJobResponse_timeZone' - The single time zone applied to every item in the dataset
+--
+-- 'timestampFormat', 'describeDatasetImportJobResponse_timestampFormat' - The format of timestamps in the dataset. The format that you specify
+-- depends on the @DataFrequency@ specified when the dataset was created.
+-- The following formats are supported
+--
+-- -   \"yyyy-MM-dd\"
+--
+--     For the following data frequencies: Y, M, W, and D
+--
+-- -   \"yyyy-MM-dd HH:mm:ss\"
+--
+--     For the following data frequencies: H, 30min, 15min, and 1min; and
+--     optionally, for: Y, M, W, and D
+--
+-- 'useGeolocationForTimeZone', 'describeDatasetImportJobResponse_useGeolocationForTimeZone' - Whether @TimeZone@ is automatically derived from the geolocation
+-- attribute.
+--
+-- 'httpStatus', 'describeDatasetImportJobResponse_httpStatus' - The response's http status code.
+newDescribeDatasetImportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDatasetImportJobResponse
+newDescribeDatasetImportJobResponse pHttpStatus_ =
+  DescribeDatasetImportJobResponse'
+    { creationTime =
+        Prelude.Nothing,
+      dataSize = Prelude.Nothing,
+      dataSource = Prelude.Nothing,
+      datasetArn = Prelude.Nothing,
+      datasetImportJobArn = Prelude.Nothing,
+      datasetImportJobName = Prelude.Nothing,
+      estimatedTimeRemainingInMinutes =
+        Prelude.Nothing,
+      fieldStatistics = Prelude.Nothing,
+      format = Prelude.Nothing,
+      geolocationFormat = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      timeZone = Prelude.Nothing,
+      timestampFormat = Prelude.Nothing,
+      useGeolocationForTimeZone =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the dataset import job was created.
+describeDatasetImportJobResponse_creationTime :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeDatasetImportJobResponse_creationTime = Lens.lens (\DescribeDatasetImportJobResponse' {creationTime} -> creationTime) (\s@DescribeDatasetImportJobResponse' {} a -> s {creationTime = a} :: DescribeDatasetImportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The size of the dataset in gigabytes (GB) after the import job has
+-- finished.
+describeDatasetImportJobResponse_dataSize :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Double)
+describeDatasetImportJobResponse_dataSize = Lens.lens (\DescribeDatasetImportJobResponse' {dataSize} -> dataSize) (\s@DescribeDatasetImportJobResponse' {} a -> s {dataSize = a} :: DescribeDatasetImportJobResponse)
+
+-- | The location of the training data to import and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the data.
+--
+-- If encryption is used, @DataSource@ includes an AWS Key Management
+-- Service (KMS) key.
+describeDatasetImportJobResponse_dataSource :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe DataSource)
+describeDatasetImportJobResponse_dataSource = Lens.lens (\DescribeDatasetImportJobResponse' {dataSource} -> dataSource) (\s@DescribeDatasetImportJobResponse' {} a -> s {dataSource = a} :: DescribeDatasetImportJobResponse)
+
+-- | The Amazon Resource Name (ARN) of the dataset that the training data was
+-- imported to.
+describeDatasetImportJobResponse_datasetArn :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_datasetArn = Lens.lens (\DescribeDatasetImportJobResponse' {datasetArn} -> datasetArn) (\s@DescribeDatasetImportJobResponse' {} a -> s {datasetArn = a} :: DescribeDatasetImportJobResponse)
+
+-- | The ARN of the dataset import job.
+describeDatasetImportJobResponse_datasetImportJobArn :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_datasetImportJobArn = Lens.lens (\DescribeDatasetImportJobResponse' {datasetImportJobArn} -> datasetImportJobArn) (\s@DescribeDatasetImportJobResponse' {} a -> s {datasetImportJobArn = a} :: DescribeDatasetImportJobResponse)
+
+-- | The name of the dataset import job.
+describeDatasetImportJobResponse_datasetImportJobName :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_datasetImportJobName = Lens.lens (\DescribeDatasetImportJobResponse' {datasetImportJobName} -> datasetImportJobName) (\s@DescribeDatasetImportJobResponse' {} a -> s {datasetImportJobName = a} :: DescribeDatasetImportJobResponse)
+
+-- | The estimated time remaining in minutes for the dataset import job to
+-- complete.
+describeDatasetImportJobResponse_estimatedTimeRemainingInMinutes :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Integer)
+describeDatasetImportJobResponse_estimatedTimeRemainingInMinutes = Lens.lens (\DescribeDatasetImportJobResponse' {estimatedTimeRemainingInMinutes} -> estimatedTimeRemainingInMinutes) (\s@DescribeDatasetImportJobResponse' {} a -> s {estimatedTimeRemainingInMinutes = a} :: DescribeDatasetImportJobResponse)
+
+-- | Statistical information about each field in the input data.
+describeDatasetImportJobResponse_fieldStatistics :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Statistics))
+describeDatasetImportJobResponse_fieldStatistics = Lens.lens (\DescribeDatasetImportJobResponse' {fieldStatistics} -> fieldStatistics) (\s@DescribeDatasetImportJobResponse' {} a -> s {fieldStatistics = a} :: DescribeDatasetImportJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The format of the imported data, CSV or PARQUET.
+describeDatasetImportJobResponse_format :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_format = Lens.lens (\DescribeDatasetImportJobResponse' {format} -> format) (\s@DescribeDatasetImportJobResponse' {} a -> s {format = a} :: DescribeDatasetImportJobResponse)
+
+-- | The format of the geolocation attribute. Valid Values:@\"LAT_LONG\"@ and
+-- @\"CC_POSTALCODE\"@.
+describeDatasetImportJobResponse_geolocationFormat :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_geolocationFormat = Lens.lens (\DescribeDatasetImportJobResponse' {geolocationFormat} -> geolocationFormat) (\s@DescribeDatasetImportJobResponse' {} a -> s {geolocationFormat = a} :: DescribeDatasetImportJobResponse)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeDatasetImportJobResponse_lastModificationTime :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeDatasetImportJobResponse_lastModificationTime = Lens.lens (\DescribeDatasetImportJobResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeDatasetImportJobResponse' {} a -> s {lastModificationTime = a} :: DescribeDatasetImportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+describeDatasetImportJobResponse_message :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_message = Lens.lens (\DescribeDatasetImportJobResponse' {message} -> message) (\s@DescribeDatasetImportJobResponse' {} a -> s {message = a} :: DescribeDatasetImportJobResponse)
+
+-- | The status of the dataset import job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+describeDatasetImportJobResponse_status :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_status = Lens.lens (\DescribeDatasetImportJobResponse' {status} -> status) (\s@DescribeDatasetImportJobResponse' {} a -> s {status = a} :: DescribeDatasetImportJobResponse)
+
+-- | The single time zone applied to every item in the dataset
+describeDatasetImportJobResponse_timeZone :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_timeZone = Lens.lens (\DescribeDatasetImportJobResponse' {timeZone} -> timeZone) (\s@DescribeDatasetImportJobResponse' {} a -> s {timeZone = a} :: DescribeDatasetImportJobResponse)
+
+-- | The format of timestamps in the dataset. The format that you specify
+-- depends on the @DataFrequency@ specified when the dataset was created.
+-- The following formats are supported
+--
+-- -   \"yyyy-MM-dd\"
+--
+--     For the following data frequencies: Y, M, W, and D
+--
+-- -   \"yyyy-MM-dd HH:mm:ss\"
+--
+--     For the following data frequencies: H, 30min, 15min, and 1min; and
+--     optionally, for: Y, M, W, and D
+describeDatasetImportJobResponse_timestampFormat :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Text)
+describeDatasetImportJobResponse_timestampFormat = Lens.lens (\DescribeDatasetImportJobResponse' {timestampFormat} -> timestampFormat) (\s@DescribeDatasetImportJobResponse' {} a -> s {timestampFormat = a} :: DescribeDatasetImportJobResponse)
+
+-- | Whether @TimeZone@ is automatically derived from the geolocation
+-- attribute.
+describeDatasetImportJobResponse_useGeolocationForTimeZone :: Lens.Lens' DescribeDatasetImportJobResponse (Prelude.Maybe Prelude.Bool)
+describeDatasetImportJobResponse_useGeolocationForTimeZone = Lens.lens (\DescribeDatasetImportJobResponse' {useGeolocationForTimeZone} -> useGeolocationForTimeZone) (\s@DescribeDatasetImportJobResponse' {} a -> s {useGeolocationForTimeZone = a} :: DescribeDatasetImportJobResponse)
+
+-- | The response's http status code.
+describeDatasetImportJobResponse_httpStatus :: Lens.Lens' DescribeDatasetImportJobResponse Prelude.Int
+describeDatasetImportJobResponse_httpStatus = Lens.lens (\DescribeDatasetImportJobResponse' {httpStatus} -> httpStatus) (\s@DescribeDatasetImportJobResponse' {} a -> s {httpStatus = a} :: DescribeDatasetImportJobResponse)
+
+instance
+  Prelude.NFData
+    DescribeDatasetImportJobResponse
+  where
+  rnf DescribeDatasetImportJobResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataSize
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf datasetArn
+      `Prelude.seq` Prelude.rnf datasetImportJobArn
+      `Prelude.seq` Prelude.rnf datasetImportJobName
+      `Prelude.seq` Prelude.rnf estimatedTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf fieldStatistics
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf geolocationFormat
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf timeZone
+      `Prelude.seq` Prelude.rnf timestampFormat
+      `Prelude.seq` Prelude.rnf useGeolocationForTimeZone
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeExplainability.hs b/gen/Amazonka/Forecast/DescribeExplainability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeExplainability.hs
@@ -0,0 +1,405 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeExplainability
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an Explainability resource created using the
+-- CreateExplainability operation.
+module Amazonka.Forecast.DescribeExplainability
+  ( -- * Creating a Request
+    DescribeExplainability (..),
+    newDescribeExplainability,
+
+    -- * Request Lenses
+    describeExplainability_explainabilityArn,
+
+    -- * Destructuring the Response
+    DescribeExplainabilityResponse (..),
+    newDescribeExplainabilityResponse,
+
+    -- * Response Lenses
+    describeExplainabilityResponse_creationTime,
+    describeExplainabilityResponse_dataSource,
+    describeExplainabilityResponse_enableVisualization,
+    describeExplainabilityResponse_endDateTime,
+    describeExplainabilityResponse_estimatedTimeRemainingInMinutes,
+    describeExplainabilityResponse_explainabilityArn,
+    describeExplainabilityResponse_explainabilityConfig,
+    describeExplainabilityResponse_explainabilityName,
+    describeExplainabilityResponse_lastModificationTime,
+    describeExplainabilityResponse_message,
+    describeExplainabilityResponse_resourceArn,
+    describeExplainabilityResponse_schema,
+    describeExplainabilityResponse_startDateTime,
+    describeExplainabilityResponse_status,
+    describeExplainabilityResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeExplainability' smart constructor.
+data DescribeExplainability = DescribeExplainability'
+  { -- | The Amazon Resource Name (ARN) of the Explaianability to describe.
+    explainabilityArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExplainability' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilityArn', 'describeExplainability_explainabilityArn' - The Amazon Resource Name (ARN) of the Explaianability to describe.
+newDescribeExplainability ::
+  -- | 'explainabilityArn'
+  Prelude.Text ->
+  DescribeExplainability
+newDescribeExplainability pExplainabilityArn_ =
+  DescribeExplainability'
+    { explainabilityArn =
+        pExplainabilityArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the Explaianability to describe.
+describeExplainability_explainabilityArn :: Lens.Lens' DescribeExplainability Prelude.Text
+describeExplainability_explainabilityArn = Lens.lens (\DescribeExplainability' {explainabilityArn} -> explainabilityArn) (\s@DescribeExplainability' {} a -> s {explainabilityArn = a} :: DescribeExplainability)
+
+instance Core.AWSRequest DescribeExplainability where
+  type
+    AWSResponse DescribeExplainability =
+      DescribeExplainabilityResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeExplainabilityResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DataSource")
+            Prelude.<*> (x Data..?> "EnableVisualization")
+            Prelude.<*> (x Data..?> "EndDateTime")
+            Prelude.<*> (x Data..?> "EstimatedTimeRemainingInMinutes")
+            Prelude.<*> (x Data..?> "ExplainabilityArn")
+            Prelude.<*> (x Data..?> "ExplainabilityConfig")
+            Prelude.<*> (x Data..?> "ExplainabilityName")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "Schema")
+            Prelude.<*> (x Data..?> "StartDateTime")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeExplainability where
+  hashWithSalt _salt DescribeExplainability' {..} =
+    _salt `Prelude.hashWithSalt` explainabilityArn
+
+instance Prelude.NFData DescribeExplainability where
+  rnf DescribeExplainability' {..} =
+    Prelude.rnf explainabilityArn
+
+instance Data.ToHeaders DescribeExplainability where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeExplainability" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeExplainability where
+  toJSON DescribeExplainability' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("ExplainabilityArn" Data..= explainabilityArn)
+          ]
+      )
+
+instance Data.ToPath DescribeExplainability where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeExplainability where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeExplainabilityResponse' smart constructor.
+data DescribeExplainabilityResponse = DescribeExplainabilityResponse'
+  { -- | When the Explainability resource was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    dataSource :: Prelude.Maybe DataSource,
+    -- | Whether the visualization was enabled for the Explainability resource.
+    enableVisualization :: Prelude.Maybe Prelude.Bool,
+    -- | If @TimePointGranularity@ is set to @SPECIFIC@, the last time point in
+    -- the Explainability.
+    endDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The estimated time remaining in minutes for the CreateExplainability job
+    -- to complete.
+    estimatedTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | The Amazon Resource Name (ARN) of the Explainability.
+    explainabilityArn :: Prelude.Maybe Prelude.Text,
+    -- | The configuration settings that define the granularity of time series
+    -- and time points for the Explainability.
+    explainabilityConfig :: Prelude.Maybe ExplainabilityConfig,
+    -- | The name of the Explainability.
+    explainabilityName :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, a message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+    -- create the Explainability resource.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    schema :: Prelude.Maybe Schema,
+    -- | If @TimePointGranularity@ is set to @SPECIFIC@, the first time point in
+    -- the Explainability.
+    startDateTime :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Explainability resource. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExplainabilityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeExplainabilityResponse_creationTime' - When the Explainability resource was created.
+--
+-- 'dataSource', 'describeExplainabilityResponse_dataSource' - Undocumented member.
+--
+-- 'enableVisualization', 'describeExplainabilityResponse_enableVisualization' - Whether the visualization was enabled for the Explainability resource.
+--
+-- 'endDateTime', 'describeExplainabilityResponse_endDateTime' - If @TimePointGranularity@ is set to @SPECIFIC@, the last time point in
+-- the Explainability.
+--
+-- 'estimatedTimeRemainingInMinutes', 'describeExplainabilityResponse_estimatedTimeRemainingInMinutes' - The estimated time remaining in minutes for the CreateExplainability job
+-- to complete.
+--
+-- 'explainabilityArn', 'describeExplainabilityResponse_explainabilityArn' - The Amazon Resource Name (ARN) of the Explainability.
+--
+-- 'explainabilityConfig', 'describeExplainabilityResponse_explainabilityConfig' - The configuration settings that define the granularity of time series
+-- and time points for the Explainability.
+--
+-- 'explainabilityName', 'describeExplainabilityResponse_explainabilityName' - The name of the Explainability.
+--
+-- 'lastModificationTime', 'describeExplainabilityResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeExplainabilityResponse_message' - If an error occurred, a message about the error.
+--
+-- 'resourceArn', 'describeExplainabilityResponse_resourceArn' - The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+-- create the Explainability resource.
+--
+-- 'schema', 'describeExplainabilityResponse_schema' - Undocumented member.
+--
+-- 'startDateTime', 'describeExplainabilityResponse_startDateTime' - If @TimePointGranularity@ is set to @SPECIFIC@, the first time point in
+-- the Explainability.
+--
+-- 'status', 'describeExplainabilityResponse_status' - The status of the Explainability resource. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- 'httpStatus', 'describeExplainabilityResponse_httpStatus' - The response's http status code.
+newDescribeExplainabilityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeExplainabilityResponse
+newDescribeExplainabilityResponse pHttpStatus_ =
+  DescribeExplainabilityResponse'
+    { creationTime =
+        Prelude.Nothing,
+      dataSource = Prelude.Nothing,
+      enableVisualization = Prelude.Nothing,
+      endDateTime = Prelude.Nothing,
+      estimatedTimeRemainingInMinutes =
+        Prelude.Nothing,
+      explainabilityArn = Prelude.Nothing,
+      explainabilityConfig = Prelude.Nothing,
+      explainabilityName = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      schema = Prelude.Nothing,
+      startDateTime = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the Explainability resource was created.
+describeExplainabilityResponse_creationTime :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.UTCTime)
+describeExplainabilityResponse_creationTime = Lens.lens (\DescribeExplainabilityResponse' {creationTime} -> creationTime) (\s@DescribeExplainabilityResponse' {} a -> s {creationTime = a} :: DescribeExplainabilityResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+describeExplainabilityResponse_dataSource :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe DataSource)
+describeExplainabilityResponse_dataSource = Lens.lens (\DescribeExplainabilityResponse' {dataSource} -> dataSource) (\s@DescribeExplainabilityResponse' {} a -> s {dataSource = a} :: DescribeExplainabilityResponse)
+
+-- | Whether the visualization was enabled for the Explainability resource.
+describeExplainabilityResponse_enableVisualization :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Bool)
+describeExplainabilityResponse_enableVisualization = Lens.lens (\DescribeExplainabilityResponse' {enableVisualization} -> enableVisualization) (\s@DescribeExplainabilityResponse' {} a -> s {enableVisualization = a} :: DescribeExplainabilityResponse)
+
+-- | If @TimePointGranularity@ is set to @SPECIFIC@, the last time point in
+-- the Explainability.
+describeExplainabilityResponse_endDateTime :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityResponse_endDateTime = Lens.lens (\DescribeExplainabilityResponse' {endDateTime} -> endDateTime) (\s@DescribeExplainabilityResponse' {} a -> s {endDateTime = a} :: DescribeExplainabilityResponse)
+
+-- | The estimated time remaining in minutes for the CreateExplainability job
+-- to complete.
+describeExplainabilityResponse_estimatedTimeRemainingInMinutes :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Integer)
+describeExplainabilityResponse_estimatedTimeRemainingInMinutes = Lens.lens (\DescribeExplainabilityResponse' {estimatedTimeRemainingInMinutes} -> estimatedTimeRemainingInMinutes) (\s@DescribeExplainabilityResponse' {} a -> s {estimatedTimeRemainingInMinutes = a} :: DescribeExplainabilityResponse)
+
+-- | The Amazon Resource Name (ARN) of the Explainability.
+describeExplainabilityResponse_explainabilityArn :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityResponse_explainabilityArn = Lens.lens (\DescribeExplainabilityResponse' {explainabilityArn} -> explainabilityArn) (\s@DescribeExplainabilityResponse' {} a -> s {explainabilityArn = a} :: DescribeExplainabilityResponse)
+
+-- | The configuration settings that define the granularity of time series
+-- and time points for the Explainability.
+describeExplainabilityResponse_explainabilityConfig :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe ExplainabilityConfig)
+describeExplainabilityResponse_explainabilityConfig = Lens.lens (\DescribeExplainabilityResponse' {explainabilityConfig} -> explainabilityConfig) (\s@DescribeExplainabilityResponse' {} a -> s {explainabilityConfig = a} :: DescribeExplainabilityResponse)
+
+-- | The name of the Explainability.
+describeExplainabilityResponse_explainabilityName :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityResponse_explainabilityName = Lens.lens (\DescribeExplainabilityResponse' {explainabilityName} -> explainabilityName) (\s@DescribeExplainabilityResponse' {} a -> s {explainabilityName = a} :: DescribeExplainabilityResponse)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeExplainabilityResponse_lastModificationTime :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.UTCTime)
+describeExplainabilityResponse_lastModificationTime = Lens.lens (\DescribeExplainabilityResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeExplainabilityResponse' {} a -> s {lastModificationTime = a} :: DescribeExplainabilityResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, a message about the error.
+describeExplainabilityResponse_message :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityResponse_message = Lens.lens (\DescribeExplainabilityResponse' {message} -> message) (\s@DescribeExplainabilityResponse' {} a -> s {message = a} :: DescribeExplainabilityResponse)
+
+-- | The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+-- create the Explainability resource.
+describeExplainabilityResponse_resourceArn :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityResponse_resourceArn = Lens.lens (\DescribeExplainabilityResponse' {resourceArn} -> resourceArn) (\s@DescribeExplainabilityResponse' {} a -> s {resourceArn = a} :: DescribeExplainabilityResponse)
+
+-- | Undocumented member.
+describeExplainabilityResponse_schema :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Schema)
+describeExplainabilityResponse_schema = Lens.lens (\DescribeExplainabilityResponse' {schema} -> schema) (\s@DescribeExplainabilityResponse' {} a -> s {schema = a} :: DescribeExplainabilityResponse)
+
+-- | If @TimePointGranularity@ is set to @SPECIFIC@, the first time point in
+-- the Explainability.
+describeExplainabilityResponse_startDateTime :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityResponse_startDateTime = Lens.lens (\DescribeExplainabilityResponse' {startDateTime} -> startDateTime) (\s@DescribeExplainabilityResponse' {} a -> s {startDateTime = a} :: DescribeExplainabilityResponse)
+
+-- | The status of the Explainability resource. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+describeExplainabilityResponse_status :: Lens.Lens' DescribeExplainabilityResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityResponse_status = Lens.lens (\DescribeExplainabilityResponse' {status} -> status) (\s@DescribeExplainabilityResponse' {} a -> s {status = a} :: DescribeExplainabilityResponse)
+
+-- | The response's http status code.
+describeExplainabilityResponse_httpStatus :: Lens.Lens' DescribeExplainabilityResponse Prelude.Int
+describeExplainabilityResponse_httpStatus = Lens.lens (\DescribeExplainabilityResponse' {httpStatus} -> httpStatus) (\s@DescribeExplainabilityResponse' {} a -> s {httpStatus = a} :: DescribeExplainabilityResponse)
+
+instance
+  Prelude.NFData
+    DescribeExplainabilityResponse
+  where
+  rnf DescribeExplainabilityResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf enableVisualization
+      `Prelude.seq` Prelude.rnf endDateTime
+      `Prelude.seq` Prelude.rnf estimatedTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf explainabilityArn
+      `Prelude.seq` Prelude.rnf explainabilityConfig
+      `Prelude.seq` Prelude.rnf explainabilityName
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf schema
+      `Prelude.seq` Prelude.rnf startDateTime
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeExplainabilityExport.hs b/gen/Amazonka/Forecast/DescribeExplainabilityExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeExplainabilityExport.hs
@@ -0,0 +1,340 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeExplainabilityExport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an Explainability export created using the
+-- CreateExplainabilityExport operation.
+module Amazonka.Forecast.DescribeExplainabilityExport
+  ( -- * Creating a Request
+    DescribeExplainabilityExport (..),
+    newDescribeExplainabilityExport,
+
+    -- * Request Lenses
+    describeExplainabilityExport_explainabilityExportArn,
+
+    -- * Destructuring the Response
+    DescribeExplainabilityExportResponse (..),
+    newDescribeExplainabilityExportResponse,
+
+    -- * Response Lenses
+    describeExplainabilityExportResponse_creationTime,
+    describeExplainabilityExportResponse_destination,
+    describeExplainabilityExportResponse_explainabilityArn,
+    describeExplainabilityExportResponse_explainabilityExportArn,
+    describeExplainabilityExportResponse_explainabilityExportName,
+    describeExplainabilityExportResponse_format,
+    describeExplainabilityExportResponse_lastModificationTime,
+    describeExplainabilityExportResponse_message,
+    describeExplainabilityExportResponse_status,
+    describeExplainabilityExportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeExplainabilityExport' smart constructor.
+data DescribeExplainabilityExport = DescribeExplainabilityExport'
+  { -- | The Amazon Resource Name (ARN) of the Explainability export.
+    explainabilityExportArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExplainabilityExport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilityExportArn', 'describeExplainabilityExport_explainabilityExportArn' - The Amazon Resource Name (ARN) of the Explainability export.
+newDescribeExplainabilityExport ::
+  -- | 'explainabilityExportArn'
+  Prelude.Text ->
+  DescribeExplainabilityExport
+newDescribeExplainabilityExport
+  pExplainabilityExportArn_ =
+    DescribeExplainabilityExport'
+      { explainabilityExportArn =
+          pExplainabilityExportArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the Explainability export.
+describeExplainabilityExport_explainabilityExportArn :: Lens.Lens' DescribeExplainabilityExport Prelude.Text
+describeExplainabilityExport_explainabilityExportArn = Lens.lens (\DescribeExplainabilityExport' {explainabilityExportArn} -> explainabilityExportArn) (\s@DescribeExplainabilityExport' {} a -> s {explainabilityExportArn = a} :: DescribeExplainabilityExport)
+
+instance Core.AWSRequest DescribeExplainabilityExport where
+  type
+    AWSResponse DescribeExplainabilityExport =
+      DescribeExplainabilityExportResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeExplainabilityExportResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "Destination")
+            Prelude.<*> (x Data..?> "ExplainabilityArn")
+            Prelude.<*> (x Data..?> "ExplainabilityExportArn")
+            Prelude.<*> (x Data..?> "ExplainabilityExportName")
+            Prelude.<*> (x Data..?> "Format")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeExplainabilityExport
+  where
+  hashWithSalt _salt DescribeExplainabilityExport' {..} =
+    _salt
+      `Prelude.hashWithSalt` explainabilityExportArn
+
+instance Prelude.NFData DescribeExplainabilityExport where
+  rnf DescribeExplainabilityExport' {..} =
+    Prelude.rnf explainabilityExportArn
+
+instance Data.ToHeaders DescribeExplainabilityExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeExplainabilityExport" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeExplainabilityExport where
+  toJSON DescribeExplainabilityExport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ExplainabilityExportArn"
+                  Data..= explainabilityExportArn
+              )
+          ]
+      )
+
+instance Data.ToPath DescribeExplainabilityExport where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeExplainabilityExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeExplainabilityExportResponse' smart constructor.
+data DescribeExplainabilityExportResponse = DescribeExplainabilityExportResponse'
+  { -- | When the Explainability export was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    destination :: Prelude.Maybe DataDestination,
+    -- | The Amazon Resource Name (ARN) of the Explainability export.
+    explainabilityArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Explainability export.
+    explainabilityExportArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Explainability export.
+    explainabilityExportName :: Prelude.Maybe Prelude.Text,
+    -- | The format of the exported data, CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | Information about any errors that occurred during the export.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Explainability export. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExplainabilityExportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeExplainabilityExportResponse_creationTime' - When the Explainability export was created.
+--
+-- 'destination', 'describeExplainabilityExportResponse_destination' - Undocumented member.
+--
+-- 'explainabilityArn', 'describeExplainabilityExportResponse_explainabilityArn' - The Amazon Resource Name (ARN) of the Explainability export.
+--
+-- 'explainabilityExportArn', 'describeExplainabilityExportResponse_explainabilityExportArn' - The Amazon Resource Name (ARN) of the Explainability export.
+--
+-- 'explainabilityExportName', 'describeExplainabilityExportResponse_explainabilityExportName' - The name of the Explainability export.
+--
+-- 'format', 'describeExplainabilityExportResponse_format' - The format of the exported data, CSV or PARQUET.
+--
+-- 'lastModificationTime', 'describeExplainabilityExportResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeExplainabilityExportResponse_message' - Information about any errors that occurred during the export.
+--
+-- 'status', 'describeExplainabilityExportResponse_status' - The status of the Explainability export. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- 'httpStatus', 'describeExplainabilityExportResponse_httpStatus' - The response's http status code.
+newDescribeExplainabilityExportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeExplainabilityExportResponse
+newDescribeExplainabilityExportResponse pHttpStatus_ =
+  DescribeExplainabilityExportResponse'
+    { creationTime =
+        Prelude.Nothing,
+      destination = Prelude.Nothing,
+      explainabilityArn = Prelude.Nothing,
+      explainabilityExportArn =
+        Prelude.Nothing,
+      explainabilityExportName =
+        Prelude.Nothing,
+      format = Prelude.Nothing,
+      lastModificationTime =
+        Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the Explainability export was created.
+describeExplainabilityExportResponse_creationTime :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe Prelude.UTCTime)
+describeExplainabilityExportResponse_creationTime = Lens.lens (\DescribeExplainabilityExportResponse' {creationTime} -> creationTime) (\s@DescribeExplainabilityExportResponse' {} a -> s {creationTime = a} :: DescribeExplainabilityExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+describeExplainabilityExportResponse_destination :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe DataDestination)
+describeExplainabilityExportResponse_destination = Lens.lens (\DescribeExplainabilityExportResponse' {destination} -> destination) (\s@DescribeExplainabilityExportResponse' {} a -> s {destination = a} :: DescribeExplainabilityExportResponse)
+
+-- | The Amazon Resource Name (ARN) of the Explainability export.
+describeExplainabilityExportResponse_explainabilityArn :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityExportResponse_explainabilityArn = Lens.lens (\DescribeExplainabilityExportResponse' {explainabilityArn} -> explainabilityArn) (\s@DescribeExplainabilityExportResponse' {} a -> s {explainabilityArn = a} :: DescribeExplainabilityExportResponse)
+
+-- | The Amazon Resource Name (ARN) of the Explainability export.
+describeExplainabilityExportResponse_explainabilityExportArn :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityExportResponse_explainabilityExportArn = Lens.lens (\DescribeExplainabilityExportResponse' {explainabilityExportArn} -> explainabilityExportArn) (\s@DescribeExplainabilityExportResponse' {} a -> s {explainabilityExportArn = a} :: DescribeExplainabilityExportResponse)
+
+-- | The name of the Explainability export.
+describeExplainabilityExportResponse_explainabilityExportName :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityExportResponse_explainabilityExportName = Lens.lens (\DescribeExplainabilityExportResponse' {explainabilityExportName} -> explainabilityExportName) (\s@DescribeExplainabilityExportResponse' {} a -> s {explainabilityExportName = a} :: DescribeExplainabilityExportResponse)
+
+-- | The format of the exported data, CSV or PARQUET.
+describeExplainabilityExportResponse_format :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityExportResponse_format = Lens.lens (\DescribeExplainabilityExportResponse' {format} -> format) (\s@DescribeExplainabilityExportResponse' {} a -> s {format = a} :: DescribeExplainabilityExportResponse)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeExplainabilityExportResponse_lastModificationTime :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe Prelude.UTCTime)
+describeExplainabilityExportResponse_lastModificationTime = Lens.lens (\DescribeExplainabilityExportResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeExplainabilityExportResponse' {} a -> s {lastModificationTime = a} :: DescribeExplainabilityExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Information about any errors that occurred during the export.
+describeExplainabilityExportResponse_message :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityExportResponse_message = Lens.lens (\DescribeExplainabilityExportResponse' {message} -> message) (\s@DescribeExplainabilityExportResponse' {} a -> s {message = a} :: DescribeExplainabilityExportResponse)
+
+-- | The status of the Explainability export. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+describeExplainabilityExportResponse_status :: Lens.Lens' DescribeExplainabilityExportResponse (Prelude.Maybe Prelude.Text)
+describeExplainabilityExportResponse_status = Lens.lens (\DescribeExplainabilityExportResponse' {status} -> status) (\s@DescribeExplainabilityExportResponse' {} a -> s {status = a} :: DescribeExplainabilityExportResponse)
+
+-- | The response's http status code.
+describeExplainabilityExportResponse_httpStatus :: Lens.Lens' DescribeExplainabilityExportResponse Prelude.Int
+describeExplainabilityExportResponse_httpStatus = Lens.lens (\DescribeExplainabilityExportResponse' {httpStatus} -> httpStatus) (\s@DescribeExplainabilityExportResponse' {} a -> s {httpStatus = a} :: DescribeExplainabilityExportResponse)
+
+instance
+  Prelude.NFData
+    DescribeExplainabilityExportResponse
+  where
+  rnf DescribeExplainabilityExportResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf explainabilityArn
+      `Prelude.seq` Prelude.rnf explainabilityExportArn
+      `Prelude.seq` Prelude.rnf explainabilityExportName
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeForecast.hs b/gen/Amazonka/Forecast/DescribeForecast.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeForecast.hs
@@ -0,0 +1,374 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeForecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a forecast created using the CreateForecast operation.
+--
+-- In addition to listing the properties provided in the @CreateForecast@
+-- request, this operation lists the following properties:
+--
+-- -   @DatasetGroupArn@ - The dataset group that provided the training
+--     data.
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Status@
+--
+-- -   @Message@ - If an error occurred, information about the error.
+module Amazonka.Forecast.DescribeForecast
+  ( -- * Creating a Request
+    DescribeForecast (..),
+    newDescribeForecast,
+
+    -- * Request Lenses
+    describeForecast_forecastArn,
+
+    -- * Destructuring the Response
+    DescribeForecastResponse (..),
+    newDescribeForecastResponse,
+
+    -- * Response Lenses
+    describeForecastResponse_creationTime,
+    describeForecastResponse_datasetGroupArn,
+    describeForecastResponse_estimatedTimeRemainingInMinutes,
+    describeForecastResponse_forecastArn,
+    describeForecastResponse_forecastName,
+    describeForecastResponse_forecastTypes,
+    describeForecastResponse_lastModificationTime,
+    describeForecastResponse_message,
+    describeForecastResponse_predictorArn,
+    describeForecastResponse_status,
+    describeForecastResponse_timeSeriesSelector,
+    describeForecastResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeForecast' smart constructor.
+data DescribeForecast = DescribeForecast'
+  { -- | The Amazon Resource Name (ARN) of the forecast.
+    forecastArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeForecast' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastArn', 'describeForecast_forecastArn' - The Amazon Resource Name (ARN) of the forecast.
+newDescribeForecast ::
+  -- | 'forecastArn'
+  Prelude.Text ->
+  DescribeForecast
+newDescribeForecast pForecastArn_ =
+  DescribeForecast' {forecastArn = pForecastArn_}
+
+-- | The Amazon Resource Name (ARN) of the forecast.
+describeForecast_forecastArn :: Lens.Lens' DescribeForecast Prelude.Text
+describeForecast_forecastArn = Lens.lens (\DescribeForecast' {forecastArn} -> forecastArn) (\s@DescribeForecast' {} a -> s {forecastArn = a} :: DescribeForecast)
+
+instance Core.AWSRequest DescribeForecast where
+  type
+    AWSResponse DescribeForecast =
+      DescribeForecastResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeForecastResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "DatasetGroupArn")
+            Prelude.<*> (x Data..?> "EstimatedTimeRemainingInMinutes")
+            Prelude.<*> (x Data..?> "ForecastArn")
+            Prelude.<*> (x Data..?> "ForecastName")
+            Prelude.<*> (x Data..?> "ForecastTypes")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "PredictorArn")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TimeSeriesSelector")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeForecast where
+  hashWithSalt _salt DescribeForecast' {..} =
+    _salt `Prelude.hashWithSalt` forecastArn
+
+instance Prelude.NFData DescribeForecast where
+  rnf DescribeForecast' {..} = Prelude.rnf forecastArn
+
+instance Data.ToHeaders DescribeForecast where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeForecast" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeForecast where
+  toJSON DescribeForecast' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ForecastArn" Data..= forecastArn)]
+      )
+
+instance Data.ToPath DescribeForecast where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeForecast where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeForecastResponse' smart constructor.
+data DescribeForecastResponse = DescribeForecastResponse'
+  { -- | When the forecast creation task was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ARN of the dataset group that provided the data used to train the
+    -- predictor.
+    datasetGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The estimated time remaining in minutes for the forecast job to
+    -- complete.
+    estimatedTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | The forecast ARN as specified in the request.
+    forecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the forecast.
+    forecastName :: Prelude.Maybe Prelude.Text,
+    -- | The quantiles at which probabilistic forecasts were generated.
+    forecastTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the predictor used to generate the forecast.
+    predictorArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the forecast. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the forecast must be @ACTIVE@ before you can query or
+    -- export the forecast.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The time series to include in the forecast.
+    timeSeriesSelector :: Prelude.Maybe TimeSeriesSelector,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeForecastResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeForecastResponse_creationTime' - When the forecast creation task was created.
+--
+-- 'datasetGroupArn', 'describeForecastResponse_datasetGroupArn' - The ARN of the dataset group that provided the data used to train the
+-- predictor.
+--
+-- 'estimatedTimeRemainingInMinutes', 'describeForecastResponse_estimatedTimeRemainingInMinutes' - The estimated time remaining in minutes for the forecast job to
+-- complete.
+--
+-- 'forecastArn', 'describeForecastResponse_forecastArn' - The forecast ARN as specified in the request.
+--
+-- 'forecastName', 'describeForecastResponse_forecastName' - The name of the forecast.
+--
+-- 'forecastTypes', 'describeForecastResponse_forecastTypes' - The quantiles at which probabilistic forecasts were generated.
+--
+-- 'lastModificationTime', 'describeForecastResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeForecastResponse_message' - If an error occurred, an informational message about the error.
+--
+-- 'predictorArn', 'describeForecastResponse_predictorArn' - The ARN of the predictor used to generate the forecast.
+--
+-- 'status', 'describeForecastResponse_status' - The status of the forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the forecast must be @ACTIVE@ before you can query or
+-- export the forecast.
+--
+-- 'timeSeriesSelector', 'describeForecastResponse_timeSeriesSelector' - The time series to include in the forecast.
+--
+-- 'httpStatus', 'describeForecastResponse_httpStatus' - The response's http status code.
+newDescribeForecastResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeForecastResponse
+newDescribeForecastResponse pHttpStatus_ =
+  DescribeForecastResponse'
+    { creationTime =
+        Prelude.Nothing,
+      datasetGroupArn = Prelude.Nothing,
+      estimatedTimeRemainingInMinutes = Prelude.Nothing,
+      forecastArn = Prelude.Nothing,
+      forecastName = Prelude.Nothing,
+      forecastTypes = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      predictorArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      timeSeriesSelector = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the forecast creation task was created.
+describeForecastResponse_creationTime :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.UTCTime)
+describeForecastResponse_creationTime = Lens.lens (\DescribeForecastResponse' {creationTime} -> creationTime) (\s@DescribeForecastResponse' {} a -> s {creationTime = a} :: DescribeForecastResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the dataset group that provided the data used to train the
+-- predictor.
+describeForecastResponse_datasetGroupArn :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.Text)
+describeForecastResponse_datasetGroupArn = Lens.lens (\DescribeForecastResponse' {datasetGroupArn} -> datasetGroupArn) (\s@DescribeForecastResponse' {} a -> s {datasetGroupArn = a} :: DescribeForecastResponse)
+
+-- | The estimated time remaining in minutes for the forecast job to
+-- complete.
+describeForecastResponse_estimatedTimeRemainingInMinutes :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.Integer)
+describeForecastResponse_estimatedTimeRemainingInMinutes = Lens.lens (\DescribeForecastResponse' {estimatedTimeRemainingInMinutes} -> estimatedTimeRemainingInMinutes) (\s@DescribeForecastResponse' {} a -> s {estimatedTimeRemainingInMinutes = a} :: DescribeForecastResponse)
+
+-- | The forecast ARN as specified in the request.
+describeForecastResponse_forecastArn :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.Text)
+describeForecastResponse_forecastArn = Lens.lens (\DescribeForecastResponse' {forecastArn} -> forecastArn) (\s@DescribeForecastResponse' {} a -> s {forecastArn = a} :: DescribeForecastResponse)
+
+-- | The name of the forecast.
+describeForecastResponse_forecastName :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.Text)
+describeForecastResponse_forecastName = Lens.lens (\DescribeForecastResponse' {forecastName} -> forecastName) (\s@DescribeForecastResponse' {} a -> s {forecastName = a} :: DescribeForecastResponse)
+
+-- | The quantiles at which probabilistic forecasts were generated.
+describeForecastResponse_forecastTypes :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeForecastResponse_forecastTypes = Lens.lens (\DescribeForecastResponse' {forecastTypes} -> forecastTypes) (\s@DescribeForecastResponse' {} a -> s {forecastTypes = a} :: DescribeForecastResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeForecastResponse_lastModificationTime :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.UTCTime)
+describeForecastResponse_lastModificationTime = Lens.lens (\DescribeForecastResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeForecastResponse' {} a -> s {lastModificationTime = a} :: DescribeForecastResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+describeForecastResponse_message :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.Text)
+describeForecastResponse_message = Lens.lens (\DescribeForecastResponse' {message} -> message) (\s@DescribeForecastResponse' {} a -> s {message = a} :: DescribeForecastResponse)
+
+-- | The ARN of the predictor used to generate the forecast.
+describeForecastResponse_predictorArn :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.Text)
+describeForecastResponse_predictorArn = Lens.lens (\DescribeForecastResponse' {predictorArn} -> predictorArn) (\s@DescribeForecastResponse' {} a -> s {predictorArn = a} :: DescribeForecastResponse)
+
+-- | The status of the forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the forecast must be @ACTIVE@ before you can query or
+-- export the forecast.
+describeForecastResponse_status :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe Prelude.Text)
+describeForecastResponse_status = Lens.lens (\DescribeForecastResponse' {status} -> status) (\s@DescribeForecastResponse' {} a -> s {status = a} :: DescribeForecastResponse)
+
+-- | The time series to include in the forecast.
+describeForecastResponse_timeSeriesSelector :: Lens.Lens' DescribeForecastResponse (Prelude.Maybe TimeSeriesSelector)
+describeForecastResponse_timeSeriesSelector = Lens.lens (\DescribeForecastResponse' {timeSeriesSelector} -> timeSeriesSelector) (\s@DescribeForecastResponse' {} a -> s {timeSeriesSelector = a} :: DescribeForecastResponse)
+
+-- | The response's http status code.
+describeForecastResponse_httpStatus :: Lens.Lens' DescribeForecastResponse Prelude.Int
+describeForecastResponse_httpStatus = Lens.lens (\DescribeForecastResponse' {httpStatus} -> httpStatus) (\s@DescribeForecastResponse' {} a -> s {httpStatus = a} :: DescribeForecastResponse)
+
+instance Prelude.NFData DescribeForecastResponse where
+  rnf DescribeForecastResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf datasetGroupArn
+      `Prelude.seq` Prelude.rnf estimatedTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf forecastArn
+      `Prelude.seq` Prelude.rnf forecastName
+      `Prelude.seq` Prelude.rnf forecastTypes
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf timeSeriesSelector
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeForecastExportJob.hs b/gen/Amazonka/Forecast/DescribeForecastExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeForecastExportJob.hs
@@ -0,0 +1,357 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeForecastExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a forecast export job created using the
+-- CreateForecastExportJob operation.
+--
+-- In addition to listing the properties provided by the user in the
+-- @CreateForecastExportJob@ request, this operation lists the following
+-- properties:
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Status@
+--
+-- -   @Message@ - If an error occurred, information about the error.
+module Amazonka.Forecast.DescribeForecastExportJob
+  ( -- * Creating a Request
+    DescribeForecastExportJob (..),
+    newDescribeForecastExportJob,
+
+    -- * Request Lenses
+    describeForecastExportJob_forecastExportJobArn,
+
+    -- * Destructuring the Response
+    DescribeForecastExportJobResponse (..),
+    newDescribeForecastExportJobResponse,
+
+    -- * Response Lenses
+    describeForecastExportJobResponse_creationTime,
+    describeForecastExportJobResponse_destination,
+    describeForecastExportJobResponse_forecastArn,
+    describeForecastExportJobResponse_forecastExportJobArn,
+    describeForecastExportJobResponse_forecastExportJobName,
+    describeForecastExportJobResponse_format,
+    describeForecastExportJobResponse_lastModificationTime,
+    describeForecastExportJobResponse_message,
+    describeForecastExportJobResponse_status,
+    describeForecastExportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeForecastExportJob' smart constructor.
+data DescribeForecastExportJob = DescribeForecastExportJob'
+  { -- | The Amazon Resource Name (ARN) of the forecast export job.
+    forecastExportJobArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeForecastExportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastExportJobArn', 'describeForecastExportJob_forecastExportJobArn' - The Amazon Resource Name (ARN) of the forecast export job.
+newDescribeForecastExportJob ::
+  -- | 'forecastExportJobArn'
+  Prelude.Text ->
+  DescribeForecastExportJob
+newDescribeForecastExportJob pForecastExportJobArn_ =
+  DescribeForecastExportJob'
+    { forecastExportJobArn =
+        pForecastExportJobArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the forecast export job.
+describeForecastExportJob_forecastExportJobArn :: Lens.Lens' DescribeForecastExportJob Prelude.Text
+describeForecastExportJob_forecastExportJobArn = Lens.lens (\DescribeForecastExportJob' {forecastExportJobArn} -> forecastExportJobArn) (\s@DescribeForecastExportJob' {} a -> s {forecastExportJobArn = a} :: DescribeForecastExportJob)
+
+instance Core.AWSRequest DescribeForecastExportJob where
+  type
+    AWSResponse DescribeForecastExportJob =
+      DescribeForecastExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeForecastExportJobResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "Destination")
+            Prelude.<*> (x Data..?> "ForecastArn")
+            Prelude.<*> (x Data..?> "ForecastExportJobArn")
+            Prelude.<*> (x Data..?> "ForecastExportJobName")
+            Prelude.<*> (x Data..?> "Format")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeForecastExportJob where
+  hashWithSalt _salt DescribeForecastExportJob' {..} =
+    _salt `Prelude.hashWithSalt` forecastExportJobArn
+
+instance Prelude.NFData DescribeForecastExportJob where
+  rnf DescribeForecastExportJob' {..} =
+    Prelude.rnf forecastExportJobArn
+
+instance Data.ToHeaders DescribeForecastExportJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeForecastExportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeForecastExportJob where
+  toJSON DescribeForecastExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "ForecastExportJobArn"
+                  Data..= forecastExportJobArn
+              )
+          ]
+      )
+
+instance Data.ToPath DescribeForecastExportJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeForecastExportJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeForecastExportJobResponse' smart constructor.
+data DescribeForecastExportJobResponse = DescribeForecastExportJobResponse'
+  { -- | When the forecast export job was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+    -- the forecast is exported.
+    destination :: Prelude.Maybe DataDestination,
+    -- | The Amazon Resource Name (ARN) of the exported forecast.
+    forecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the forecast export job.
+    forecastExportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the forecast export job.
+    forecastExportJobName :: Prelude.Maybe Prelude.Text,
+    -- | The format of the exported data, CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the forecast export job. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the forecast export job must be @ACTIVE@ before you can
+    -- access the forecast in your S3 bucket.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeForecastExportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeForecastExportJobResponse_creationTime' - When the forecast export job was created.
+--
+-- 'destination', 'describeForecastExportJobResponse_destination' - The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+-- the forecast is exported.
+--
+-- 'forecastArn', 'describeForecastExportJobResponse_forecastArn' - The Amazon Resource Name (ARN) of the exported forecast.
+--
+-- 'forecastExportJobArn', 'describeForecastExportJobResponse_forecastExportJobArn' - The ARN of the forecast export job.
+--
+-- 'forecastExportJobName', 'describeForecastExportJobResponse_forecastExportJobName' - The name of the forecast export job.
+--
+-- 'format', 'describeForecastExportJobResponse_format' - The format of the exported data, CSV or PARQUET.
+--
+-- 'lastModificationTime', 'describeForecastExportJobResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeForecastExportJobResponse_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'describeForecastExportJobResponse_status' - The status of the forecast export job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the forecast export job must be @ACTIVE@ before you can
+-- access the forecast in your S3 bucket.
+--
+-- 'httpStatus', 'describeForecastExportJobResponse_httpStatus' - The response's http status code.
+newDescribeForecastExportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeForecastExportJobResponse
+newDescribeForecastExportJobResponse pHttpStatus_ =
+  DescribeForecastExportJobResponse'
+    { creationTime =
+        Prelude.Nothing,
+      destination = Prelude.Nothing,
+      forecastArn = Prelude.Nothing,
+      forecastExportJobArn = Prelude.Nothing,
+      forecastExportJobName = Prelude.Nothing,
+      format = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the forecast export job was created.
+describeForecastExportJobResponse_creationTime :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeForecastExportJobResponse_creationTime = Lens.lens (\DescribeForecastExportJobResponse' {creationTime} -> creationTime) (\s@DescribeForecastExportJobResponse' {} a -> s {creationTime = a} :: DescribeForecastExportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+-- the forecast is exported.
+describeForecastExportJobResponse_destination :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe DataDestination)
+describeForecastExportJobResponse_destination = Lens.lens (\DescribeForecastExportJobResponse' {destination} -> destination) (\s@DescribeForecastExportJobResponse' {} a -> s {destination = a} :: DescribeForecastExportJobResponse)
+
+-- | The Amazon Resource Name (ARN) of the exported forecast.
+describeForecastExportJobResponse_forecastArn :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe Prelude.Text)
+describeForecastExportJobResponse_forecastArn = Lens.lens (\DescribeForecastExportJobResponse' {forecastArn} -> forecastArn) (\s@DescribeForecastExportJobResponse' {} a -> s {forecastArn = a} :: DescribeForecastExportJobResponse)
+
+-- | The ARN of the forecast export job.
+describeForecastExportJobResponse_forecastExportJobArn :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe Prelude.Text)
+describeForecastExportJobResponse_forecastExportJobArn = Lens.lens (\DescribeForecastExportJobResponse' {forecastExportJobArn} -> forecastExportJobArn) (\s@DescribeForecastExportJobResponse' {} a -> s {forecastExportJobArn = a} :: DescribeForecastExportJobResponse)
+
+-- | The name of the forecast export job.
+describeForecastExportJobResponse_forecastExportJobName :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe Prelude.Text)
+describeForecastExportJobResponse_forecastExportJobName = Lens.lens (\DescribeForecastExportJobResponse' {forecastExportJobName} -> forecastExportJobName) (\s@DescribeForecastExportJobResponse' {} a -> s {forecastExportJobName = a} :: DescribeForecastExportJobResponse)
+
+-- | The format of the exported data, CSV or PARQUET.
+describeForecastExportJobResponse_format :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe Prelude.Text)
+describeForecastExportJobResponse_format = Lens.lens (\DescribeForecastExportJobResponse' {format} -> format) (\s@DescribeForecastExportJobResponse' {} a -> s {format = a} :: DescribeForecastExportJobResponse)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeForecastExportJobResponse_lastModificationTime :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeForecastExportJobResponse_lastModificationTime = Lens.lens (\DescribeForecastExportJobResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeForecastExportJobResponse' {} a -> s {lastModificationTime = a} :: DescribeForecastExportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+describeForecastExportJobResponse_message :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe Prelude.Text)
+describeForecastExportJobResponse_message = Lens.lens (\DescribeForecastExportJobResponse' {message} -> message) (\s@DescribeForecastExportJobResponse' {} a -> s {message = a} :: DescribeForecastExportJobResponse)
+
+-- | The status of the forecast export job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the forecast export job must be @ACTIVE@ before you can
+-- access the forecast in your S3 bucket.
+describeForecastExportJobResponse_status :: Lens.Lens' DescribeForecastExportJobResponse (Prelude.Maybe Prelude.Text)
+describeForecastExportJobResponse_status = Lens.lens (\DescribeForecastExportJobResponse' {status} -> status) (\s@DescribeForecastExportJobResponse' {} a -> s {status = a} :: DescribeForecastExportJobResponse)
+
+-- | The response's http status code.
+describeForecastExportJobResponse_httpStatus :: Lens.Lens' DescribeForecastExportJobResponse Prelude.Int
+describeForecastExportJobResponse_httpStatus = Lens.lens (\DescribeForecastExportJobResponse' {httpStatus} -> httpStatus) (\s@DescribeForecastExportJobResponse' {} a -> s {httpStatus = a} :: DescribeForecastExportJobResponse)
+
+instance
+  Prelude.NFData
+    DescribeForecastExportJobResponse
+  where
+  rnf DescribeForecastExportJobResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf forecastArn
+      `Prelude.seq` Prelude.rnf forecastExportJobArn
+      `Prelude.seq` Prelude.rnf forecastExportJobName
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeMonitor.hs b/gen/Amazonka/Forecast/DescribeMonitor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeMonitor.hs
@@ -0,0 +1,313 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeMonitor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a monitor resource. In addition to listing the properties
+-- provided in the CreateMonitor request, this operation lists the
+-- following properties:
+--
+-- -   @Baseline@
+--
+-- -   @CreationTime@
+--
+-- -   @LastEvaluationTime@
+--
+-- -   @LastEvaluationState@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Message@
+--
+-- -   @Status@
+module Amazonka.Forecast.DescribeMonitor
+  ( -- * Creating a Request
+    DescribeMonitor (..),
+    newDescribeMonitor,
+
+    -- * Request Lenses
+    describeMonitor_monitorArn,
+
+    -- * Destructuring the Response
+    DescribeMonitorResponse (..),
+    newDescribeMonitorResponse,
+
+    -- * Response Lenses
+    describeMonitorResponse_baseline,
+    describeMonitorResponse_creationTime,
+    describeMonitorResponse_estimatedEvaluationTimeRemainingInMinutes,
+    describeMonitorResponse_lastEvaluationState,
+    describeMonitorResponse_lastEvaluationTime,
+    describeMonitorResponse_lastModificationTime,
+    describeMonitorResponse_message,
+    describeMonitorResponse_monitorArn,
+    describeMonitorResponse_monitorName,
+    describeMonitorResponse_resourceArn,
+    describeMonitorResponse_status,
+    describeMonitorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeMonitor' smart constructor.
+data DescribeMonitor = DescribeMonitor'
+  { -- | The Amazon Resource Name (ARN) of the monitor resource to describe.
+    monitorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMonitor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'monitorArn', 'describeMonitor_monitorArn' - The Amazon Resource Name (ARN) of the monitor resource to describe.
+newDescribeMonitor ::
+  -- | 'monitorArn'
+  Prelude.Text ->
+  DescribeMonitor
+newDescribeMonitor pMonitorArn_ =
+  DescribeMonitor' {monitorArn = pMonitorArn_}
+
+-- | The Amazon Resource Name (ARN) of the monitor resource to describe.
+describeMonitor_monitorArn :: Lens.Lens' DescribeMonitor Prelude.Text
+describeMonitor_monitorArn = Lens.lens (\DescribeMonitor' {monitorArn} -> monitorArn) (\s@DescribeMonitor' {} a -> s {monitorArn = a} :: DescribeMonitor)
+
+instance Core.AWSRequest DescribeMonitor where
+  type
+    AWSResponse DescribeMonitor =
+      DescribeMonitorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeMonitorResponse'
+            Prelude.<$> (x Data..?> "Baseline")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "EstimatedEvaluationTimeRemainingInMinutes"
+                        )
+            Prelude.<*> (x Data..?> "LastEvaluationState")
+            Prelude.<*> (x Data..?> "LastEvaluationTime")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "MonitorArn")
+            Prelude.<*> (x Data..?> "MonitorName")
+            Prelude.<*> (x Data..?> "ResourceArn")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeMonitor where
+  hashWithSalt _salt DescribeMonitor' {..} =
+    _salt `Prelude.hashWithSalt` monitorArn
+
+instance Prelude.NFData DescribeMonitor where
+  rnf DescribeMonitor' {..} = Prelude.rnf monitorArn
+
+instance Data.ToHeaders DescribeMonitor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeMonitor" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeMonitor where
+  toJSON DescribeMonitor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("MonitorArn" Data..= monitorArn)]
+      )
+
+instance Data.ToPath DescribeMonitor where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeMonitor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeMonitorResponse' smart constructor.
+data DescribeMonitorResponse = DescribeMonitorResponse'
+  { -- | Metrics you can use as a baseline for comparison purposes. Use these
+    -- values you interpret monitoring results for an auto predictor.
+    baseline :: Prelude.Maybe Baseline,
+    -- | The timestamp for when the monitor resource was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The estimated number of minutes remaining before the monitor resource
+    -- finishes its current evaluation.
+    estimatedEvaluationTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | The state of the monitor\'s latest evaluation.
+    lastEvaluationState :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp of the latest evaluation completed by the monitor.
+    lastEvaluationTime :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp of the latest modification to the monitor.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | An error message, if any, for the monitor.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the monitor resource described.
+    monitorArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the monitor.
+    monitorName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the auto predictor being monitored.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the monitor resource.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMonitorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'baseline', 'describeMonitorResponse_baseline' - Metrics you can use as a baseline for comparison purposes. Use these
+-- values you interpret monitoring results for an auto predictor.
+--
+-- 'creationTime', 'describeMonitorResponse_creationTime' - The timestamp for when the monitor resource was created.
+--
+-- 'estimatedEvaluationTimeRemainingInMinutes', 'describeMonitorResponse_estimatedEvaluationTimeRemainingInMinutes' - The estimated number of minutes remaining before the monitor resource
+-- finishes its current evaluation.
+--
+-- 'lastEvaluationState', 'describeMonitorResponse_lastEvaluationState' - The state of the monitor\'s latest evaluation.
+--
+-- 'lastEvaluationTime', 'describeMonitorResponse_lastEvaluationTime' - The timestamp of the latest evaluation completed by the monitor.
+--
+-- 'lastModificationTime', 'describeMonitorResponse_lastModificationTime' - The timestamp of the latest modification to the monitor.
+--
+-- 'message', 'describeMonitorResponse_message' - An error message, if any, for the monitor.
+--
+-- 'monitorArn', 'describeMonitorResponse_monitorArn' - The Amazon Resource Name (ARN) of the monitor resource described.
+--
+-- 'monitorName', 'describeMonitorResponse_monitorName' - The name of the monitor.
+--
+-- 'resourceArn', 'describeMonitorResponse_resourceArn' - The Amazon Resource Name (ARN) of the auto predictor being monitored.
+--
+-- 'status', 'describeMonitorResponse_status' - The status of the monitor resource.
+--
+-- 'httpStatus', 'describeMonitorResponse_httpStatus' - The response's http status code.
+newDescribeMonitorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeMonitorResponse
+newDescribeMonitorResponse pHttpStatus_ =
+  DescribeMonitorResponse'
+    { baseline =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      estimatedEvaluationTimeRemainingInMinutes =
+        Prelude.Nothing,
+      lastEvaluationState = Prelude.Nothing,
+      lastEvaluationTime = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      monitorArn = Prelude.Nothing,
+      monitorName = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Metrics you can use as a baseline for comparison purposes. Use these
+-- values you interpret monitoring results for an auto predictor.
+describeMonitorResponse_baseline :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Baseline)
+describeMonitorResponse_baseline = Lens.lens (\DescribeMonitorResponse' {baseline} -> baseline) (\s@DescribeMonitorResponse' {} a -> s {baseline = a} :: DescribeMonitorResponse)
+
+-- | The timestamp for when the monitor resource was created.
+describeMonitorResponse_creationTime :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.UTCTime)
+describeMonitorResponse_creationTime = Lens.lens (\DescribeMonitorResponse' {creationTime} -> creationTime) (\s@DescribeMonitorResponse' {} a -> s {creationTime = a} :: DescribeMonitorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The estimated number of minutes remaining before the monitor resource
+-- finishes its current evaluation.
+describeMonitorResponse_estimatedEvaluationTimeRemainingInMinutes :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.Integer)
+describeMonitorResponse_estimatedEvaluationTimeRemainingInMinutes = Lens.lens (\DescribeMonitorResponse' {estimatedEvaluationTimeRemainingInMinutes} -> estimatedEvaluationTimeRemainingInMinutes) (\s@DescribeMonitorResponse' {} a -> s {estimatedEvaluationTimeRemainingInMinutes = a} :: DescribeMonitorResponse)
+
+-- | The state of the monitor\'s latest evaluation.
+describeMonitorResponse_lastEvaluationState :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.Text)
+describeMonitorResponse_lastEvaluationState = Lens.lens (\DescribeMonitorResponse' {lastEvaluationState} -> lastEvaluationState) (\s@DescribeMonitorResponse' {} a -> s {lastEvaluationState = a} :: DescribeMonitorResponse)
+
+-- | The timestamp of the latest evaluation completed by the monitor.
+describeMonitorResponse_lastEvaluationTime :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.UTCTime)
+describeMonitorResponse_lastEvaluationTime = Lens.lens (\DescribeMonitorResponse' {lastEvaluationTime} -> lastEvaluationTime) (\s@DescribeMonitorResponse' {} a -> s {lastEvaluationTime = a} :: DescribeMonitorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp of the latest modification to the monitor.
+describeMonitorResponse_lastModificationTime :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.UTCTime)
+describeMonitorResponse_lastModificationTime = Lens.lens (\DescribeMonitorResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeMonitorResponse' {} a -> s {lastModificationTime = a} :: DescribeMonitorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | An error message, if any, for the monitor.
+describeMonitorResponse_message :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.Text)
+describeMonitorResponse_message = Lens.lens (\DescribeMonitorResponse' {message} -> message) (\s@DescribeMonitorResponse' {} a -> s {message = a} :: DescribeMonitorResponse)
+
+-- | The Amazon Resource Name (ARN) of the monitor resource described.
+describeMonitorResponse_monitorArn :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.Text)
+describeMonitorResponse_monitorArn = Lens.lens (\DescribeMonitorResponse' {monitorArn} -> monitorArn) (\s@DescribeMonitorResponse' {} a -> s {monitorArn = a} :: DescribeMonitorResponse)
+
+-- | The name of the monitor.
+describeMonitorResponse_monitorName :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.Text)
+describeMonitorResponse_monitorName = Lens.lens (\DescribeMonitorResponse' {monitorName} -> monitorName) (\s@DescribeMonitorResponse' {} a -> s {monitorName = a} :: DescribeMonitorResponse)
+
+-- | The Amazon Resource Name (ARN) of the auto predictor being monitored.
+describeMonitorResponse_resourceArn :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.Text)
+describeMonitorResponse_resourceArn = Lens.lens (\DescribeMonitorResponse' {resourceArn} -> resourceArn) (\s@DescribeMonitorResponse' {} a -> s {resourceArn = a} :: DescribeMonitorResponse)
+
+-- | The status of the monitor resource.
+describeMonitorResponse_status :: Lens.Lens' DescribeMonitorResponse (Prelude.Maybe Prelude.Text)
+describeMonitorResponse_status = Lens.lens (\DescribeMonitorResponse' {status} -> status) (\s@DescribeMonitorResponse' {} a -> s {status = a} :: DescribeMonitorResponse)
+
+-- | The response's http status code.
+describeMonitorResponse_httpStatus :: Lens.Lens' DescribeMonitorResponse Prelude.Int
+describeMonitorResponse_httpStatus = Lens.lens (\DescribeMonitorResponse' {httpStatus} -> httpStatus) (\s@DescribeMonitorResponse' {} a -> s {httpStatus = a} :: DescribeMonitorResponse)
+
+instance Prelude.NFData DescribeMonitorResponse where
+  rnf DescribeMonitorResponse' {..} =
+    Prelude.rnf baseline
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf estimatedEvaluationTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf lastEvaluationState
+      `Prelude.seq` Prelude.rnf lastEvaluationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf monitorArn
+      `Prelude.seq` Prelude.rnf monitorName
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribePredictor.hs b/gen/Amazonka/Forecast/DescribePredictor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribePredictor.hs
@@ -0,0 +1,616 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribePredictor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This operation is only valid for legacy predictors created with
+-- CreatePredictor. If you are not using a legacy predictor, use
+-- DescribeAutoPredictor.
+--
+-- Describes a predictor created using the CreatePredictor operation.
+--
+-- In addition to listing the properties provided in the @CreatePredictor@
+-- request, this operation lists the following properties:
+--
+-- -   @DatasetImportJobArns@ - The dataset import jobs used to import
+--     training data.
+--
+-- -   @AutoMLAlgorithmArns@ - If AutoML is performed, the algorithms that
+--     were evaluated.
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Status@
+--
+-- -   @Message@ - If an error occurred, information about the error.
+module Amazonka.Forecast.DescribePredictor
+  ( -- * Creating a Request
+    DescribePredictor (..),
+    newDescribePredictor,
+
+    -- * Request Lenses
+    describePredictor_predictorArn,
+
+    -- * Destructuring the Response
+    DescribePredictorResponse (..),
+    newDescribePredictorResponse,
+
+    -- * Response Lenses
+    describePredictorResponse_algorithmArn,
+    describePredictorResponse_autoMLAlgorithmArns,
+    describePredictorResponse_autoMLOverrideStrategy,
+    describePredictorResponse_creationTime,
+    describePredictorResponse_datasetImportJobArns,
+    describePredictorResponse_encryptionConfig,
+    describePredictorResponse_estimatedTimeRemainingInMinutes,
+    describePredictorResponse_evaluationParameters,
+    describePredictorResponse_featurizationConfig,
+    describePredictorResponse_forecastHorizon,
+    describePredictorResponse_forecastTypes,
+    describePredictorResponse_hPOConfig,
+    describePredictorResponse_inputDataConfig,
+    describePredictorResponse_isAutoPredictor,
+    describePredictorResponse_lastModificationTime,
+    describePredictorResponse_message,
+    describePredictorResponse_optimizationMetric,
+    describePredictorResponse_performAutoML,
+    describePredictorResponse_performHPO,
+    describePredictorResponse_predictorArn,
+    describePredictorResponse_predictorExecutionDetails,
+    describePredictorResponse_predictorName,
+    describePredictorResponse_status,
+    describePredictorResponse_trainingParameters,
+    describePredictorResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePredictor' smart constructor.
+data DescribePredictor = DescribePredictor'
+  { -- | The Amazon Resource Name (ARN) of the predictor that you want
+    -- information about.
+    predictorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePredictor' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorArn', 'describePredictor_predictorArn' - The Amazon Resource Name (ARN) of the predictor that you want
+-- information about.
+newDescribePredictor ::
+  -- | 'predictorArn'
+  Prelude.Text ->
+  DescribePredictor
+newDescribePredictor pPredictorArn_ =
+  DescribePredictor' {predictorArn = pPredictorArn_}
+
+-- | The Amazon Resource Name (ARN) of the predictor that you want
+-- information about.
+describePredictor_predictorArn :: Lens.Lens' DescribePredictor Prelude.Text
+describePredictor_predictorArn = Lens.lens (\DescribePredictor' {predictorArn} -> predictorArn) (\s@DescribePredictor' {} a -> s {predictorArn = a} :: DescribePredictor)
+
+instance Core.AWSRequest DescribePredictor where
+  type
+    AWSResponse DescribePredictor =
+      DescribePredictorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePredictorResponse'
+            Prelude.<$> (x Data..?> "AlgorithmArn")
+            Prelude.<*> ( x
+                            Data..?> "AutoMLAlgorithmArns"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "AutoMLOverrideStrategy")
+            Prelude.<*> (x Data..?> "CreationTime")
+            Prelude.<*> ( x
+                            Data..?> "DatasetImportJobArns"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "EncryptionConfig")
+            Prelude.<*> (x Data..?> "EstimatedTimeRemainingInMinutes")
+            Prelude.<*> (x Data..?> "EvaluationParameters")
+            Prelude.<*> (x Data..?> "FeaturizationConfig")
+            Prelude.<*> (x Data..?> "ForecastHorizon")
+            Prelude.<*> (x Data..?> "ForecastTypes")
+            Prelude.<*> (x Data..?> "HPOConfig")
+            Prelude.<*> (x Data..?> "InputDataConfig")
+            Prelude.<*> (x Data..?> "IsAutoPredictor")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "OptimizationMetric")
+            Prelude.<*> (x Data..?> "PerformAutoML")
+            Prelude.<*> (x Data..?> "PerformHPO")
+            Prelude.<*> (x Data..?> "PredictorArn")
+            Prelude.<*> (x Data..?> "PredictorExecutionDetails")
+            Prelude.<*> (x Data..?> "PredictorName")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> ( x
+                            Data..?> "TrainingParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribePredictor where
+  hashWithSalt _salt DescribePredictor' {..} =
+    _salt `Prelude.hashWithSalt` predictorArn
+
+instance Prelude.NFData DescribePredictor where
+  rnf DescribePredictor' {..} = Prelude.rnf predictorArn
+
+instance Data.ToHeaders DescribePredictor where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribePredictor" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribePredictor where
+  toJSON DescribePredictor' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("PredictorArn" Data..= predictorArn)]
+      )
+
+instance Data.ToPath DescribePredictor where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribePredictor where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribePredictorResponse' smart constructor.
+data DescribePredictorResponse = DescribePredictorResponse'
+  { -- | The Amazon Resource Name (ARN) of the algorithm used for model training.
+    algorithmArn :: Prelude.Maybe Prelude.Text,
+    -- | When @PerformAutoML@ is specified, the ARN of the chosen algorithm.
+    autoMLAlgorithmArns :: Prelude.Maybe [Prelude.Text],
+    -- | The @LatencyOptimized@ AutoML override strategy is only available in
+    -- private beta. Contact AWS Support or your account manager to learn more
+    -- about access privileges.
+    --
+    -- The AutoML strategy used to train the predictor. Unless
+    -- @LatencyOptimized@ is specified, the AutoML strategy optimizes predictor
+    -- accuracy.
+    --
+    -- This parameter is only valid for predictors trained using AutoML.
+    autoMLOverrideStrategy :: Prelude.Maybe AutoMLOverrideStrategy,
+    -- | When the model training task was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | An array of the ARNs of the dataset import jobs used to import training
+    -- data for the predictor.
+    datasetImportJobArns :: Prelude.Maybe [Prelude.Text],
+    -- | An AWS Key Management Service (KMS) key and the AWS Identity and Access
+    -- Management (IAM) role that Amazon Forecast can assume to access the key.
+    encryptionConfig :: Prelude.Maybe EncryptionConfig,
+    -- | The estimated time remaining in minutes for the predictor training job
+    -- to complete.
+    estimatedTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | Used to override the default evaluation parameters of the specified
+    -- algorithm. Amazon Forecast evaluates a predictor by splitting a dataset
+    -- into training data and testing data. The evaluation parameters define
+    -- how to perform the split and the number of iterations.
+    evaluationParameters :: Prelude.Maybe EvaluationParameters,
+    -- | The featurization configuration.
+    featurizationConfig :: Prelude.Maybe FeaturizationConfig,
+    -- | The number of time-steps of the forecast. The forecast horizon is also
+    -- called the prediction length.
+    forecastHorizon :: Prelude.Maybe Prelude.Int,
+    -- | The forecast types used during predictor training. Default value is
+    -- @[\"0.1\",\"0.5\",\"0.9\"]@
+    forecastTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The hyperparameter override values for the algorithm.
+    hPOConfig :: Prelude.Maybe HyperParameterTuningJobConfig,
+    -- | Describes the dataset group that contains the data to use to train the
+    -- predictor.
+    inputDataConfig :: Prelude.Maybe InputDataConfig,
+    -- | Whether the predictor was created with CreateAutoPredictor.
+    isAutoPredictor :: Prelude.Maybe Prelude.Bool,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The accuracy metric used to optimize the predictor.
+    optimizationMetric :: Prelude.Maybe OptimizationMetric,
+    -- | Whether the predictor is set to perform AutoML.
+    performAutoML :: Prelude.Maybe Prelude.Bool,
+    -- | Whether the predictor is set to perform hyperparameter optimization
+    -- (HPO).
+    performHPO :: Prelude.Maybe Prelude.Bool,
+    -- | The ARN of the predictor.
+    predictorArn :: Prelude.Maybe Prelude.Text,
+    -- | Details on the the status and results of the backtests performed to
+    -- evaluate the accuracy of the predictor. You specify the number of
+    -- backtests to perform when you call the operation.
+    predictorExecutionDetails :: Prelude.Maybe PredictorExecutionDetails,
+    -- | The name of the predictor.
+    predictorName :: Prelude.Maybe Prelude.Text,
+    -- | The status of the predictor. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- The @Status@ of the predictor must be @ACTIVE@ before you can use the
+    -- predictor to create a forecast.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The default training parameters or overrides selected during model
+    -- training. When running AutoML or choosing HPO with CNN-QR or DeepAR+,
+    -- the optimized values for the chosen hyperparameters are returned. For
+    -- more information, see aws-forecast-choosing-recipes.
+    trainingParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePredictorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'algorithmArn', 'describePredictorResponse_algorithmArn' - The Amazon Resource Name (ARN) of the algorithm used for model training.
+--
+-- 'autoMLAlgorithmArns', 'describePredictorResponse_autoMLAlgorithmArns' - When @PerformAutoML@ is specified, the ARN of the chosen algorithm.
+--
+-- 'autoMLOverrideStrategy', 'describePredictorResponse_autoMLOverrideStrategy' - The @LatencyOptimized@ AutoML override strategy is only available in
+-- private beta. Contact AWS Support or your account manager to learn more
+-- about access privileges.
+--
+-- The AutoML strategy used to train the predictor. Unless
+-- @LatencyOptimized@ is specified, the AutoML strategy optimizes predictor
+-- accuracy.
+--
+-- This parameter is only valid for predictors trained using AutoML.
+--
+-- 'creationTime', 'describePredictorResponse_creationTime' - When the model training task was created.
+--
+-- 'datasetImportJobArns', 'describePredictorResponse_datasetImportJobArns' - An array of the ARNs of the dataset import jobs used to import training
+-- data for the predictor.
+--
+-- 'encryptionConfig', 'describePredictorResponse_encryptionConfig' - An AWS Key Management Service (KMS) key and the AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+--
+-- 'estimatedTimeRemainingInMinutes', 'describePredictorResponse_estimatedTimeRemainingInMinutes' - The estimated time remaining in minutes for the predictor training job
+-- to complete.
+--
+-- 'evaluationParameters', 'describePredictorResponse_evaluationParameters' - Used to override the default evaluation parameters of the specified
+-- algorithm. Amazon Forecast evaluates a predictor by splitting a dataset
+-- into training data and testing data. The evaluation parameters define
+-- how to perform the split and the number of iterations.
+--
+-- 'featurizationConfig', 'describePredictorResponse_featurizationConfig' - The featurization configuration.
+--
+-- 'forecastHorizon', 'describePredictorResponse_forecastHorizon' - The number of time-steps of the forecast. The forecast horizon is also
+-- called the prediction length.
+--
+-- 'forecastTypes', 'describePredictorResponse_forecastTypes' - The forecast types used during predictor training. Default value is
+-- @[\"0.1\",\"0.5\",\"0.9\"]@
+--
+-- 'hPOConfig', 'describePredictorResponse_hPOConfig' - The hyperparameter override values for the algorithm.
+--
+-- 'inputDataConfig', 'describePredictorResponse_inputDataConfig' - Describes the dataset group that contains the data to use to train the
+-- predictor.
+--
+-- 'isAutoPredictor', 'describePredictorResponse_isAutoPredictor' - Whether the predictor was created with CreateAutoPredictor.
+--
+-- 'lastModificationTime', 'describePredictorResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describePredictorResponse_message' - If an error occurred, an informational message about the error.
+--
+-- 'optimizationMetric', 'describePredictorResponse_optimizationMetric' - The accuracy metric used to optimize the predictor.
+--
+-- 'performAutoML', 'describePredictorResponse_performAutoML' - Whether the predictor is set to perform AutoML.
+--
+-- 'performHPO', 'describePredictorResponse_performHPO' - Whether the predictor is set to perform hyperparameter optimization
+-- (HPO).
+--
+-- 'predictorArn', 'describePredictorResponse_predictorArn' - The ARN of the predictor.
+--
+-- 'predictorExecutionDetails', 'describePredictorResponse_predictorExecutionDetails' - Details on the the status and results of the backtests performed to
+-- evaluate the accuracy of the predictor. You specify the number of
+-- backtests to perform when you call the operation.
+--
+-- 'predictorName', 'describePredictorResponse_predictorName' - The name of the predictor.
+--
+-- 'status', 'describePredictorResponse_status' - The status of the predictor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- The @Status@ of the predictor must be @ACTIVE@ before you can use the
+-- predictor to create a forecast.
+--
+-- 'trainingParameters', 'describePredictorResponse_trainingParameters' - The default training parameters or overrides selected during model
+-- training. When running AutoML or choosing HPO with CNN-QR or DeepAR+,
+-- the optimized values for the chosen hyperparameters are returned. For
+-- more information, see aws-forecast-choosing-recipes.
+--
+-- 'httpStatus', 'describePredictorResponse_httpStatus' - The response's http status code.
+newDescribePredictorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePredictorResponse
+newDescribePredictorResponse pHttpStatus_ =
+  DescribePredictorResponse'
+    { algorithmArn =
+        Prelude.Nothing,
+      autoMLAlgorithmArns = Prelude.Nothing,
+      autoMLOverrideStrategy = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      datasetImportJobArns = Prelude.Nothing,
+      encryptionConfig = Prelude.Nothing,
+      estimatedTimeRemainingInMinutes =
+        Prelude.Nothing,
+      evaluationParameters = Prelude.Nothing,
+      featurizationConfig = Prelude.Nothing,
+      forecastHorizon = Prelude.Nothing,
+      forecastTypes = Prelude.Nothing,
+      hPOConfig = Prelude.Nothing,
+      inputDataConfig = Prelude.Nothing,
+      isAutoPredictor = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      optimizationMetric = Prelude.Nothing,
+      performAutoML = Prelude.Nothing,
+      performHPO = Prelude.Nothing,
+      predictorArn = Prelude.Nothing,
+      predictorExecutionDetails = Prelude.Nothing,
+      predictorName = Prelude.Nothing,
+      status = Prelude.Nothing,
+      trainingParameters = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the algorithm used for model training.
+describePredictorResponse_algorithmArn :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Text)
+describePredictorResponse_algorithmArn = Lens.lens (\DescribePredictorResponse' {algorithmArn} -> algorithmArn) (\s@DescribePredictorResponse' {} a -> s {algorithmArn = a} :: DescribePredictorResponse)
+
+-- | When @PerformAutoML@ is specified, the ARN of the chosen algorithm.
+describePredictorResponse_autoMLAlgorithmArns :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe [Prelude.Text])
+describePredictorResponse_autoMLAlgorithmArns = Lens.lens (\DescribePredictorResponse' {autoMLAlgorithmArns} -> autoMLAlgorithmArns) (\s@DescribePredictorResponse' {} a -> s {autoMLAlgorithmArns = a} :: DescribePredictorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The @LatencyOptimized@ AutoML override strategy is only available in
+-- private beta. Contact AWS Support or your account manager to learn more
+-- about access privileges.
+--
+-- The AutoML strategy used to train the predictor. Unless
+-- @LatencyOptimized@ is specified, the AutoML strategy optimizes predictor
+-- accuracy.
+--
+-- This parameter is only valid for predictors trained using AutoML.
+describePredictorResponse_autoMLOverrideStrategy :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe AutoMLOverrideStrategy)
+describePredictorResponse_autoMLOverrideStrategy = Lens.lens (\DescribePredictorResponse' {autoMLOverrideStrategy} -> autoMLOverrideStrategy) (\s@DescribePredictorResponse' {} a -> s {autoMLOverrideStrategy = a} :: DescribePredictorResponse)
+
+-- | When the model training task was created.
+describePredictorResponse_creationTime :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.UTCTime)
+describePredictorResponse_creationTime = Lens.lens (\DescribePredictorResponse' {creationTime} -> creationTime) (\s@DescribePredictorResponse' {} a -> s {creationTime = a} :: DescribePredictorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | An array of the ARNs of the dataset import jobs used to import training
+-- data for the predictor.
+describePredictorResponse_datasetImportJobArns :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe [Prelude.Text])
+describePredictorResponse_datasetImportJobArns = Lens.lens (\DescribePredictorResponse' {datasetImportJobArns} -> datasetImportJobArns) (\s@DescribePredictorResponse' {} a -> s {datasetImportJobArns = a} :: DescribePredictorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An AWS Key Management Service (KMS) key and the AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+describePredictorResponse_encryptionConfig :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe EncryptionConfig)
+describePredictorResponse_encryptionConfig = Lens.lens (\DescribePredictorResponse' {encryptionConfig} -> encryptionConfig) (\s@DescribePredictorResponse' {} a -> s {encryptionConfig = a} :: DescribePredictorResponse)
+
+-- | The estimated time remaining in minutes for the predictor training job
+-- to complete.
+describePredictorResponse_estimatedTimeRemainingInMinutes :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Integer)
+describePredictorResponse_estimatedTimeRemainingInMinutes = Lens.lens (\DescribePredictorResponse' {estimatedTimeRemainingInMinutes} -> estimatedTimeRemainingInMinutes) (\s@DescribePredictorResponse' {} a -> s {estimatedTimeRemainingInMinutes = a} :: DescribePredictorResponse)
+
+-- | Used to override the default evaluation parameters of the specified
+-- algorithm. Amazon Forecast evaluates a predictor by splitting a dataset
+-- into training data and testing data. The evaluation parameters define
+-- how to perform the split and the number of iterations.
+describePredictorResponse_evaluationParameters :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe EvaluationParameters)
+describePredictorResponse_evaluationParameters = Lens.lens (\DescribePredictorResponse' {evaluationParameters} -> evaluationParameters) (\s@DescribePredictorResponse' {} a -> s {evaluationParameters = a} :: DescribePredictorResponse)
+
+-- | The featurization configuration.
+describePredictorResponse_featurizationConfig :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe FeaturizationConfig)
+describePredictorResponse_featurizationConfig = Lens.lens (\DescribePredictorResponse' {featurizationConfig} -> featurizationConfig) (\s@DescribePredictorResponse' {} a -> s {featurizationConfig = a} :: DescribePredictorResponse)
+
+-- | The number of time-steps of the forecast. The forecast horizon is also
+-- called the prediction length.
+describePredictorResponse_forecastHorizon :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Int)
+describePredictorResponse_forecastHorizon = Lens.lens (\DescribePredictorResponse' {forecastHorizon} -> forecastHorizon) (\s@DescribePredictorResponse' {} a -> s {forecastHorizon = a} :: DescribePredictorResponse)
+
+-- | The forecast types used during predictor training. Default value is
+-- @[\"0.1\",\"0.5\",\"0.9\"]@
+describePredictorResponse_forecastTypes :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describePredictorResponse_forecastTypes = Lens.lens (\DescribePredictorResponse' {forecastTypes} -> forecastTypes) (\s@DescribePredictorResponse' {} a -> s {forecastTypes = a} :: DescribePredictorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The hyperparameter override values for the algorithm.
+describePredictorResponse_hPOConfig :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe HyperParameterTuningJobConfig)
+describePredictorResponse_hPOConfig = Lens.lens (\DescribePredictorResponse' {hPOConfig} -> hPOConfig) (\s@DescribePredictorResponse' {} a -> s {hPOConfig = a} :: DescribePredictorResponse)
+
+-- | Describes the dataset group that contains the data to use to train the
+-- predictor.
+describePredictorResponse_inputDataConfig :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe InputDataConfig)
+describePredictorResponse_inputDataConfig = Lens.lens (\DescribePredictorResponse' {inputDataConfig} -> inputDataConfig) (\s@DescribePredictorResponse' {} a -> s {inputDataConfig = a} :: DescribePredictorResponse)
+
+-- | Whether the predictor was created with CreateAutoPredictor.
+describePredictorResponse_isAutoPredictor :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Bool)
+describePredictorResponse_isAutoPredictor = Lens.lens (\DescribePredictorResponse' {isAutoPredictor} -> isAutoPredictor) (\s@DescribePredictorResponse' {} a -> s {isAutoPredictor = a} :: DescribePredictorResponse)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describePredictorResponse_lastModificationTime :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.UTCTime)
+describePredictorResponse_lastModificationTime = Lens.lens (\DescribePredictorResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribePredictorResponse' {} a -> s {lastModificationTime = a} :: DescribePredictorResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+describePredictorResponse_message :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Text)
+describePredictorResponse_message = Lens.lens (\DescribePredictorResponse' {message} -> message) (\s@DescribePredictorResponse' {} a -> s {message = a} :: DescribePredictorResponse)
+
+-- | The accuracy metric used to optimize the predictor.
+describePredictorResponse_optimizationMetric :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe OptimizationMetric)
+describePredictorResponse_optimizationMetric = Lens.lens (\DescribePredictorResponse' {optimizationMetric} -> optimizationMetric) (\s@DescribePredictorResponse' {} a -> s {optimizationMetric = a} :: DescribePredictorResponse)
+
+-- | Whether the predictor is set to perform AutoML.
+describePredictorResponse_performAutoML :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Bool)
+describePredictorResponse_performAutoML = Lens.lens (\DescribePredictorResponse' {performAutoML} -> performAutoML) (\s@DescribePredictorResponse' {} a -> s {performAutoML = a} :: DescribePredictorResponse)
+
+-- | Whether the predictor is set to perform hyperparameter optimization
+-- (HPO).
+describePredictorResponse_performHPO :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Bool)
+describePredictorResponse_performHPO = Lens.lens (\DescribePredictorResponse' {performHPO} -> performHPO) (\s@DescribePredictorResponse' {} a -> s {performHPO = a} :: DescribePredictorResponse)
+
+-- | The ARN of the predictor.
+describePredictorResponse_predictorArn :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Text)
+describePredictorResponse_predictorArn = Lens.lens (\DescribePredictorResponse' {predictorArn} -> predictorArn) (\s@DescribePredictorResponse' {} a -> s {predictorArn = a} :: DescribePredictorResponse)
+
+-- | Details on the the status and results of the backtests performed to
+-- evaluate the accuracy of the predictor. You specify the number of
+-- backtests to perform when you call the operation.
+describePredictorResponse_predictorExecutionDetails :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe PredictorExecutionDetails)
+describePredictorResponse_predictorExecutionDetails = Lens.lens (\DescribePredictorResponse' {predictorExecutionDetails} -> predictorExecutionDetails) (\s@DescribePredictorResponse' {} a -> s {predictorExecutionDetails = a} :: DescribePredictorResponse)
+
+-- | The name of the predictor.
+describePredictorResponse_predictorName :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Text)
+describePredictorResponse_predictorName = Lens.lens (\DescribePredictorResponse' {predictorName} -> predictorName) (\s@DescribePredictorResponse' {} a -> s {predictorName = a} :: DescribePredictorResponse)
+
+-- | The status of the predictor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- The @Status@ of the predictor must be @ACTIVE@ before you can use the
+-- predictor to create a forecast.
+describePredictorResponse_status :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe Prelude.Text)
+describePredictorResponse_status = Lens.lens (\DescribePredictorResponse' {status} -> status) (\s@DescribePredictorResponse' {} a -> s {status = a} :: DescribePredictorResponse)
+
+-- | The default training parameters or overrides selected during model
+-- training. When running AutoML or choosing HPO with CNN-QR or DeepAR+,
+-- the optimized values for the chosen hyperparameters are returned. For
+-- more information, see aws-forecast-choosing-recipes.
+describePredictorResponse_trainingParameters :: Lens.Lens' DescribePredictorResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describePredictorResponse_trainingParameters = Lens.lens (\DescribePredictorResponse' {trainingParameters} -> trainingParameters) (\s@DescribePredictorResponse' {} a -> s {trainingParameters = a} :: DescribePredictorResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describePredictorResponse_httpStatus :: Lens.Lens' DescribePredictorResponse Prelude.Int
+describePredictorResponse_httpStatus = Lens.lens (\DescribePredictorResponse' {httpStatus} -> httpStatus) (\s@DescribePredictorResponse' {} a -> s {httpStatus = a} :: DescribePredictorResponse)
+
+instance Prelude.NFData DescribePredictorResponse where
+  rnf DescribePredictorResponse' {..} =
+    Prelude.rnf algorithmArn
+      `Prelude.seq` Prelude.rnf autoMLAlgorithmArns
+      `Prelude.seq` Prelude.rnf autoMLOverrideStrategy
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf datasetImportJobArns
+      `Prelude.seq` Prelude.rnf encryptionConfig
+      `Prelude.seq` Prelude.rnf estimatedTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf evaluationParameters
+      `Prelude.seq` Prelude.rnf featurizationConfig
+      `Prelude.seq` Prelude.rnf forecastHorizon
+      `Prelude.seq` Prelude.rnf forecastTypes
+      `Prelude.seq` Prelude.rnf hPOConfig
+      `Prelude.seq` Prelude.rnf inputDataConfig
+      `Prelude.seq` Prelude.rnf isAutoPredictor
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf optimizationMetric
+      `Prelude.seq` Prelude.rnf performAutoML
+      `Prelude.seq` Prelude.rnf performHPO
+      `Prelude.seq` Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf
+        predictorExecutionDetails
+      `Prelude.seq` Prelude.rnf predictorName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf
+        trainingParameters
+      `Prelude.seq` Prelude.rnf
+        httpStatus
diff --git a/gen/Amazonka/Forecast/DescribePredictorBacktestExportJob.hs b/gen/Amazonka/Forecast/DescribePredictorBacktestExportJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribePredictorBacktestExportJob.hs
@@ -0,0 +1,376 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribePredictorBacktestExportJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a predictor backtest export job created using the
+-- CreatePredictorBacktestExportJob operation.
+--
+-- In addition to listing the properties provided by the user in the
+-- @CreatePredictorBacktestExportJob@ request, this operation lists the
+-- following properties:
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Status@
+--
+-- -   @Message@ (if an error occurred)
+module Amazonka.Forecast.DescribePredictorBacktestExportJob
+  ( -- * Creating a Request
+    DescribePredictorBacktestExportJob (..),
+    newDescribePredictorBacktestExportJob,
+
+    -- * Request Lenses
+    describePredictorBacktestExportJob_predictorBacktestExportJobArn,
+
+    -- * Destructuring the Response
+    DescribePredictorBacktestExportJobResponse (..),
+    newDescribePredictorBacktestExportJobResponse,
+
+    -- * Response Lenses
+    describePredictorBacktestExportJobResponse_creationTime,
+    describePredictorBacktestExportJobResponse_destination,
+    describePredictorBacktestExportJobResponse_format,
+    describePredictorBacktestExportJobResponse_lastModificationTime,
+    describePredictorBacktestExportJobResponse_message,
+    describePredictorBacktestExportJobResponse_predictorArn,
+    describePredictorBacktestExportJobResponse_predictorBacktestExportJobArn,
+    describePredictorBacktestExportJobResponse_predictorBacktestExportJobName,
+    describePredictorBacktestExportJobResponse_status,
+    describePredictorBacktestExportJobResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePredictorBacktestExportJob' smart constructor.
+data DescribePredictorBacktestExportJob = DescribePredictorBacktestExportJob'
+  { -- | The Amazon Resource Name (ARN) of the predictor backtest export job.
+    predictorBacktestExportJobArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePredictorBacktestExportJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorBacktestExportJobArn', 'describePredictorBacktestExportJob_predictorBacktestExportJobArn' - The Amazon Resource Name (ARN) of the predictor backtest export job.
+newDescribePredictorBacktestExportJob ::
+  -- | 'predictorBacktestExportJobArn'
+  Prelude.Text ->
+  DescribePredictorBacktestExportJob
+newDescribePredictorBacktestExportJob
+  pPredictorBacktestExportJobArn_ =
+    DescribePredictorBacktestExportJob'
+      { predictorBacktestExportJobArn =
+          pPredictorBacktestExportJobArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the predictor backtest export job.
+describePredictorBacktestExportJob_predictorBacktestExportJobArn :: Lens.Lens' DescribePredictorBacktestExportJob Prelude.Text
+describePredictorBacktestExportJob_predictorBacktestExportJobArn = Lens.lens (\DescribePredictorBacktestExportJob' {predictorBacktestExportJobArn} -> predictorBacktestExportJobArn) (\s@DescribePredictorBacktestExportJob' {} a -> s {predictorBacktestExportJobArn = a} :: DescribePredictorBacktestExportJob)
+
+instance
+  Core.AWSRequest
+    DescribePredictorBacktestExportJob
+  where
+  type
+    AWSResponse DescribePredictorBacktestExportJob =
+      DescribePredictorBacktestExportJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribePredictorBacktestExportJobResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "Destination")
+            Prelude.<*> (x Data..?> "Format")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "PredictorArn")
+            Prelude.<*> (x Data..?> "PredictorBacktestExportJobArn")
+            Prelude.<*> (x Data..?> "PredictorBacktestExportJobName")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribePredictorBacktestExportJob
+  where
+  hashWithSalt
+    _salt
+    DescribePredictorBacktestExportJob' {..} =
+      _salt
+        `Prelude.hashWithSalt` predictorBacktestExportJobArn
+
+instance
+  Prelude.NFData
+    DescribePredictorBacktestExportJob
+  where
+  rnf DescribePredictorBacktestExportJob' {..} =
+    Prelude.rnf predictorBacktestExportJobArn
+
+instance
+  Data.ToHeaders
+    DescribePredictorBacktestExportJob
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribePredictorBacktestExportJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribePredictorBacktestExportJob
+  where
+  toJSON DescribePredictorBacktestExportJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "PredictorBacktestExportJobArn"
+                  Data..= predictorBacktestExportJobArn
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribePredictorBacktestExportJob
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribePredictorBacktestExportJob
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribePredictorBacktestExportJobResponse' smart constructor.
+data DescribePredictorBacktestExportJobResponse = DescribePredictorBacktestExportJobResponse'
+  { -- | When the predictor backtest export job was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    destination :: Prelude.Maybe DataDestination,
+    -- | The format of the exported data, CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | Information about any errors that may have occurred during the backtest
+    -- export.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the predictor.
+    predictorArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the predictor backtest export job.
+    predictorBacktestExportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the predictor backtest export job.
+    predictorBacktestExportJobName :: Prelude.Maybe Prelude.Text,
+    -- | The status of the predictor backtest export job. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePredictorBacktestExportJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describePredictorBacktestExportJobResponse_creationTime' - When the predictor backtest export job was created.
+--
+-- 'destination', 'describePredictorBacktestExportJobResponse_destination' - Undocumented member.
+--
+-- 'format', 'describePredictorBacktestExportJobResponse_format' - The format of the exported data, CSV or PARQUET.
+--
+-- 'lastModificationTime', 'describePredictorBacktestExportJobResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describePredictorBacktestExportJobResponse_message' - Information about any errors that may have occurred during the backtest
+-- export.
+--
+-- 'predictorArn', 'describePredictorBacktestExportJobResponse_predictorArn' - The Amazon Resource Name (ARN) of the predictor.
+--
+-- 'predictorBacktestExportJobArn', 'describePredictorBacktestExportJobResponse_predictorBacktestExportJobArn' - The Amazon Resource Name (ARN) of the predictor backtest export job.
+--
+-- 'predictorBacktestExportJobName', 'describePredictorBacktestExportJobResponse_predictorBacktestExportJobName' - The name of the predictor backtest export job.
+--
+-- 'status', 'describePredictorBacktestExportJobResponse_status' - The status of the predictor backtest export job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- 'httpStatus', 'describePredictorBacktestExportJobResponse_httpStatus' - The response's http status code.
+newDescribePredictorBacktestExportJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePredictorBacktestExportJobResponse
+newDescribePredictorBacktestExportJobResponse
+  pHttpStatus_ =
+    DescribePredictorBacktestExportJobResponse'
+      { creationTime =
+          Prelude.Nothing,
+        destination = Prelude.Nothing,
+        format = Prelude.Nothing,
+        lastModificationTime =
+          Prelude.Nothing,
+        message = Prelude.Nothing,
+        predictorArn = Prelude.Nothing,
+        predictorBacktestExportJobArn =
+          Prelude.Nothing,
+        predictorBacktestExportJobName =
+          Prelude.Nothing,
+        status = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | When the predictor backtest export job was created.
+describePredictorBacktestExportJobResponse_creationTime :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.UTCTime)
+describePredictorBacktestExportJobResponse_creationTime = Lens.lens (\DescribePredictorBacktestExportJobResponse' {creationTime} -> creationTime) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {creationTime = a} :: DescribePredictorBacktestExportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+describePredictorBacktestExportJobResponse_destination :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe DataDestination)
+describePredictorBacktestExportJobResponse_destination = Lens.lens (\DescribePredictorBacktestExportJobResponse' {destination} -> destination) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {destination = a} :: DescribePredictorBacktestExportJobResponse)
+
+-- | The format of the exported data, CSV or PARQUET.
+describePredictorBacktestExportJobResponse_format :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.Text)
+describePredictorBacktestExportJobResponse_format = Lens.lens (\DescribePredictorBacktestExportJobResponse' {format} -> format) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {format = a} :: DescribePredictorBacktestExportJobResponse)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describePredictorBacktestExportJobResponse_lastModificationTime :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.UTCTime)
+describePredictorBacktestExportJobResponse_lastModificationTime = Lens.lens (\DescribePredictorBacktestExportJobResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {lastModificationTime = a} :: DescribePredictorBacktestExportJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Information about any errors that may have occurred during the backtest
+-- export.
+describePredictorBacktestExportJobResponse_message :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.Text)
+describePredictorBacktestExportJobResponse_message = Lens.lens (\DescribePredictorBacktestExportJobResponse' {message} -> message) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {message = a} :: DescribePredictorBacktestExportJobResponse)
+
+-- | The Amazon Resource Name (ARN) of the predictor.
+describePredictorBacktestExportJobResponse_predictorArn :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.Text)
+describePredictorBacktestExportJobResponse_predictorArn = Lens.lens (\DescribePredictorBacktestExportJobResponse' {predictorArn} -> predictorArn) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {predictorArn = a} :: DescribePredictorBacktestExportJobResponse)
+
+-- | The Amazon Resource Name (ARN) of the predictor backtest export job.
+describePredictorBacktestExportJobResponse_predictorBacktestExportJobArn :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.Text)
+describePredictorBacktestExportJobResponse_predictorBacktestExportJobArn = Lens.lens (\DescribePredictorBacktestExportJobResponse' {predictorBacktestExportJobArn} -> predictorBacktestExportJobArn) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {predictorBacktestExportJobArn = a} :: DescribePredictorBacktestExportJobResponse)
+
+-- | The name of the predictor backtest export job.
+describePredictorBacktestExportJobResponse_predictorBacktestExportJobName :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.Text)
+describePredictorBacktestExportJobResponse_predictorBacktestExportJobName = Lens.lens (\DescribePredictorBacktestExportJobResponse' {predictorBacktestExportJobName} -> predictorBacktestExportJobName) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {predictorBacktestExportJobName = a} :: DescribePredictorBacktestExportJobResponse)
+
+-- | The status of the predictor backtest export job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+describePredictorBacktestExportJobResponse_status :: Lens.Lens' DescribePredictorBacktestExportJobResponse (Prelude.Maybe Prelude.Text)
+describePredictorBacktestExportJobResponse_status = Lens.lens (\DescribePredictorBacktestExportJobResponse' {status} -> status) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {status = a} :: DescribePredictorBacktestExportJobResponse)
+
+-- | The response's http status code.
+describePredictorBacktestExportJobResponse_httpStatus :: Lens.Lens' DescribePredictorBacktestExportJobResponse Prelude.Int
+describePredictorBacktestExportJobResponse_httpStatus = Lens.lens (\DescribePredictorBacktestExportJobResponse' {httpStatus} -> httpStatus) (\s@DescribePredictorBacktestExportJobResponse' {} a -> s {httpStatus = a} :: DescribePredictorBacktestExportJobResponse)
+
+instance
+  Prelude.NFData
+    DescribePredictorBacktestExportJobResponse
+  where
+  rnf DescribePredictorBacktestExportJobResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf predictorBacktestExportJobArn
+      `Prelude.seq` Prelude.rnf predictorBacktestExportJobName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeWhatIfAnalysis.hs b/gen/Amazonka/Forecast/DescribeWhatIfAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeWhatIfAnalysis.hs
@@ -0,0 +1,358 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeWhatIfAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the what-if analysis created using the CreateWhatIfAnalysis
+-- operation.
+--
+-- In addition to listing the properties provided in the
+-- @CreateWhatIfAnalysis@ request, this operation lists the following
+-- properties:
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Message@ - If an error occurred, information about the error.
+--
+-- -   @Status@
+module Amazonka.Forecast.DescribeWhatIfAnalysis
+  ( -- * Creating a Request
+    DescribeWhatIfAnalysis (..),
+    newDescribeWhatIfAnalysis,
+
+    -- * Request Lenses
+    describeWhatIfAnalysis_whatIfAnalysisArn,
+
+    -- * Destructuring the Response
+    DescribeWhatIfAnalysisResponse (..),
+    newDescribeWhatIfAnalysisResponse,
+
+    -- * Response Lenses
+    describeWhatIfAnalysisResponse_creationTime,
+    describeWhatIfAnalysisResponse_estimatedTimeRemainingInMinutes,
+    describeWhatIfAnalysisResponse_forecastArn,
+    describeWhatIfAnalysisResponse_lastModificationTime,
+    describeWhatIfAnalysisResponse_message,
+    describeWhatIfAnalysisResponse_status,
+    describeWhatIfAnalysisResponse_timeSeriesSelector,
+    describeWhatIfAnalysisResponse_whatIfAnalysisArn,
+    describeWhatIfAnalysisResponse_whatIfAnalysisName,
+    describeWhatIfAnalysisResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeWhatIfAnalysis' smart constructor.
+data DescribeWhatIfAnalysis = DescribeWhatIfAnalysis'
+  { -- | The Amazon Resource Name (ARN) of the what-if analysis that you are
+    -- interested in.
+    whatIfAnalysisArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWhatIfAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfAnalysisArn', 'describeWhatIfAnalysis_whatIfAnalysisArn' - The Amazon Resource Name (ARN) of the what-if analysis that you are
+-- interested in.
+newDescribeWhatIfAnalysis ::
+  -- | 'whatIfAnalysisArn'
+  Prelude.Text ->
+  DescribeWhatIfAnalysis
+newDescribeWhatIfAnalysis pWhatIfAnalysisArn_ =
+  DescribeWhatIfAnalysis'
+    { whatIfAnalysisArn =
+        pWhatIfAnalysisArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the what-if analysis that you are
+-- interested in.
+describeWhatIfAnalysis_whatIfAnalysisArn :: Lens.Lens' DescribeWhatIfAnalysis Prelude.Text
+describeWhatIfAnalysis_whatIfAnalysisArn = Lens.lens (\DescribeWhatIfAnalysis' {whatIfAnalysisArn} -> whatIfAnalysisArn) (\s@DescribeWhatIfAnalysis' {} a -> s {whatIfAnalysisArn = a} :: DescribeWhatIfAnalysis)
+
+instance Core.AWSRequest DescribeWhatIfAnalysis where
+  type
+    AWSResponse DescribeWhatIfAnalysis =
+      DescribeWhatIfAnalysisResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWhatIfAnalysisResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "EstimatedTimeRemainingInMinutes")
+            Prelude.<*> (x Data..?> "ForecastArn")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TimeSeriesSelector")
+            Prelude.<*> (x Data..?> "WhatIfAnalysisArn")
+            Prelude.<*> (x Data..?> "WhatIfAnalysisName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWhatIfAnalysis where
+  hashWithSalt _salt DescribeWhatIfAnalysis' {..} =
+    _salt `Prelude.hashWithSalt` whatIfAnalysisArn
+
+instance Prelude.NFData DescribeWhatIfAnalysis where
+  rnf DescribeWhatIfAnalysis' {..} =
+    Prelude.rnf whatIfAnalysisArn
+
+instance Data.ToHeaders DescribeWhatIfAnalysis where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeWhatIfAnalysis" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWhatIfAnalysis where
+  toJSON DescribeWhatIfAnalysis' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("WhatIfAnalysisArn" Data..= whatIfAnalysisArn)
+          ]
+      )
+
+instance Data.ToPath DescribeWhatIfAnalysis where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeWhatIfAnalysis where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWhatIfAnalysisResponse' smart constructor.
+data DescribeWhatIfAnalysisResponse = DescribeWhatIfAnalysisResponse'
+  { -- | When the what-if analysis was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The approximate time remaining to complete the what-if analysis, in
+    -- minutes.
+    estimatedTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | The Amazon Resource Name (ARN) of the what-if forecast.
+    forecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the what-if analysis. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+    -- access the analysis.
+    status :: Prelude.Maybe Prelude.Text,
+    timeSeriesSelector :: Prelude.Maybe TimeSeriesSelector,
+    -- | The Amazon Resource Name (ARN) of the what-if analysis.
+    whatIfAnalysisArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the what-if analysis.
+    whatIfAnalysisName :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWhatIfAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeWhatIfAnalysisResponse_creationTime' - When the what-if analysis was created.
+--
+-- 'estimatedTimeRemainingInMinutes', 'describeWhatIfAnalysisResponse_estimatedTimeRemainingInMinutes' - The approximate time remaining to complete the what-if analysis, in
+-- minutes.
+--
+-- 'forecastArn', 'describeWhatIfAnalysisResponse_forecastArn' - The Amazon Resource Name (ARN) of the what-if forecast.
+--
+-- 'lastModificationTime', 'describeWhatIfAnalysisResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeWhatIfAnalysisResponse_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'describeWhatIfAnalysisResponse_status' - The status of the what-if analysis. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+-- access the analysis.
+--
+-- 'timeSeriesSelector', 'describeWhatIfAnalysisResponse_timeSeriesSelector' - Undocumented member.
+--
+-- 'whatIfAnalysisArn', 'describeWhatIfAnalysisResponse_whatIfAnalysisArn' - The Amazon Resource Name (ARN) of the what-if analysis.
+--
+-- 'whatIfAnalysisName', 'describeWhatIfAnalysisResponse_whatIfAnalysisName' - The name of the what-if analysis.
+--
+-- 'httpStatus', 'describeWhatIfAnalysisResponse_httpStatus' - The response's http status code.
+newDescribeWhatIfAnalysisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWhatIfAnalysisResponse
+newDescribeWhatIfAnalysisResponse pHttpStatus_ =
+  DescribeWhatIfAnalysisResponse'
+    { creationTime =
+        Prelude.Nothing,
+      estimatedTimeRemainingInMinutes =
+        Prelude.Nothing,
+      forecastArn = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      timeSeriesSelector = Prelude.Nothing,
+      whatIfAnalysisArn = Prelude.Nothing,
+      whatIfAnalysisName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the what-if analysis was created.
+describeWhatIfAnalysisResponse_creationTime :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe Prelude.UTCTime)
+describeWhatIfAnalysisResponse_creationTime = Lens.lens (\DescribeWhatIfAnalysisResponse' {creationTime} -> creationTime) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {creationTime = a} :: DescribeWhatIfAnalysisResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The approximate time remaining to complete the what-if analysis, in
+-- minutes.
+describeWhatIfAnalysisResponse_estimatedTimeRemainingInMinutes :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe Prelude.Integer)
+describeWhatIfAnalysisResponse_estimatedTimeRemainingInMinutes = Lens.lens (\DescribeWhatIfAnalysisResponse' {estimatedTimeRemainingInMinutes} -> estimatedTimeRemainingInMinutes) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {estimatedTimeRemainingInMinutes = a} :: DescribeWhatIfAnalysisResponse)
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast.
+describeWhatIfAnalysisResponse_forecastArn :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfAnalysisResponse_forecastArn = Lens.lens (\DescribeWhatIfAnalysisResponse' {forecastArn} -> forecastArn) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {forecastArn = a} :: DescribeWhatIfAnalysisResponse)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeWhatIfAnalysisResponse_lastModificationTime :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe Prelude.UTCTime)
+describeWhatIfAnalysisResponse_lastModificationTime = Lens.lens (\DescribeWhatIfAnalysisResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {lastModificationTime = a} :: DescribeWhatIfAnalysisResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+describeWhatIfAnalysisResponse_message :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfAnalysisResponse_message = Lens.lens (\DescribeWhatIfAnalysisResponse' {message} -> message) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {message = a} :: DescribeWhatIfAnalysisResponse)
+
+-- | The status of the what-if analysis. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+-- access the analysis.
+describeWhatIfAnalysisResponse_status :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfAnalysisResponse_status = Lens.lens (\DescribeWhatIfAnalysisResponse' {status} -> status) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {status = a} :: DescribeWhatIfAnalysisResponse)
+
+-- | Undocumented member.
+describeWhatIfAnalysisResponse_timeSeriesSelector :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe TimeSeriesSelector)
+describeWhatIfAnalysisResponse_timeSeriesSelector = Lens.lens (\DescribeWhatIfAnalysisResponse' {timeSeriesSelector} -> timeSeriesSelector) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {timeSeriesSelector = a} :: DescribeWhatIfAnalysisResponse)
+
+-- | The Amazon Resource Name (ARN) of the what-if analysis.
+describeWhatIfAnalysisResponse_whatIfAnalysisArn :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfAnalysisResponse_whatIfAnalysisArn = Lens.lens (\DescribeWhatIfAnalysisResponse' {whatIfAnalysisArn} -> whatIfAnalysisArn) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {whatIfAnalysisArn = a} :: DescribeWhatIfAnalysisResponse)
+
+-- | The name of the what-if analysis.
+describeWhatIfAnalysisResponse_whatIfAnalysisName :: Lens.Lens' DescribeWhatIfAnalysisResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfAnalysisResponse_whatIfAnalysisName = Lens.lens (\DescribeWhatIfAnalysisResponse' {whatIfAnalysisName} -> whatIfAnalysisName) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {whatIfAnalysisName = a} :: DescribeWhatIfAnalysisResponse)
+
+-- | The response's http status code.
+describeWhatIfAnalysisResponse_httpStatus :: Lens.Lens' DescribeWhatIfAnalysisResponse Prelude.Int
+describeWhatIfAnalysisResponse_httpStatus = Lens.lens (\DescribeWhatIfAnalysisResponse' {httpStatus} -> httpStatus) (\s@DescribeWhatIfAnalysisResponse' {} a -> s {httpStatus = a} :: DescribeWhatIfAnalysisResponse)
+
+instance
+  Prelude.NFData
+    DescribeWhatIfAnalysisResponse
+  where
+  rnf DescribeWhatIfAnalysisResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf estimatedTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf forecastArn
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf timeSeriesSelector
+      `Prelude.seq` Prelude.rnf whatIfAnalysisArn
+      `Prelude.seq` Prelude.rnf whatIfAnalysisName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeWhatIfForecast.hs b/gen/Amazonka/Forecast/DescribeWhatIfForecast.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeWhatIfForecast.hs
@@ -0,0 +1,405 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeWhatIfForecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the what-if forecast created using the CreateWhatIfForecast
+-- operation.
+--
+-- In addition to listing the properties provided in the
+-- @CreateWhatIfForecast@ request, this operation lists the following
+-- properties:
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Message@ - If an error occurred, information about the error.
+--
+-- -   @Status@
+module Amazonka.Forecast.DescribeWhatIfForecast
+  ( -- * Creating a Request
+    DescribeWhatIfForecast (..),
+    newDescribeWhatIfForecast,
+
+    -- * Request Lenses
+    describeWhatIfForecast_whatIfForecastArn,
+
+    -- * Destructuring the Response
+    DescribeWhatIfForecastResponse (..),
+    newDescribeWhatIfForecastResponse,
+
+    -- * Response Lenses
+    describeWhatIfForecastResponse_creationTime,
+    describeWhatIfForecastResponse_estimatedTimeRemainingInMinutes,
+    describeWhatIfForecastResponse_forecastTypes,
+    describeWhatIfForecastResponse_lastModificationTime,
+    describeWhatIfForecastResponse_message,
+    describeWhatIfForecastResponse_status,
+    describeWhatIfForecastResponse_timeSeriesReplacementsDataSource,
+    describeWhatIfForecastResponse_timeSeriesTransformations,
+    describeWhatIfForecastResponse_whatIfAnalysisArn,
+    describeWhatIfForecastResponse_whatIfForecastArn,
+    describeWhatIfForecastResponse_whatIfForecastName,
+    describeWhatIfForecastResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeWhatIfForecast' smart constructor.
+data DescribeWhatIfForecast = DescribeWhatIfForecast'
+  { -- | The Amazon Resource Name (ARN) of the what-if forecast that you are
+    -- interested in.
+    whatIfForecastArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWhatIfForecast' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfForecastArn', 'describeWhatIfForecast_whatIfForecastArn' - The Amazon Resource Name (ARN) of the what-if forecast that you are
+-- interested in.
+newDescribeWhatIfForecast ::
+  -- | 'whatIfForecastArn'
+  Prelude.Text ->
+  DescribeWhatIfForecast
+newDescribeWhatIfForecast pWhatIfForecastArn_ =
+  DescribeWhatIfForecast'
+    { whatIfForecastArn =
+        pWhatIfForecastArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast that you are
+-- interested in.
+describeWhatIfForecast_whatIfForecastArn :: Lens.Lens' DescribeWhatIfForecast Prelude.Text
+describeWhatIfForecast_whatIfForecastArn = Lens.lens (\DescribeWhatIfForecast' {whatIfForecastArn} -> whatIfForecastArn) (\s@DescribeWhatIfForecast' {} a -> s {whatIfForecastArn = a} :: DescribeWhatIfForecast)
+
+instance Core.AWSRequest DescribeWhatIfForecast where
+  type
+    AWSResponse DescribeWhatIfForecast =
+      DescribeWhatIfForecastResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWhatIfForecastResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "EstimatedTimeRemainingInMinutes")
+            Prelude.<*> (x Data..?> "ForecastTypes")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (x Data..?> "TimeSeriesReplacementsDataSource")
+            Prelude.<*> ( x
+                            Data..?> "TimeSeriesTransformations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "WhatIfAnalysisArn")
+            Prelude.<*> (x Data..?> "WhatIfForecastArn")
+            Prelude.<*> (x Data..?> "WhatIfForecastName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeWhatIfForecast where
+  hashWithSalt _salt DescribeWhatIfForecast' {..} =
+    _salt `Prelude.hashWithSalt` whatIfForecastArn
+
+instance Prelude.NFData DescribeWhatIfForecast where
+  rnf DescribeWhatIfForecast' {..} =
+    Prelude.rnf whatIfForecastArn
+
+instance Data.ToHeaders DescribeWhatIfForecast where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeWhatIfForecast" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWhatIfForecast where
+  toJSON DescribeWhatIfForecast' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("WhatIfForecastArn" Data..= whatIfForecastArn)
+          ]
+      )
+
+instance Data.ToPath DescribeWhatIfForecast where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeWhatIfForecast where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWhatIfForecastResponse' smart constructor.
+data DescribeWhatIfForecastResponse = DescribeWhatIfForecastResponse'
+  { -- | When the what-if forecast was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The approximate time remaining to complete the what-if forecast, in
+    -- minutes.
+    estimatedTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | The quantiles at which probabilistic forecasts are generated. You can
+    -- specify up to 5 quantiles per what-if forecast in the
+    -- CreateWhatIfForecast operation. If you didn\'t specify quantiles, the
+    -- default values are @[\"0.1\", \"0.5\", \"0.9\"]@.
+    forecastTypes :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the what-if forecast. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the what-if forecast must be @ACTIVE@ before you can
+    -- access the forecast.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | An array of @S3Config@, @Schema@, and @Format@ elements that describe
+    -- the replacement time series.
+    timeSeriesReplacementsDataSource :: Prelude.Maybe TimeSeriesReplacementsDataSource,
+    -- | An array of @Action@ and @TimeSeriesConditions@ elements that describe
+    -- what transformations were applied to which time series.
+    timeSeriesTransformations :: Prelude.Maybe [TimeSeriesTransformation],
+    -- | The Amazon Resource Name (ARN) of the what-if analysis that contains
+    -- this forecast.
+    whatIfAnalysisArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the what-if forecast.
+    whatIfForecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the what-if forecast.
+    whatIfForecastName :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWhatIfForecastResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeWhatIfForecastResponse_creationTime' - When the what-if forecast was created.
+--
+-- 'estimatedTimeRemainingInMinutes', 'describeWhatIfForecastResponse_estimatedTimeRemainingInMinutes' - The approximate time remaining to complete the what-if forecast, in
+-- minutes.
+--
+-- 'forecastTypes', 'describeWhatIfForecastResponse_forecastTypes' - The quantiles at which probabilistic forecasts are generated. You can
+-- specify up to 5 quantiles per what-if forecast in the
+-- CreateWhatIfForecast operation. If you didn\'t specify quantiles, the
+-- default values are @[\"0.1\", \"0.5\", \"0.9\"]@.
+--
+-- 'lastModificationTime', 'describeWhatIfForecastResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeWhatIfForecastResponse_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'describeWhatIfForecastResponse_status' - The status of the what-if forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if forecast must be @ACTIVE@ before you can
+-- access the forecast.
+--
+-- 'timeSeriesReplacementsDataSource', 'describeWhatIfForecastResponse_timeSeriesReplacementsDataSource' - An array of @S3Config@, @Schema@, and @Format@ elements that describe
+-- the replacement time series.
+--
+-- 'timeSeriesTransformations', 'describeWhatIfForecastResponse_timeSeriesTransformations' - An array of @Action@ and @TimeSeriesConditions@ elements that describe
+-- what transformations were applied to which time series.
+--
+-- 'whatIfAnalysisArn', 'describeWhatIfForecastResponse_whatIfAnalysisArn' - The Amazon Resource Name (ARN) of the what-if analysis that contains
+-- this forecast.
+--
+-- 'whatIfForecastArn', 'describeWhatIfForecastResponse_whatIfForecastArn' - The Amazon Resource Name (ARN) of the what-if forecast.
+--
+-- 'whatIfForecastName', 'describeWhatIfForecastResponse_whatIfForecastName' - The name of the what-if forecast.
+--
+-- 'httpStatus', 'describeWhatIfForecastResponse_httpStatus' - The response's http status code.
+newDescribeWhatIfForecastResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWhatIfForecastResponse
+newDescribeWhatIfForecastResponse pHttpStatus_ =
+  DescribeWhatIfForecastResponse'
+    { creationTime =
+        Prelude.Nothing,
+      estimatedTimeRemainingInMinutes =
+        Prelude.Nothing,
+      forecastTypes = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      timeSeriesReplacementsDataSource =
+        Prelude.Nothing,
+      timeSeriesTransformations = Prelude.Nothing,
+      whatIfAnalysisArn = Prelude.Nothing,
+      whatIfForecastArn = Prelude.Nothing,
+      whatIfForecastName = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the what-if forecast was created.
+describeWhatIfForecastResponse_creationTime :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe Prelude.UTCTime)
+describeWhatIfForecastResponse_creationTime = Lens.lens (\DescribeWhatIfForecastResponse' {creationTime} -> creationTime) (\s@DescribeWhatIfForecastResponse' {} a -> s {creationTime = a} :: DescribeWhatIfForecastResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The approximate time remaining to complete the what-if forecast, in
+-- minutes.
+describeWhatIfForecastResponse_estimatedTimeRemainingInMinutes :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe Prelude.Integer)
+describeWhatIfForecastResponse_estimatedTimeRemainingInMinutes = Lens.lens (\DescribeWhatIfForecastResponse' {estimatedTimeRemainingInMinutes} -> estimatedTimeRemainingInMinutes) (\s@DescribeWhatIfForecastResponse' {} a -> s {estimatedTimeRemainingInMinutes = a} :: DescribeWhatIfForecastResponse)
+
+-- | The quantiles at which probabilistic forecasts are generated. You can
+-- specify up to 5 quantiles per what-if forecast in the
+-- CreateWhatIfForecast operation. If you didn\'t specify quantiles, the
+-- default values are @[\"0.1\", \"0.5\", \"0.9\"]@.
+describeWhatIfForecastResponse_forecastTypes :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeWhatIfForecastResponse_forecastTypes = Lens.lens (\DescribeWhatIfForecastResponse' {forecastTypes} -> forecastTypes) (\s@DescribeWhatIfForecastResponse' {} a -> s {forecastTypes = a} :: DescribeWhatIfForecastResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeWhatIfForecastResponse_lastModificationTime :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe Prelude.UTCTime)
+describeWhatIfForecastResponse_lastModificationTime = Lens.lens (\DescribeWhatIfForecastResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeWhatIfForecastResponse' {} a -> s {lastModificationTime = a} :: DescribeWhatIfForecastResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+describeWhatIfForecastResponse_message :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastResponse_message = Lens.lens (\DescribeWhatIfForecastResponse' {message} -> message) (\s@DescribeWhatIfForecastResponse' {} a -> s {message = a} :: DescribeWhatIfForecastResponse)
+
+-- | The status of the what-if forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if forecast must be @ACTIVE@ before you can
+-- access the forecast.
+describeWhatIfForecastResponse_status :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastResponse_status = Lens.lens (\DescribeWhatIfForecastResponse' {status} -> status) (\s@DescribeWhatIfForecastResponse' {} a -> s {status = a} :: DescribeWhatIfForecastResponse)
+
+-- | An array of @S3Config@, @Schema@, and @Format@ elements that describe
+-- the replacement time series.
+describeWhatIfForecastResponse_timeSeriesReplacementsDataSource :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe TimeSeriesReplacementsDataSource)
+describeWhatIfForecastResponse_timeSeriesReplacementsDataSource = Lens.lens (\DescribeWhatIfForecastResponse' {timeSeriesReplacementsDataSource} -> timeSeriesReplacementsDataSource) (\s@DescribeWhatIfForecastResponse' {} a -> s {timeSeriesReplacementsDataSource = a} :: DescribeWhatIfForecastResponse)
+
+-- | An array of @Action@ and @TimeSeriesConditions@ elements that describe
+-- what transformations were applied to which time series.
+describeWhatIfForecastResponse_timeSeriesTransformations :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe [TimeSeriesTransformation])
+describeWhatIfForecastResponse_timeSeriesTransformations = Lens.lens (\DescribeWhatIfForecastResponse' {timeSeriesTransformations} -> timeSeriesTransformations) (\s@DescribeWhatIfForecastResponse' {} a -> s {timeSeriesTransformations = a} :: DescribeWhatIfForecastResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the what-if analysis that contains
+-- this forecast.
+describeWhatIfForecastResponse_whatIfAnalysisArn :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastResponse_whatIfAnalysisArn = Lens.lens (\DescribeWhatIfForecastResponse' {whatIfAnalysisArn} -> whatIfAnalysisArn) (\s@DescribeWhatIfForecastResponse' {} a -> s {whatIfAnalysisArn = a} :: DescribeWhatIfForecastResponse)
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast.
+describeWhatIfForecastResponse_whatIfForecastArn :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastResponse_whatIfForecastArn = Lens.lens (\DescribeWhatIfForecastResponse' {whatIfForecastArn} -> whatIfForecastArn) (\s@DescribeWhatIfForecastResponse' {} a -> s {whatIfForecastArn = a} :: DescribeWhatIfForecastResponse)
+
+-- | The name of the what-if forecast.
+describeWhatIfForecastResponse_whatIfForecastName :: Lens.Lens' DescribeWhatIfForecastResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastResponse_whatIfForecastName = Lens.lens (\DescribeWhatIfForecastResponse' {whatIfForecastName} -> whatIfForecastName) (\s@DescribeWhatIfForecastResponse' {} a -> s {whatIfForecastName = a} :: DescribeWhatIfForecastResponse)
+
+-- | The response's http status code.
+describeWhatIfForecastResponse_httpStatus :: Lens.Lens' DescribeWhatIfForecastResponse Prelude.Int
+describeWhatIfForecastResponse_httpStatus = Lens.lens (\DescribeWhatIfForecastResponse' {httpStatus} -> httpStatus) (\s@DescribeWhatIfForecastResponse' {} a -> s {httpStatus = a} :: DescribeWhatIfForecastResponse)
+
+instance
+  Prelude.NFData
+    DescribeWhatIfForecastResponse
+  where
+  rnf DescribeWhatIfForecastResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf estimatedTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf forecastTypes
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf timeSeriesReplacementsDataSource
+      `Prelude.seq` Prelude.rnf timeSeriesTransformations
+      `Prelude.seq` Prelude.rnf whatIfAnalysisArn
+      `Prelude.seq` Prelude.rnf whatIfForecastArn
+      `Prelude.seq` Prelude.rnf whatIfForecastName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/DescribeWhatIfForecastExport.hs b/gen/Amazonka/Forecast/DescribeWhatIfForecastExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/DescribeWhatIfForecastExport.hs
@@ -0,0 +1,386 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.DescribeWhatIfForecastExport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the what-if forecast export created using the
+-- CreateWhatIfForecastExport operation.
+--
+-- In addition to listing the properties provided in the
+-- @CreateWhatIfForecastExport@ request, this operation lists the following
+-- properties:
+--
+-- -   @CreationTime@
+--
+-- -   @LastModificationTime@
+--
+-- -   @Message@ - If an error occurred, information about the error.
+--
+-- -   @Status@
+module Amazonka.Forecast.DescribeWhatIfForecastExport
+  ( -- * Creating a Request
+    DescribeWhatIfForecastExport (..),
+    newDescribeWhatIfForecastExport,
+
+    -- * Request Lenses
+    describeWhatIfForecastExport_whatIfForecastExportArn,
+
+    -- * Destructuring the Response
+    DescribeWhatIfForecastExportResponse (..),
+    newDescribeWhatIfForecastExportResponse,
+
+    -- * Response Lenses
+    describeWhatIfForecastExportResponse_creationTime,
+    describeWhatIfForecastExportResponse_destination,
+    describeWhatIfForecastExportResponse_estimatedTimeRemainingInMinutes,
+    describeWhatIfForecastExportResponse_format,
+    describeWhatIfForecastExportResponse_lastModificationTime,
+    describeWhatIfForecastExportResponse_message,
+    describeWhatIfForecastExportResponse_status,
+    describeWhatIfForecastExportResponse_whatIfForecastArns,
+    describeWhatIfForecastExportResponse_whatIfForecastExportArn,
+    describeWhatIfForecastExportResponse_whatIfForecastExportName,
+    describeWhatIfForecastExportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeWhatIfForecastExport' smart constructor.
+data DescribeWhatIfForecastExport = DescribeWhatIfForecastExport'
+  { -- | The Amazon Resource Name (ARN) of the what-if forecast export that you
+    -- are interested in.
+    whatIfForecastExportArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWhatIfForecastExport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'whatIfForecastExportArn', 'describeWhatIfForecastExport_whatIfForecastExportArn' - The Amazon Resource Name (ARN) of the what-if forecast export that you
+-- are interested in.
+newDescribeWhatIfForecastExport ::
+  -- | 'whatIfForecastExportArn'
+  Prelude.Text ->
+  DescribeWhatIfForecastExport
+newDescribeWhatIfForecastExport
+  pWhatIfForecastExportArn_ =
+    DescribeWhatIfForecastExport'
+      { whatIfForecastExportArn =
+          pWhatIfForecastExportArn_
+      }
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast export that you
+-- are interested in.
+describeWhatIfForecastExport_whatIfForecastExportArn :: Lens.Lens' DescribeWhatIfForecastExport Prelude.Text
+describeWhatIfForecastExport_whatIfForecastExportArn = Lens.lens (\DescribeWhatIfForecastExport' {whatIfForecastExportArn} -> whatIfForecastExportArn) (\s@DescribeWhatIfForecastExport' {} a -> s {whatIfForecastExportArn = a} :: DescribeWhatIfForecastExport)
+
+instance Core.AWSRequest DescribeWhatIfForecastExport where
+  type
+    AWSResponse DescribeWhatIfForecastExport =
+      DescribeWhatIfForecastExportResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeWhatIfForecastExportResponse'
+            Prelude.<$> (x Data..?> "CreationTime")
+            Prelude.<*> (x Data..?> "Destination")
+            Prelude.<*> (x Data..?> "EstimatedTimeRemainingInMinutes")
+            Prelude.<*> (x Data..?> "Format")
+            Prelude.<*> (x Data..?> "LastModificationTime")
+            Prelude.<*> (x Data..?> "Message")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> ( x
+                            Data..?> "WhatIfForecastArns"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "WhatIfForecastExportArn")
+            Prelude.<*> (x Data..?> "WhatIfForecastExportName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeWhatIfForecastExport
+  where
+  hashWithSalt _salt DescribeWhatIfForecastExport' {..} =
+    _salt
+      `Prelude.hashWithSalt` whatIfForecastExportArn
+
+instance Prelude.NFData DescribeWhatIfForecastExport where
+  rnf DescribeWhatIfForecastExport' {..} =
+    Prelude.rnf whatIfForecastExportArn
+
+instance Data.ToHeaders DescribeWhatIfForecastExport where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.DescribeWhatIfForecastExport" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeWhatIfForecastExport where
+  toJSON DescribeWhatIfForecastExport' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "WhatIfForecastExportArn"
+                  Data..= whatIfForecastExportArn
+              )
+          ]
+      )
+
+instance Data.ToPath DescribeWhatIfForecastExport where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeWhatIfForecastExport where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeWhatIfForecastExportResponse' smart constructor.
+data DescribeWhatIfForecastExportResponse = DescribeWhatIfForecastExportResponse'
+  { -- | When the what-if forecast export was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    destination :: Prelude.Maybe DataDestination,
+    -- | The approximate time remaining to complete the what-if forecast export,
+    -- in minutes.
+    estimatedTimeRemainingInMinutes :: Prelude.Maybe Prelude.Integer,
+    -- | The format of the exported data, CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the what-if forecast. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the what-if forecast export must be @ACTIVE@ before you
+    -- can access the forecast export.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | An array of Amazon Resource Names (ARNs) that represent all of the
+    -- what-if forecasts exported in this resource.
+    whatIfForecastArns :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of the what-if forecast export.
+    whatIfForecastExportArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the what-if forecast export.
+    whatIfForecastExportName :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeWhatIfForecastExportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'describeWhatIfForecastExportResponse_creationTime' - When the what-if forecast export was created.
+--
+-- 'destination', 'describeWhatIfForecastExportResponse_destination' - Undocumented member.
+--
+-- 'estimatedTimeRemainingInMinutes', 'describeWhatIfForecastExportResponse_estimatedTimeRemainingInMinutes' - The approximate time remaining to complete the what-if forecast export,
+-- in minutes.
+--
+-- 'format', 'describeWhatIfForecastExportResponse_format' - The format of the exported data, CSV or PARQUET.
+--
+-- 'lastModificationTime', 'describeWhatIfForecastExportResponse_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'describeWhatIfForecastExportResponse_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'describeWhatIfForecastExportResponse_status' - The status of the what-if forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if forecast export must be @ACTIVE@ before you
+-- can access the forecast export.
+--
+-- 'whatIfForecastArns', 'describeWhatIfForecastExportResponse_whatIfForecastArns' - An array of Amazon Resource Names (ARNs) that represent all of the
+-- what-if forecasts exported in this resource.
+--
+-- 'whatIfForecastExportArn', 'describeWhatIfForecastExportResponse_whatIfForecastExportArn' - The Amazon Resource Name (ARN) of the what-if forecast export.
+--
+-- 'whatIfForecastExportName', 'describeWhatIfForecastExportResponse_whatIfForecastExportName' - The name of the what-if forecast export.
+--
+-- 'httpStatus', 'describeWhatIfForecastExportResponse_httpStatus' - The response's http status code.
+newDescribeWhatIfForecastExportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeWhatIfForecastExportResponse
+newDescribeWhatIfForecastExportResponse pHttpStatus_ =
+  DescribeWhatIfForecastExportResponse'
+    { creationTime =
+        Prelude.Nothing,
+      destination = Prelude.Nothing,
+      estimatedTimeRemainingInMinutes =
+        Prelude.Nothing,
+      format = Prelude.Nothing,
+      lastModificationTime =
+        Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      whatIfForecastArns = Prelude.Nothing,
+      whatIfForecastExportArn =
+        Prelude.Nothing,
+      whatIfForecastExportName =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | When the what-if forecast export was created.
+describeWhatIfForecastExportResponse_creationTime :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe Prelude.UTCTime)
+describeWhatIfForecastExportResponse_creationTime = Lens.lens (\DescribeWhatIfForecastExportResponse' {creationTime} -> creationTime) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {creationTime = a} :: DescribeWhatIfForecastExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+describeWhatIfForecastExportResponse_destination :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe DataDestination)
+describeWhatIfForecastExportResponse_destination = Lens.lens (\DescribeWhatIfForecastExportResponse' {destination} -> destination) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {destination = a} :: DescribeWhatIfForecastExportResponse)
+
+-- | The approximate time remaining to complete the what-if forecast export,
+-- in minutes.
+describeWhatIfForecastExportResponse_estimatedTimeRemainingInMinutes :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe Prelude.Integer)
+describeWhatIfForecastExportResponse_estimatedTimeRemainingInMinutes = Lens.lens (\DescribeWhatIfForecastExportResponse' {estimatedTimeRemainingInMinutes} -> estimatedTimeRemainingInMinutes) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {estimatedTimeRemainingInMinutes = a} :: DescribeWhatIfForecastExportResponse)
+
+-- | The format of the exported data, CSV or PARQUET.
+describeWhatIfForecastExportResponse_format :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastExportResponse_format = Lens.lens (\DescribeWhatIfForecastExportResponse' {format} -> format) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {format = a} :: DescribeWhatIfForecastExportResponse)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+describeWhatIfForecastExportResponse_lastModificationTime :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe Prelude.UTCTime)
+describeWhatIfForecastExportResponse_lastModificationTime = Lens.lens (\DescribeWhatIfForecastExportResponse' {lastModificationTime} -> lastModificationTime) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {lastModificationTime = a} :: DescribeWhatIfForecastExportResponse) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+describeWhatIfForecastExportResponse_message :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastExportResponse_message = Lens.lens (\DescribeWhatIfForecastExportResponse' {message} -> message) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {message = a} :: DescribeWhatIfForecastExportResponse)
+
+-- | The status of the what-if forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if forecast export must be @ACTIVE@ before you
+-- can access the forecast export.
+describeWhatIfForecastExportResponse_status :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastExportResponse_status = Lens.lens (\DescribeWhatIfForecastExportResponse' {status} -> status) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {status = a} :: DescribeWhatIfForecastExportResponse)
+
+-- | An array of Amazon Resource Names (ARNs) that represent all of the
+-- what-if forecasts exported in this resource.
+describeWhatIfForecastExportResponse_whatIfForecastArns :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe [Prelude.Text])
+describeWhatIfForecastExportResponse_whatIfForecastArns = Lens.lens (\DescribeWhatIfForecastExportResponse' {whatIfForecastArns} -> whatIfForecastArns) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {whatIfForecastArns = a} :: DescribeWhatIfForecastExportResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast export.
+describeWhatIfForecastExportResponse_whatIfForecastExportArn :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastExportResponse_whatIfForecastExportArn = Lens.lens (\DescribeWhatIfForecastExportResponse' {whatIfForecastExportArn} -> whatIfForecastExportArn) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {whatIfForecastExportArn = a} :: DescribeWhatIfForecastExportResponse)
+
+-- | The name of the what-if forecast export.
+describeWhatIfForecastExportResponse_whatIfForecastExportName :: Lens.Lens' DescribeWhatIfForecastExportResponse (Prelude.Maybe Prelude.Text)
+describeWhatIfForecastExportResponse_whatIfForecastExportName = Lens.lens (\DescribeWhatIfForecastExportResponse' {whatIfForecastExportName} -> whatIfForecastExportName) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {whatIfForecastExportName = a} :: DescribeWhatIfForecastExportResponse)
+
+-- | The response's http status code.
+describeWhatIfForecastExportResponse_httpStatus :: Lens.Lens' DescribeWhatIfForecastExportResponse Prelude.Int
+describeWhatIfForecastExportResponse_httpStatus = Lens.lens (\DescribeWhatIfForecastExportResponse' {httpStatus} -> httpStatus) (\s@DescribeWhatIfForecastExportResponse' {} a -> s {httpStatus = a} :: DescribeWhatIfForecastExportResponse)
+
+instance
+  Prelude.NFData
+    DescribeWhatIfForecastExportResponse
+  where
+  rnf DescribeWhatIfForecastExportResponse' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf estimatedTimeRemainingInMinutes
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf whatIfForecastArns
+      `Prelude.seq` Prelude.rnf whatIfForecastExportArn
+      `Prelude.seq` Prelude.rnf whatIfForecastExportName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/GetAccuracyMetrics.hs b/gen/Amazonka/Forecast/GetAccuracyMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/GetAccuracyMetrics.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.GetAccuracyMetrics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides metrics on the accuracy of the models that were trained by the
+-- CreatePredictor operation. Use metrics to see how well the model
+-- performed and to decide whether to use the predictor to generate a
+-- forecast. For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/metrics.html Predictor Metrics>.
+--
+-- This operation generates metrics for each backtest window that was
+-- evaluated. The number of backtest windows (@NumberOfBacktestWindows@) is
+-- specified using the EvaluationParameters object, which is optionally
+-- included in the @CreatePredictor@ request. If @NumberOfBacktestWindows@
+-- isn\'t specified, the number defaults to one.
+--
+-- The parameters of the @filling@ method determine which items contribute
+-- to the metrics. If you want all items to contribute, specify @zero@. If
+-- you want only those items that have complete data in the range being
+-- evaluated to contribute, specify @nan@. For more information, see
+-- FeaturizationMethod.
+--
+-- Before you can get accuracy metrics, the @Status@ of the predictor must
+-- be @ACTIVE@, signifying that training has completed. To get the status,
+-- use the DescribePredictor operation.
+module Amazonka.Forecast.GetAccuracyMetrics
+  ( -- * Creating a Request
+    GetAccuracyMetrics (..),
+    newGetAccuracyMetrics,
+
+    -- * Request Lenses
+    getAccuracyMetrics_predictorArn,
+
+    -- * Destructuring the Response
+    GetAccuracyMetricsResponse (..),
+    newGetAccuracyMetricsResponse,
+
+    -- * Response Lenses
+    getAccuracyMetricsResponse_autoMLOverrideStrategy,
+    getAccuracyMetricsResponse_isAutoPredictor,
+    getAccuracyMetricsResponse_optimizationMetric,
+    getAccuracyMetricsResponse_predictorEvaluationResults,
+    getAccuracyMetricsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAccuracyMetrics' smart constructor.
+data GetAccuracyMetrics = GetAccuracyMetrics'
+  { -- | The Amazon Resource Name (ARN) of the predictor to get metrics for.
+    predictorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccuracyMetrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorArn', 'getAccuracyMetrics_predictorArn' - The Amazon Resource Name (ARN) of the predictor to get metrics for.
+newGetAccuracyMetrics ::
+  -- | 'predictorArn'
+  Prelude.Text ->
+  GetAccuracyMetrics
+newGetAccuracyMetrics pPredictorArn_ =
+  GetAccuracyMetrics' {predictorArn = pPredictorArn_}
+
+-- | The Amazon Resource Name (ARN) of the predictor to get metrics for.
+getAccuracyMetrics_predictorArn :: Lens.Lens' GetAccuracyMetrics Prelude.Text
+getAccuracyMetrics_predictorArn = Lens.lens (\GetAccuracyMetrics' {predictorArn} -> predictorArn) (\s@GetAccuracyMetrics' {} a -> s {predictorArn = a} :: GetAccuracyMetrics)
+
+instance Core.AWSRequest GetAccuracyMetrics where
+  type
+    AWSResponse GetAccuracyMetrics =
+      GetAccuracyMetricsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAccuracyMetricsResponse'
+            Prelude.<$> (x Data..?> "AutoMLOverrideStrategy")
+            Prelude.<*> (x Data..?> "IsAutoPredictor")
+            Prelude.<*> (x Data..?> "OptimizationMetric")
+            Prelude.<*> ( x
+                            Data..?> "PredictorEvaluationResults"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAccuracyMetrics where
+  hashWithSalt _salt GetAccuracyMetrics' {..} =
+    _salt `Prelude.hashWithSalt` predictorArn
+
+instance Prelude.NFData GetAccuracyMetrics where
+  rnf GetAccuracyMetrics' {..} =
+    Prelude.rnf predictorArn
+
+instance Data.ToHeaders GetAccuracyMetrics where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.GetAccuracyMetrics" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAccuracyMetrics where
+  toJSON GetAccuracyMetrics' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("PredictorArn" Data..= predictorArn)]
+      )
+
+instance Data.ToPath GetAccuracyMetrics where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAccuracyMetrics where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAccuracyMetricsResponse' smart constructor.
+data GetAccuracyMetricsResponse = GetAccuracyMetricsResponse'
+  { -- | The @LatencyOptimized@ AutoML override strategy is only available in
+    -- private beta. Contact AWS Support or your account manager to learn more
+    -- about access privileges.
+    --
+    -- The AutoML strategy used to train the predictor. Unless
+    -- @LatencyOptimized@ is specified, the AutoML strategy optimizes predictor
+    -- accuracy.
+    --
+    -- This parameter is only valid for predictors trained using AutoML.
+    autoMLOverrideStrategy :: Prelude.Maybe AutoMLOverrideStrategy,
+    -- | Whether the predictor was created with CreateAutoPredictor.
+    isAutoPredictor :: Prelude.Maybe Prelude.Bool,
+    -- | The accuracy metric used to optimize the predictor.
+    optimizationMetric :: Prelude.Maybe OptimizationMetric,
+    -- | An array of results from evaluating the predictor.
+    predictorEvaluationResults :: Prelude.Maybe [EvaluationResult],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAccuracyMetricsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoMLOverrideStrategy', 'getAccuracyMetricsResponse_autoMLOverrideStrategy' - The @LatencyOptimized@ AutoML override strategy is only available in
+-- private beta. Contact AWS Support or your account manager to learn more
+-- about access privileges.
+--
+-- The AutoML strategy used to train the predictor. Unless
+-- @LatencyOptimized@ is specified, the AutoML strategy optimizes predictor
+-- accuracy.
+--
+-- This parameter is only valid for predictors trained using AutoML.
+--
+-- 'isAutoPredictor', 'getAccuracyMetricsResponse_isAutoPredictor' - Whether the predictor was created with CreateAutoPredictor.
+--
+-- 'optimizationMetric', 'getAccuracyMetricsResponse_optimizationMetric' - The accuracy metric used to optimize the predictor.
+--
+-- 'predictorEvaluationResults', 'getAccuracyMetricsResponse_predictorEvaluationResults' - An array of results from evaluating the predictor.
+--
+-- 'httpStatus', 'getAccuracyMetricsResponse_httpStatus' - The response's http status code.
+newGetAccuracyMetricsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAccuracyMetricsResponse
+newGetAccuracyMetricsResponse pHttpStatus_ =
+  GetAccuracyMetricsResponse'
+    { autoMLOverrideStrategy =
+        Prelude.Nothing,
+      isAutoPredictor = Prelude.Nothing,
+      optimizationMetric = Prelude.Nothing,
+      predictorEvaluationResults = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The @LatencyOptimized@ AutoML override strategy is only available in
+-- private beta. Contact AWS Support or your account manager to learn more
+-- about access privileges.
+--
+-- The AutoML strategy used to train the predictor. Unless
+-- @LatencyOptimized@ is specified, the AutoML strategy optimizes predictor
+-- accuracy.
+--
+-- This parameter is only valid for predictors trained using AutoML.
+getAccuracyMetricsResponse_autoMLOverrideStrategy :: Lens.Lens' GetAccuracyMetricsResponse (Prelude.Maybe AutoMLOverrideStrategy)
+getAccuracyMetricsResponse_autoMLOverrideStrategy = Lens.lens (\GetAccuracyMetricsResponse' {autoMLOverrideStrategy} -> autoMLOverrideStrategy) (\s@GetAccuracyMetricsResponse' {} a -> s {autoMLOverrideStrategy = a} :: GetAccuracyMetricsResponse)
+
+-- | Whether the predictor was created with CreateAutoPredictor.
+getAccuracyMetricsResponse_isAutoPredictor :: Lens.Lens' GetAccuracyMetricsResponse (Prelude.Maybe Prelude.Bool)
+getAccuracyMetricsResponse_isAutoPredictor = Lens.lens (\GetAccuracyMetricsResponse' {isAutoPredictor} -> isAutoPredictor) (\s@GetAccuracyMetricsResponse' {} a -> s {isAutoPredictor = a} :: GetAccuracyMetricsResponse)
+
+-- | The accuracy metric used to optimize the predictor.
+getAccuracyMetricsResponse_optimizationMetric :: Lens.Lens' GetAccuracyMetricsResponse (Prelude.Maybe OptimizationMetric)
+getAccuracyMetricsResponse_optimizationMetric = Lens.lens (\GetAccuracyMetricsResponse' {optimizationMetric} -> optimizationMetric) (\s@GetAccuracyMetricsResponse' {} a -> s {optimizationMetric = a} :: GetAccuracyMetricsResponse)
+
+-- | An array of results from evaluating the predictor.
+getAccuracyMetricsResponse_predictorEvaluationResults :: Lens.Lens' GetAccuracyMetricsResponse (Prelude.Maybe [EvaluationResult])
+getAccuracyMetricsResponse_predictorEvaluationResults = Lens.lens (\GetAccuracyMetricsResponse' {predictorEvaluationResults} -> predictorEvaluationResults) (\s@GetAccuracyMetricsResponse' {} a -> s {predictorEvaluationResults = a} :: GetAccuracyMetricsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAccuracyMetricsResponse_httpStatus :: Lens.Lens' GetAccuracyMetricsResponse Prelude.Int
+getAccuracyMetricsResponse_httpStatus = Lens.lens (\GetAccuracyMetricsResponse' {httpStatus} -> httpStatus) (\s@GetAccuracyMetricsResponse' {} a -> s {httpStatus = a} :: GetAccuracyMetricsResponse)
+
+instance Prelude.NFData GetAccuracyMetricsResponse where
+  rnf GetAccuracyMetricsResponse' {..} =
+    Prelude.rnf autoMLOverrideStrategy
+      `Prelude.seq` Prelude.rnf isAutoPredictor
+      `Prelude.seq` Prelude.rnf optimizationMetric
+      `Prelude.seq` Prelude.rnf predictorEvaluationResults
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/Lens.hs b/gen/Amazonka/Forecast/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Lens.hs
@@ -0,0 +1,1063 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Lens
+  ( -- * Operations
+
+    -- ** CreateAutoPredictor
+    createAutoPredictor_dataConfig,
+    createAutoPredictor_encryptionConfig,
+    createAutoPredictor_explainPredictor,
+    createAutoPredictor_forecastDimensions,
+    createAutoPredictor_forecastFrequency,
+    createAutoPredictor_forecastHorizon,
+    createAutoPredictor_forecastTypes,
+    createAutoPredictor_monitorConfig,
+    createAutoPredictor_optimizationMetric,
+    createAutoPredictor_referencePredictorArn,
+    createAutoPredictor_tags,
+    createAutoPredictor_timeAlignmentBoundary,
+    createAutoPredictor_predictorName,
+    createAutoPredictorResponse_predictorArn,
+    createAutoPredictorResponse_httpStatus,
+
+    -- ** CreateDataset
+    createDataset_dataFrequency,
+    createDataset_encryptionConfig,
+    createDataset_tags,
+    createDataset_datasetName,
+    createDataset_domain,
+    createDataset_datasetType,
+    createDataset_schema,
+    createDatasetResponse_datasetArn,
+    createDatasetResponse_httpStatus,
+
+    -- ** CreateDatasetGroup
+    createDatasetGroup_datasetArns,
+    createDatasetGroup_tags,
+    createDatasetGroup_datasetGroupName,
+    createDatasetGroup_domain,
+    createDatasetGroupResponse_datasetGroupArn,
+    createDatasetGroupResponse_httpStatus,
+
+    -- ** CreateDatasetImportJob
+    createDatasetImportJob_format,
+    createDatasetImportJob_geolocationFormat,
+    createDatasetImportJob_tags,
+    createDatasetImportJob_timeZone,
+    createDatasetImportJob_timestampFormat,
+    createDatasetImportJob_useGeolocationForTimeZone,
+    createDatasetImportJob_datasetImportJobName,
+    createDatasetImportJob_datasetArn,
+    createDatasetImportJob_dataSource,
+    createDatasetImportJobResponse_datasetImportJobArn,
+    createDatasetImportJobResponse_httpStatus,
+
+    -- ** CreateExplainability
+    createExplainability_dataSource,
+    createExplainability_enableVisualization,
+    createExplainability_endDateTime,
+    createExplainability_schema,
+    createExplainability_startDateTime,
+    createExplainability_tags,
+    createExplainability_explainabilityName,
+    createExplainability_resourceArn,
+    createExplainability_explainabilityConfig,
+    createExplainabilityResponse_explainabilityArn,
+    createExplainabilityResponse_httpStatus,
+
+    -- ** CreateExplainabilityExport
+    createExplainabilityExport_format,
+    createExplainabilityExport_tags,
+    createExplainabilityExport_explainabilityExportName,
+    createExplainabilityExport_explainabilityArn,
+    createExplainabilityExport_destination,
+    createExplainabilityExportResponse_explainabilityExportArn,
+    createExplainabilityExportResponse_httpStatus,
+
+    -- ** CreateForecast
+    createForecast_forecastTypes,
+    createForecast_tags,
+    createForecast_timeSeriesSelector,
+    createForecast_forecastName,
+    createForecast_predictorArn,
+    createForecastResponse_forecastArn,
+    createForecastResponse_httpStatus,
+
+    -- ** CreateForecastExportJob
+    createForecastExportJob_format,
+    createForecastExportJob_tags,
+    createForecastExportJob_forecastExportJobName,
+    createForecastExportJob_forecastArn,
+    createForecastExportJob_destination,
+    createForecastExportJobResponse_forecastExportJobArn,
+    createForecastExportJobResponse_httpStatus,
+
+    -- ** CreateMonitor
+    createMonitor_tags,
+    createMonitor_monitorName,
+    createMonitor_resourceArn,
+    createMonitorResponse_monitorArn,
+    createMonitorResponse_httpStatus,
+
+    -- ** CreatePredictor
+    createPredictor_algorithmArn,
+    createPredictor_autoMLOverrideStrategy,
+    createPredictor_encryptionConfig,
+    createPredictor_evaluationParameters,
+    createPredictor_forecastTypes,
+    createPredictor_hPOConfig,
+    createPredictor_optimizationMetric,
+    createPredictor_performAutoML,
+    createPredictor_performHPO,
+    createPredictor_tags,
+    createPredictor_trainingParameters,
+    createPredictor_predictorName,
+    createPredictor_forecastHorizon,
+    createPredictor_inputDataConfig,
+    createPredictor_featurizationConfig,
+    createPredictorResponse_predictorArn,
+    createPredictorResponse_httpStatus,
+
+    -- ** CreatePredictorBacktestExportJob
+    createPredictorBacktestExportJob_format,
+    createPredictorBacktestExportJob_tags,
+    createPredictorBacktestExportJob_predictorBacktestExportJobName,
+    createPredictorBacktestExportJob_predictorArn,
+    createPredictorBacktestExportJob_destination,
+    createPredictorBacktestExportJobResponse_predictorBacktestExportJobArn,
+    createPredictorBacktestExportJobResponse_httpStatus,
+
+    -- ** CreateWhatIfAnalysis
+    createWhatIfAnalysis_tags,
+    createWhatIfAnalysis_timeSeriesSelector,
+    createWhatIfAnalysis_whatIfAnalysisName,
+    createWhatIfAnalysis_forecastArn,
+    createWhatIfAnalysisResponse_whatIfAnalysisArn,
+    createWhatIfAnalysisResponse_httpStatus,
+
+    -- ** CreateWhatIfForecast
+    createWhatIfForecast_tags,
+    createWhatIfForecast_timeSeriesReplacementsDataSource,
+    createWhatIfForecast_timeSeriesTransformations,
+    createWhatIfForecast_whatIfForecastName,
+    createWhatIfForecast_whatIfAnalysisArn,
+    createWhatIfForecastResponse_whatIfForecastArn,
+    createWhatIfForecastResponse_httpStatus,
+
+    -- ** CreateWhatIfForecastExport
+    createWhatIfForecastExport_format,
+    createWhatIfForecastExport_tags,
+    createWhatIfForecastExport_whatIfForecastExportName,
+    createWhatIfForecastExport_whatIfForecastArns,
+    createWhatIfForecastExport_destination,
+    createWhatIfForecastExportResponse_whatIfForecastExportArn,
+    createWhatIfForecastExportResponse_httpStatus,
+
+    -- ** DeleteDataset
+    deleteDataset_datasetArn,
+
+    -- ** DeleteDatasetGroup
+    deleteDatasetGroup_datasetGroupArn,
+
+    -- ** DeleteDatasetImportJob
+    deleteDatasetImportJob_datasetImportJobArn,
+
+    -- ** DeleteExplainability
+    deleteExplainability_explainabilityArn,
+
+    -- ** DeleteExplainabilityExport
+    deleteExplainabilityExport_explainabilityExportArn,
+
+    -- ** DeleteForecast
+    deleteForecast_forecastArn,
+
+    -- ** DeleteForecastExportJob
+    deleteForecastExportJob_forecastExportJobArn,
+
+    -- ** DeleteMonitor
+    deleteMonitor_monitorArn,
+
+    -- ** DeletePredictor
+    deletePredictor_predictorArn,
+
+    -- ** DeletePredictorBacktestExportJob
+    deletePredictorBacktestExportJob_predictorBacktestExportJobArn,
+
+    -- ** DeleteResourceTree
+    deleteResourceTree_resourceArn,
+
+    -- ** DeleteWhatIfAnalysis
+    deleteWhatIfAnalysis_whatIfAnalysisArn,
+
+    -- ** DeleteWhatIfForecast
+    deleteWhatIfForecast_whatIfForecastArn,
+
+    -- ** DeleteWhatIfForecastExport
+    deleteWhatIfForecastExport_whatIfForecastExportArn,
+
+    -- ** DescribeAutoPredictor
+    describeAutoPredictor_predictorArn,
+    describeAutoPredictorResponse_creationTime,
+    describeAutoPredictorResponse_dataConfig,
+    describeAutoPredictorResponse_datasetImportJobArns,
+    describeAutoPredictorResponse_encryptionConfig,
+    describeAutoPredictorResponse_estimatedTimeRemainingInMinutes,
+    describeAutoPredictorResponse_explainabilityInfo,
+    describeAutoPredictorResponse_forecastDimensions,
+    describeAutoPredictorResponse_forecastFrequency,
+    describeAutoPredictorResponse_forecastHorizon,
+    describeAutoPredictorResponse_forecastTypes,
+    describeAutoPredictorResponse_lastModificationTime,
+    describeAutoPredictorResponse_message,
+    describeAutoPredictorResponse_monitorInfo,
+    describeAutoPredictorResponse_optimizationMetric,
+    describeAutoPredictorResponse_predictorArn,
+    describeAutoPredictorResponse_predictorName,
+    describeAutoPredictorResponse_referencePredictorSummary,
+    describeAutoPredictorResponse_status,
+    describeAutoPredictorResponse_timeAlignmentBoundary,
+    describeAutoPredictorResponse_httpStatus,
+
+    -- ** DescribeDataset
+    describeDataset_datasetArn,
+    describeDatasetResponse_creationTime,
+    describeDatasetResponse_dataFrequency,
+    describeDatasetResponse_datasetArn,
+    describeDatasetResponse_datasetName,
+    describeDatasetResponse_datasetType,
+    describeDatasetResponse_domain,
+    describeDatasetResponse_encryptionConfig,
+    describeDatasetResponse_lastModificationTime,
+    describeDatasetResponse_schema,
+    describeDatasetResponse_status,
+    describeDatasetResponse_httpStatus,
+
+    -- ** DescribeDatasetGroup
+    describeDatasetGroup_datasetGroupArn,
+    describeDatasetGroupResponse_creationTime,
+    describeDatasetGroupResponse_datasetArns,
+    describeDatasetGroupResponse_datasetGroupArn,
+    describeDatasetGroupResponse_datasetGroupName,
+    describeDatasetGroupResponse_domain,
+    describeDatasetGroupResponse_lastModificationTime,
+    describeDatasetGroupResponse_status,
+    describeDatasetGroupResponse_httpStatus,
+
+    -- ** DescribeDatasetImportJob
+    describeDatasetImportJob_datasetImportJobArn,
+    describeDatasetImportJobResponse_creationTime,
+    describeDatasetImportJobResponse_dataSize,
+    describeDatasetImportJobResponse_dataSource,
+    describeDatasetImportJobResponse_datasetArn,
+    describeDatasetImportJobResponse_datasetImportJobArn,
+    describeDatasetImportJobResponse_datasetImportJobName,
+    describeDatasetImportJobResponse_estimatedTimeRemainingInMinutes,
+    describeDatasetImportJobResponse_fieldStatistics,
+    describeDatasetImportJobResponse_format,
+    describeDatasetImportJobResponse_geolocationFormat,
+    describeDatasetImportJobResponse_lastModificationTime,
+    describeDatasetImportJobResponse_message,
+    describeDatasetImportJobResponse_status,
+    describeDatasetImportJobResponse_timeZone,
+    describeDatasetImportJobResponse_timestampFormat,
+    describeDatasetImportJobResponse_useGeolocationForTimeZone,
+    describeDatasetImportJobResponse_httpStatus,
+
+    -- ** DescribeExplainability
+    describeExplainability_explainabilityArn,
+    describeExplainabilityResponse_creationTime,
+    describeExplainabilityResponse_dataSource,
+    describeExplainabilityResponse_enableVisualization,
+    describeExplainabilityResponse_endDateTime,
+    describeExplainabilityResponse_estimatedTimeRemainingInMinutes,
+    describeExplainabilityResponse_explainabilityArn,
+    describeExplainabilityResponse_explainabilityConfig,
+    describeExplainabilityResponse_explainabilityName,
+    describeExplainabilityResponse_lastModificationTime,
+    describeExplainabilityResponse_message,
+    describeExplainabilityResponse_resourceArn,
+    describeExplainabilityResponse_schema,
+    describeExplainabilityResponse_startDateTime,
+    describeExplainabilityResponse_status,
+    describeExplainabilityResponse_httpStatus,
+
+    -- ** DescribeExplainabilityExport
+    describeExplainabilityExport_explainabilityExportArn,
+    describeExplainabilityExportResponse_creationTime,
+    describeExplainabilityExportResponse_destination,
+    describeExplainabilityExportResponse_explainabilityArn,
+    describeExplainabilityExportResponse_explainabilityExportArn,
+    describeExplainabilityExportResponse_explainabilityExportName,
+    describeExplainabilityExportResponse_format,
+    describeExplainabilityExportResponse_lastModificationTime,
+    describeExplainabilityExportResponse_message,
+    describeExplainabilityExportResponse_status,
+    describeExplainabilityExportResponse_httpStatus,
+
+    -- ** DescribeForecast
+    describeForecast_forecastArn,
+    describeForecastResponse_creationTime,
+    describeForecastResponse_datasetGroupArn,
+    describeForecastResponse_estimatedTimeRemainingInMinutes,
+    describeForecastResponse_forecastArn,
+    describeForecastResponse_forecastName,
+    describeForecastResponse_forecastTypes,
+    describeForecastResponse_lastModificationTime,
+    describeForecastResponse_message,
+    describeForecastResponse_predictorArn,
+    describeForecastResponse_status,
+    describeForecastResponse_timeSeriesSelector,
+    describeForecastResponse_httpStatus,
+
+    -- ** DescribeForecastExportJob
+    describeForecastExportJob_forecastExportJobArn,
+    describeForecastExportJobResponse_creationTime,
+    describeForecastExportJobResponse_destination,
+    describeForecastExportJobResponse_forecastArn,
+    describeForecastExportJobResponse_forecastExportJobArn,
+    describeForecastExportJobResponse_forecastExportJobName,
+    describeForecastExportJobResponse_format,
+    describeForecastExportJobResponse_lastModificationTime,
+    describeForecastExportJobResponse_message,
+    describeForecastExportJobResponse_status,
+    describeForecastExportJobResponse_httpStatus,
+
+    -- ** DescribeMonitor
+    describeMonitor_monitorArn,
+    describeMonitorResponse_baseline,
+    describeMonitorResponse_creationTime,
+    describeMonitorResponse_estimatedEvaluationTimeRemainingInMinutes,
+    describeMonitorResponse_lastEvaluationState,
+    describeMonitorResponse_lastEvaluationTime,
+    describeMonitorResponse_lastModificationTime,
+    describeMonitorResponse_message,
+    describeMonitorResponse_monitorArn,
+    describeMonitorResponse_monitorName,
+    describeMonitorResponse_resourceArn,
+    describeMonitorResponse_status,
+    describeMonitorResponse_httpStatus,
+
+    -- ** DescribePredictor
+    describePredictor_predictorArn,
+    describePredictorResponse_algorithmArn,
+    describePredictorResponse_autoMLAlgorithmArns,
+    describePredictorResponse_autoMLOverrideStrategy,
+    describePredictorResponse_creationTime,
+    describePredictorResponse_datasetImportJobArns,
+    describePredictorResponse_encryptionConfig,
+    describePredictorResponse_estimatedTimeRemainingInMinutes,
+    describePredictorResponse_evaluationParameters,
+    describePredictorResponse_featurizationConfig,
+    describePredictorResponse_forecastHorizon,
+    describePredictorResponse_forecastTypes,
+    describePredictorResponse_hPOConfig,
+    describePredictorResponse_inputDataConfig,
+    describePredictorResponse_isAutoPredictor,
+    describePredictorResponse_lastModificationTime,
+    describePredictorResponse_message,
+    describePredictorResponse_optimizationMetric,
+    describePredictorResponse_performAutoML,
+    describePredictorResponse_performHPO,
+    describePredictorResponse_predictorArn,
+    describePredictorResponse_predictorExecutionDetails,
+    describePredictorResponse_predictorName,
+    describePredictorResponse_status,
+    describePredictorResponse_trainingParameters,
+    describePredictorResponse_httpStatus,
+
+    -- ** DescribePredictorBacktestExportJob
+    describePredictorBacktestExportJob_predictorBacktestExportJobArn,
+    describePredictorBacktestExportJobResponse_creationTime,
+    describePredictorBacktestExportJobResponse_destination,
+    describePredictorBacktestExportJobResponse_format,
+    describePredictorBacktestExportJobResponse_lastModificationTime,
+    describePredictorBacktestExportJobResponse_message,
+    describePredictorBacktestExportJobResponse_predictorArn,
+    describePredictorBacktestExportJobResponse_predictorBacktestExportJobArn,
+    describePredictorBacktestExportJobResponse_predictorBacktestExportJobName,
+    describePredictorBacktestExportJobResponse_status,
+    describePredictorBacktestExportJobResponse_httpStatus,
+
+    -- ** DescribeWhatIfAnalysis
+    describeWhatIfAnalysis_whatIfAnalysisArn,
+    describeWhatIfAnalysisResponse_creationTime,
+    describeWhatIfAnalysisResponse_estimatedTimeRemainingInMinutes,
+    describeWhatIfAnalysisResponse_forecastArn,
+    describeWhatIfAnalysisResponse_lastModificationTime,
+    describeWhatIfAnalysisResponse_message,
+    describeWhatIfAnalysisResponse_status,
+    describeWhatIfAnalysisResponse_timeSeriesSelector,
+    describeWhatIfAnalysisResponse_whatIfAnalysisArn,
+    describeWhatIfAnalysisResponse_whatIfAnalysisName,
+    describeWhatIfAnalysisResponse_httpStatus,
+
+    -- ** DescribeWhatIfForecast
+    describeWhatIfForecast_whatIfForecastArn,
+    describeWhatIfForecastResponse_creationTime,
+    describeWhatIfForecastResponse_estimatedTimeRemainingInMinutes,
+    describeWhatIfForecastResponse_forecastTypes,
+    describeWhatIfForecastResponse_lastModificationTime,
+    describeWhatIfForecastResponse_message,
+    describeWhatIfForecastResponse_status,
+    describeWhatIfForecastResponse_timeSeriesReplacementsDataSource,
+    describeWhatIfForecastResponse_timeSeriesTransformations,
+    describeWhatIfForecastResponse_whatIfAnalysisArn,
+    describeWhatIfForecastResponse_whatIfForecastArn,
+    describeWhatIfForecastResponse_whatIfForecastName,
+    describeWhatIfForecastResponse_httpStatus,
+
+    -- ** DescribeWhatIfForecastExport
+    describeWhatIfForecastExport_whatIfForecastExportArn,
+    describeWhatIfForecastExportResponse_creationTime,
+    describeWhatIfForecastExportResponse_destination,
+    describeWhatIfForecastExportResponse_estimatedTimeRemainingInMinutes,
+    describeWhatIfForecastExportResponse_format,
+    describeWhatIfForecastExportResponse_lastModificationTime,
+    describeWhatIfForecastExportResponse_message,
+    describeWhatIfForecastExportResponse_status,
+    describeWhatIfForecastExportResponse_whatIfForecastArns,
+    describeWhatIfForecastExportResponse_whatIfForecastExportArn,
+    describeWhatIfForecastExportResponse_whatIfForecastExportName,
+    describeWhatIfForecastExportResponse_httpStatus,
+
+    -- ** GetAccuracyMetrics
+    getAccuracyMetrics_predictorArn,
+    getAccuracyMetricsResponse_autoMLOverrideStrategy,
+    getAccuracyMetricsResponse_isAutoPredictor,
+    getAccuracyMetricsResponse_optimizationMetric,
+    getAccuracyMetricsResponse_predictorEvaluationResults,
+    getAccuracyMetricsResponse_httpStatus,
+
+    -- ** ListDatasetGroups
+    listDatasetGroups_maxResults,
+    listDatasetGroups_nextToken,
+    listDatasetGroupsResponse_datasetGroups,
+    listDatasetGroupsResponse_nextToken,
+    listDatasetGroupsResponse_httpStatus,
+
+    -- ** ListDatasetImportJobs
+    listDatasetImportJobs_filters,
+    listDatasetImportJobs_maxResults,
+    listDatasetImportJobs_nextToken,
+    listDatasetImportJobsResponse_datasetImportJobs,
+    listDatasetImportJobsResponse_nextToken,
+    listDatasetImportJobsResponse_httpStatus,
+
+    -- ** ListDatasets
+    listDatasets_maxResults,
+    listDatasets_nextToken,
+    listDatasetsResponse_datasets,
+    listDatasetsResponse_nextToken,
+    listDatasetsResponse_httpStatus,
+
+    -- ** ListExplainabilities
+    listExplainabilities_filters,
+    listExplainabilities_maxResults,
+    listExplainabilities_nextToken,
+    listExplainabilitiesResponse_explainabilities,
+    listExplainabilitiesResponse_nextToken,
+    listExplainabilitiesResponse_httpStatus,
+
+    -- ** ListExplainabilityExports
+    listExplainabilityExports_filters,
+    listExplainabilityExports_maxResults,
+    listExplainabilityExports_nextToken,
+    listExplainabilityExportsResponse_explainabilityExports,
+    listExplainabilityExportsResponse_nextToken,
+    listExplainabilityExportsResponse_httpStatus,
+
+    -- ** ListForecastExportJobs
+    listForecastExportJobs_filters,
+    listForecastExportJobs_maxResults,
+    listForecastExportJobs_nextToken,
+    listForecastExportJobsResponse_forecastExportJobs,
+    listForecastExportJobsResponse_nextToken,
+    listForecastExportJobsResponse_httpStatus,
+
+    -- ** ListForecasts
+    listForecasts_filters,
+    listForecasts_maxResults,
+    listForecasts_nextToken,
+    listForecastsResponse_forecasts,
+    listForecastsResponse_nextToken,
+    listForecastsResponse_httpStatus,
+
+    -- ** ListMonitorEvaluations
+    listMonitorEvaluations_filters,
+    listMonitorEvaluations_maxResults,
+    listMonitorEvaluations_nextToken,
+    listMonitorEvaluations_monitorArn,
+    listMonitorEvaluationsResponse_nextToken,
+    listMonitorEvaluationsResponse_predictorMonitorEvaluations,
+    listMonitorEvaluationsResponse_httpStatus,
+
+    -- ** ListMonitors
+    listMonitors_filters,
+    listMonitors_maxResults,
+    listMonitors_nextToken,
+    listMonitorsResponse_monitors,
+    listMonitorsResponse_nextToken,
+    listMonitorsResponse_httpStatus,
+
+    -- ** ListPredictorBacktestExportJobs
+    listPredictorBacktestExportJobs_filters,
+    listPredictorBacktestExportJobs_maxResults,
+    listPredictorBacktestExportJobs_nextToken,
+    listPredictorBacktestExportJobsResponse_nextToken,
+    listPredictorBacktestExportJobsResponse_predictorBacktestExportJobs,
+    listPredictorBacktestExportJobsResponse_httpStatus,
+
+    -- ** ListPredictors
+    listPredictors_filters,
+    listPredictors_maxResults,
+    listPredictors_nextToken,
+    listPredictorsResponse_nextToken,
+    listPredictorsResponse_predictors,
+    listPredictorsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** ListWhatIfAnalyses
+    listWhatIfAnalyses_filters,
+    listWhatIfAnalyses_maxResults,
+    listWhatIfAnalyses_nextToken,
+    listWhatIfAnalysesResponse_nextToken,
+    listWhatIfAnalysesResponse_whatIfAnalyses,
+    listWhatIfAnalysesResponse_httpStatus,
+
+    -- ** ListWhatIfForecastExports
+    listWhatIfForecastExports_filters,
+    listWhatIfForecastExports_maxResults,
+    listWhatIfForecastExports_nextToken,
+    listWhatIfForecastExportsResponse_nextToken,
+    listWhatIfForecastExportsResponse_whatIfForecastExports,
+    listWhatIfForecastExportsResponse_httpStatus,
+
+    -- ** ListWhatIfForecasts
+    listWhatIfForecasts_filters,
+    listWhatIfForecasts_maxResults,
+    listWhatIfForecasts_nextToken,
+    listWhatIfForecastsResponse_nextToken,
+    listWhatIfForecastsResponse_whatIfForecasts,
+    listWhatIfForecastsResponse_httpStatus,
+
+    -- ** ResumeResource
+    resumeResource_resourceArn,
+
+    -- ** StopResource
+    stopResource_resourceArn,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateDatasetGroup
+    updateDatasetGroup_datasetGroupArn,
+    updateDatasetGroup_datasetArns,
+    updateDatasetGroupResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Action
+    action_attributeName,
+    action_operation,
+    action_value,
+
+    -- ** AdditionalDataset
+    additionalDataset_configuration,
+    additionalDataset_name,
+
+    -- ** AttributeConfig
+    attributeConfig_attributeName,
+    attributeConfig_transformations,
+
+    -- ** Baseline
+    baseline_predictorBaseline,
+
+    -- ** BaselineMetric
+    baselineMetric_name,
+    baselineMetric_value,
+
+    -- ** CategoricalParameterRange
+    categoricalParameterRange_name,
+    categoricalParameterRange_values,
+
+    -- ** ContinuousParameterRange
+    continuousParameterRange_scalingType,
+    continuousParameterRange_name,
+    continuousParameterRange_maxValue,
+    continuousParameterRange_minValue,
+
+    -- ** DataConfig
+    dataConfig_additionalDatasets,
+    dataConfig_attributeConfigs,
+    dataConfig_datasetGroupArn,
+
+    -- ** DataDestination
+    dataDestination_s3Config,
+
+    -- ** DataSource
+    dataSource_s3Config,
+
+    -- ** DatasetGroupSummary
+    datasetGroupSummary_creationTime,
+    datasetGroupSummary_datasetGroupArn,
+    datasetGroupSummary_datasetGroupName,
+    datasetGroupSummary_lastModificationTime,
+
+    -- ** DatasetImportJobSummary
+    datasetImportJobSummary_creationTime,
+    datasetImportJobSummary_dataSource,
+    datasetImportJobSummary_datasetImportJobArn,
+    datasetImportJobSummary_datasetImportJobName,
+    datasetImportJobSummary_lastModificationTime,
+    datasetImportJobSummary_message,
+    datasetImportJobSummary_status,
+
+    -- ** DatasetSummary
+    datasetSummary_creationTime,
+    datasetSummary_datasetArn,
+    datasetSummary_datasetName,
+    datasetSummary_datasetType,
+    datasetSummary_domain,
+    datasetSummary_lastModificationTime,
+
+    -- ** EncryptionConfig
+    encryptionConfig_roleArn,
+    encryptionConfig_kmsKeyArn,
+
+    -- ** ErrorMetric
+    errorMetric_forecastType,
+    errorMetric_mape,
+    errorMetric_mase,
+    errorMetric_rmse,
+    errorMetric_wape,
+
+    -- ** EvaluationParameters
+    evaluationParameters_backTestWindowOffset,
+    evaluationParameters_numberOfBacktestWindows,
+
+    -- ** EvaluationResult
+    evaluationResult_algorithmArn,
+    evaluationResult_testWindows,
+
+    -- ** ExplainabilityConfig
+    explainabilityConfig_timeSeriesGranularity,
+    explainabilityConfig_timePointGranularity,
+
+    -- ** ExplainabilityExportSummary
+    explainabilityExportSummary_creationTime,
+    explainabilityExportSummary_destination,
+    explainabilityExportSummary_explainabilityExportArn,
+    explainabilityExportSummary_explainabilityExportName,
+    explainabilityExportSummary_lastModificationTime,
+    explainabilityExportSummary_message,
+    explainabilityExportSummary_status,
+
+    -- ** ExplainabilityInfo
+    explainabilityInfo_explainabilityArn,
+    explainabilityInfo_status,
+
+    -- ** ExplainabilitySummary
+    explainabilitySummary_creationTime,
+    explainabilitySummary_explainabilityArn,
+    explainabilitySummary_explainabilityConfig,
+    explainabilitySummary_explainabilityName,
+    explainabilitySummary_lastModificationTime,
+    explainabilitySummary_message,
+    explainabilitySummary_resourceArn,
+    explainabilitySummary_status,
+
+    -- ** Featurization
+    featurization_featurizationPipeline,
+    featurization_attributeName,
+
+    -- ** FeaturizationConfig
+    featurizationConfig_featurizations,
+    featurizationConfig_forecastDimensions,
+    featurizationConfig_forecastFrequency,
+
+    -- ** FeaturizationMethod
+    featurizationMethod_featurizationMethodParameters,
+    featurizationMethod_featurizationMethodName,
+
+    -- ** Filter
+    filter_key,
+    filter_value,
+    filter_condition,
+
+    -- ** ForecastExportJobSummary
+    forecastExportJobSummary_creationTime,
+    forecastExportJobSummary_destination,
+    forecastExportJobSummary_forecastExportJobArn,
+    forecastExportJobSummary_forecastExportJobName,
+    forecastExportJobSummary_lastModificationTime,
+    forecastExportJobSummary_message,
+    forecastExportJobSummary_status,
+
+    -- ** ForecastSummary
+    forecastSummary_createdUsingAutoPredictor,
+    forecastSummary_creationTime,
+    forecastSummary_datasetGroupArn,
+    forecastSummary_forecastArn,
+    forecastSummary_forecastName,
+    forecastSummary_lastModificationTime,
+    forecastSummary_message,
+    forecastSummary_predictorArn,
+    forecastSummary_status,
+
+    -- ** HyperParameterTuningJobConfig
+    hyperParameterTuningJobConfig_parameterRanges,
+
+    -- ** InputDataConfig
+    inputDataConfig_supplementaryFeatures,
+    inputDataConfig_datasetGroupArn,
+
+    -- ** IntegerParameterRange
+    integerParameterRange_scalingType,
+    integerParameterRange_name,
+    integerParameterRange_maxValue,
+    integerParameterRange_minValue,
+
+    -- ** MetricResult
+    metricResult_metricName,
+    metricResult_metricValue,
+
+    -- ** Metrics
+    metrics_averageWeightedQuantileLoss,
+    metrics_errorMetrics,
+    metrics_rmse,
+    metrics_weightedQuantileLosses,
+
+    -- ** MonitorConfig
+    monitorConfig_monitorName,
+
+    -- ** MonitorDataSource
+    monitorDataSource_datasetImportJobArn,
+    monitorDataSource_forecastArn,
+    monitorDataSource_predictorArn,
+
+    -- ** MonitorInfo
+    monitorInfo_monitorArn,
+    monitorInfo_status,
+
+    -- ** MonitorSummary
+    monitorSummary_creationTime,
+    monitorSummary_lastModificationTime,
+    monitorSummary_monitorArn,
+    monitorSummary_monitorName,
+    monitorSummary_resourceArn,
+    monitorSummary_status,
+
+    -- ** ParameterRanges
+    parameterRanges_categoricalParameterRanges,
+    parameterRanges_continuousParameterRanges,
+    parameterRanges_integerParameterRanges,
+
+    -- ** PredictorBacktestExportJobSummary
+    predictorBacktestExportJobSummary_creationTime,
+    predictorBacktestExportJobSummary_destination,
+    predictorBacktestExportJobSummary_lastModificationTime,
+    predictorBacktestExportJobSummary_message,
+    predictorBacktestExportJobSummary_predictorBacktestExportJobArn,
+    predictorBacktestExportJobSummary_predictorBacktestExportJobName,
+    predictorBacktestExportJobSummary_status,
+
+    -- ** PredictorBaseline
+    predictorBaseline_baselineMetrics,
+
+    -- ** PredictorEvent
+    predictorEvent_datetime,
+    predictorEvent_detail,
+
+    -- ** PredictorExecution
+    predictorExecution_algorithmArn,
+    predictorExecution_testWindows,
+
+    -- ** PredictorExecutionDetails
+    predictorExecutionDetails_predictorExecutions,
+
+    -- ** PredictorMonitorEvaluation
+    predictorMonitorEvaluation_evaluationState,
+    predictorMonitorEvaluation_evaluationTime,
+    predictorMonitorEvaluation_message,
+    predictorMonitorEvaluation_metricResults,
+    predictorMonitorEvaluation_monitorArn,
+    predictorMonitorEvaluation_monitorDataSource,
+    predictorMonitorEvaluation_numItemsEvaluated,
+    predictorMonitorEvaluation_predictorEvent,
+    predictorMonitorEvaluation_resourceArn,
+    predictorMonitorEvaluation_windowEndDatetime,
+    predictorMonitorEvaluation_windowStartDatetime,
+
+    -- ** PredictorSummary
+    predictorSummary_creationTime,
+    predictorSummary_datasetGroupArn,
+    predictorSummary_isAutoPredictor,
+    predictorSummary_lastModificationTime,
+    predictorSummary_message,
+    predictorSummary_predictorArn,
+    predictorSummary_predictorName,
+    predictorSummary_referencePredictorSummary,
+    predictorSummary_status,
+
+    -- ** ReferencePredictorSummary
+    referencePredictorSummary_arn,
+    referencePredictorSummary_state,
+
+    -- ** S3Config
+    s3Config_kmsKeyArn,
+    s3Config_path,
+    s3Config_roleArn,
+
+    -- ** Schema
+    schema_attributes,
+
+    -- ** SchemaAttribute
+    schemaAttribute_attributeName,
+    schemaAttribute_attributeType,
+
+    -- ** Statistics
+    statistics_avg,
+    statistics_count,
+    statistics_countDistinct,
+    statistics_countDistinctLong,
+    statistics_countLong,
+    statistics_countNan,
+    statistics_countNanLong,
+    statistics_countNull,
+    statistics_countNullLong,
+    statistics_max,
+    statistics_min,
+    statistics_stddev,
+
+    -- ** SupplementaryFeature
+    supplementaryFeature_name,
+    supplementaryFeature_value,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TestWindowSummary
+    testWindowSummary_message,
+    testWindowSummary_status,
+    testWindowSummary_testWindowEnd,
+    testWindowSummary_testWindowStart,
+
+    -- ** TimeAlignmentBoundary
+    timeAlignmentBoundary_dayOfMonth,
+    timeAlignmentBoundary_dayOfWeek,
+    timeAlignmentBoundary_hour,
+    timeAlignmentBoundary_month,
+
+    -- ** TimeSeriesCondition
+    timeSeriesCondition_attributeName,
+    timeSeriesCondition_attributeValue,
+    timeSeriesCondition_condition,
+
+    -- ** TimeSeriesIdentifiers
+    timeSeriesIdentifiers_dataSource,
+    timeSeriesIdentifiers_format,
+    timeSeriesIdentifiers_schema,
+
+    -- ** TimeSeriesReplacementsDataSource
+    timeSeriesReplacementsDataSource_format,
+    timeSeriesReplacementsDataSource_timestampFormat,
+    timeSeriesReplacementsDataSource_s3Config,
+    timeSeriesReplacementsDataSource_schema,
+
+    -- ** TimeSeriesSelector
+    timeSeriesSelector_timeSeriesIdentifiers,
+
+    -- ** TimeSeriesTransformation
+    timeSeriesTransformation_action,
+    timeSeriesTransformation_timeSeriesConditions,
+
+    -- ** WeightedQuantileLoss
+    weightedQuantileLoss_lossValue,
+    weightedQuantileLoss_quantile,
+
+    -- ** WhatIfAnalysisSummary
+    whatIfAnalysisSummary_creationTime,
+    whatIfAnalysisSummary_forecastArn,
+    whatIfAnalysisSummary_lastModificationTime,
+    whatIfAnalysisSummary_message,
+    whatIfAnalysisSummary_status,
+    whatIfAnalysisSummary_whatIfAnalysisArn,
+    whatIfAnalysisSummary_whatIfAnalysisName,
+
+    -- ** WhatIfForecastExportSummary
+    whatIfForecastExportSummary_creationTime,
+    whatIfForecastExportSummary_destination,
+    whatIfForecastExportSummary_lastModificationTime,
+    whatIfForecastExportSummary_message,
+    whatIfForecastExportSummary_status,
+    whatIfForecastExportSummary_whatIfForecastArns,
+    whatIfForecastExportSummary_whatIfForecastExportArn,
+    whatIfForecastExportSummary_whatIfForecastExportName,
+
+    -- ** WhatIfForecastSummary
+    whatIfForecastSummary_creationTime,
+    whatIfForecastSummary_lastModificationTime,
+    whatIfForecastSummary_message,
+    whatIfForecastSummary_status,
+    whatIfForecastSummary_whatIfAnalysisArn,
+    whatIfForecastSummary_whatIfForecastArn,
+    whatIfForecastSummary_whatIfForecastName,
+
+    -- ** WindowSummary
+    windowSummary_evaluationType,
+    windowSummary_itemCount,
+    windowSummary_metrics,
+    windowSummary_testWindowEnd,
+    windowSummary_testWindowStart,
+  )
+where
+
+import Amazonka.Forecast.CreateAutoPredictor
+import Amazonka.Forecast.CreateDataset
+import Amazonka.Forecast.CreateDatasetGroup
+import Amazonka.Forecast.CreateDatasetImportJob
+import Amazonka.Forecast.CreateExplainability
+import Amazonka.Forecast.CreateExplainabilityExport
+import Amazonka.Forecast.CreateForecast
+import Amazonka.Forecast.CreateForecastExportJob
+import Amazonka.Forecast.CreateMonitor
+import Amazonka.Forecast.CreatePredictor
+import Amazonka.Forecast.CreatePredictorBacktestExportJob
+import Amazonka.Forecast.CreateWhatIfAnalysis
+import Amazonka.Forecast.CreateWhatIfForecast
+import Amazonka.Forecast.CreateWhatIfForecastExport
+import Amazonka.Forecast.DeleteDataset
+import Amazonka.Forecast.DeleteDatasetGroup
+import Amazonka.Forecast.DeleteDatasetImportJob
+import Amazonka.Forecast.DeleteExplainability
+import Amazonka.Forecast.DeleteExplainabilityExport
+import Amazonka.Forecast.DeleteForecast
+import Amazonka.Forecast.DeleteForecastExportJob
+import Amazonka.Forecast.DeleteMonitor
+import Amazonka.Forecast.DeletePredictor
+import Amazonka.Forecast.DeletePredictorBacktestExportJob
+import Amazonka.Forecast.DeleteResourceTree
+import Amazonka.Forecast.DeleteWhatIfAnalysis
+import Amazonka.Forecast.DeleteWhatIfForecast
+import Amazonka.Forecast.DeleteWhatIfForecastExport
+import Amazonka.Forecast.DescribeAutoPredictor
+import Amazonka.Forecast.DescribeDataset
+import Amazonka.Forecast.DescribeDatasetGroup
+import Amazonka.Forecast.DescribeDatasetImportJob
+import Amazonka.Forecast.DescribeExplainability
+import Amazonka.Forecast.DescribeExplainabilityExport
+import Amazonka.Forecast.DescribeForecast
+import Amazonka.Forecast.DescribeForecastExportJob
+import Amazonka.Forecast.DescribeMonitor
+import Amazonka.Forecast.DescribePredictor
+import Amazonka.Forecast.DescribePredictorBacktestExportJob
+import Amazonka.Forecast.DescribeWhatIfAnalysis
+import Amazonka.Forecast.DescribeWhatIfForecast
+import Amazonka.Forecast.DescribeWhatIfForecastExport
+import Amazonka.Forecast.GetAccuracyMetrics
+import Amazonka.Forecast.ListDatasetGroups
+import Amazonka.Forecast.ListDatasetImportJobs
+import Amazonka.Forecast.ListDatasets
+import Amazonka.Forecast.ListExplainabilities
+import Amazonka.Forecast.ListExplainabilityExports
+import Amazonka.Forecast.ListForecastExportJobs
+import Amazonka.Forecast.ListForecasts
+import Amazonka.Forecast.ListMonitorEvaluations
+import Amazonka.Forecast.ListMonitors
+import Amazonka.Forecast.ListPredictorBacktestExportJobs
+import Amazonka.Forecast.ListPredictors
+import Amazonka.Forecast.ListTagsForResource
+import Amazonka.Forecast.ListWhatIfAnalyses
+import Amazonka.Forecast.ListWhatIfForecastExports
+import Amazonka.Forecast.ListWhatIfForecasts
+import Amazonka.Forecast.ResumeResource
+import Amazonka.Forecast.StopResource
+import Amazonka.Forecast.TagResource
+import Amazonka.Forecast.Types.Action
+import Amazonka.Forecast.Types.AdditionalDataset
+import Amazonka.Forecast.Types.AttributeConfig
+import Amazonka.Forecast.Types.Baseline
+import Amazonka.Forecast.Types.BaselineMetric
+import Amazonka.Forecast.Types.CategoricalParameterRange
+import Amazonka.Forecast.Types.ContinuousParameterRange
+import Amazonka.Forecast.Types.DataConfig
+import Amazonka.Forecast.Types.DataDestination
+import Amazonka.Forecast.Types.DataSource
+import Amazonka.Forecast.Types.DatasetGroupSummary
+import Amazonka.Forecast.Types.DatasetImportJobSummary
+import Amazonka.Forecast.Types.DatasetSummary
+import Amazonka.Forecast.Types.EncryptionConfig
+import Amazonka.Forecast.Types.ErrorMetric
+import Amazonka.Forecast.Types.EvaluationParameters
+import Amazonka.Forecast.Types.EvaluationResult
+import Amazonka.Forecast.Types.ExplainabilityConfig
+import Amazonka.Forecast.Types.ExplainabilityExportSummary
+import Amazonka.Forecast.Types.ExplainabilityInfo
+import Amazonka.Forecast.Types.ExplainabilitySummary
+import Amazonka.Forecast.Types.Featurization
+import Amazonka.Forecast.Types.FeaturizationConfig
+import Amazonka.Forecast.Types.FeaturizationMethod
+import Amazonka.Forecast.Types.Filter
+import Amazonka.Forecast.Types.ForecastExportJobSummary
+import Amazonka.Forecast.Types.ForecastSummary
+import Amazonka.Forecast.Types.HyperParameterTuningJobConfig
+import Amazonka.Forecast.Types.InputDataConfig
+import Amazonka.Forecast.Types.IntegerParameterRange
+import Amazonka.Forecast.Types.MetricResult
+import Amazonka.Forecast.Types.Metrics
+import Amazonka.Forecast.Types.MonitorConfig
+import Amazonka.Forecast.Types.MonitorDataSource
+import Amazonka.Forecast.Types.MonitorInfo
+import Amazonka.Forecast.Types.MonitorSummary
+import Amazonka.Forecast.Types.ParameterRanges
+import Amazonka.Forecast.Types.PredictorBacktestExportJobSummary
+import Amazonka.Forecast.Types.PredictorBaseline
+import Amazonka.Forecast.Types.PredictorEvent
+import Amazonka.Forecast.Types.PredictorExecution
+import Amazonka.Forecast.Types.PredictorExecutionDetails
+import Amazonka.Forecast.Types.PredictorMonitorEvaluation
+import Amazonka.Forecast.Types.PredictorSummary
+import Amazonka.Forecast.Types.ReferencePredictorSummary
+import Amazonka.Forecast.Types.S3Config
+import Amazonka.Forecast.Types.Schema
+import Amazonka.Forecast.Types.SchemaAttribute
+import Amazonka.Forecast.Types.Statistics
+import Amazonka.Forecast.Types.SupplementaryFeature
+import Amazonka.Forecast.Types.Tag
+import Amazonka.Forecast.Types.TestWindowSummary
+import Amazonka.Forecast.Types.TimeAlignmentBoundary
+import Amazonka.Forecast.Types.TimeSeriesCondition
+import Amazonka.Forecast.Types.TimeSeriesIdentifiers
+import Amazonka.Forecast.Types.TimeSeriesReplacementsDataSource
+import Amazonka.Forecast.Types.TimeSeriesSelector
+import Amazonka.Forecast.Types.TimeSeriesTransformation
+import Amazonka.Forecast.Types.WeightedQuantileLoss
+import Amazonka.Forecast.Types.WhatIfAnalysisSummary
+import Amazonka.Forecast.Types.WhatIfForecastExportSummary
+import Amazonka.Forecast.Types.WhatIfForecastSummary
+import Amazonka.Forecast.Types.WindowSummary
+import Amazonka.Forecast.UntagResource
+import Amazonka.Forecast.UpdateDatasetGroup
diff --git a/gen/Amazonka/Forecast/ListDatasetGroups.hs b/gen/Amazonka/Forecast/ListDatasetGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListDatasetGroups.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListDatasetGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of dataset groups created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetGroup.html CreateDatasetGroup>
+-- operation. For each dataset group, this operation returns a summary of
+-- its properties, including its Amazon Resource Name (ARN). You can
+-- retrieve the complete set of properties by using the dataset group ARN
+-- with the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDatasetGroup.html DescribeDatasetGroup>
+-- operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListDatasetGroups
+  ( -- * Creating a Request
+    ListDatasetGroups (..),
+    newListDatasetGroups,
+
+    -- * Request Lenses
+    listDatasetGroups_maxResults,
+    listDatasetGroups_nextToken,
+
+    -- * Destructuring the Response
+    ListDatasetGroupsResponse (..),
+    newListDatasetGroupsResponse,
+
+    -- * Response Lenses
+    listDatasetGroupsResponse_datasetGroups,
+    listDatasetGroupsResponse_nextToken,
+    listDatasetGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDatasetGroups' smart constructor.
+data ListDatasetGroups = ListDatasetGroups'
+  { -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDatasetGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listDatasetGroups_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listDatasetGroups_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListDatasetGroups ::
+  ListDatasetGroups
+newListDatasetGroups =
+  ListDatasetGroups'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of items to return in the response.
+listDatasetGroups_maxResults :: Lens.Lens' ListDatasetGroups (Prelude.Maybe Prelude.Natural)
+listDatasetGroups_maxResults = Lens.lens (\ListDatasetGroups' {maxResults} -> maxResults) (\s@ListDatasetGroups' {} a -> s {maxResults = a} :: ListDatasetGroups)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listDatasetGroups_nextToken :: Lens.Lens' ListDatasetGroups (Prelude.Maybe Prelude.Text)
+listDatasetGroups_nextToken = Lens.lens (\ListDatasetGroups' {nextToken} -> nextToken) (\s@ListDatasetGroups' {} a -> s {nextToken = a} :: ListDatasetGroups)
+
+instance Core.AWSPager ListDatasetGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDatasetGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDatasetGroupsResponse_datasetGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDatasetGroups_nextToken
+          Lens..~ rs
+          Lens.^? listDatasetGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDatasetGroups where
+  type
+    AWSResponse ListDatasetGroups =
+      ListDatasetGroupsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDatasetGroupsResponse'
+            Prelude.<$> (x Data..?> "DatasetGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDatasetGroups where
+  hashWithSalt _salt ListDatasetGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDatasetGroups where
+  rnf ListDatasetGroups' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDatasetGroups where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListDatasetGroups" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDatasetGroups where
+  toJSON ListDatasetGroups' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListDatasetGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDatasetGroups where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDatasetGroupsResponse' smart constructor.
+data ListDatasetGroupsResponse = ListDatasetGroupsResponse'
+  { -- | An array of objects that summarize each dataset group\'s properties.
+    datasetGroups :: Prelude.Maybe [DatasetGroupSummary],
+    -- | If the response is truncated, Amazon Forecast returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDatasetGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetGroups', 'listDatasetGroupsResponse_datasetGroups' - An array of objects that summarize each dataset group\'s properties.
+--
+-- 'nextToken', 'listDatasetGroupsResponse_nextToken' - If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listDatasetGroupsResponse_httpStatus' - The response's http status code.
+newListDatasetGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDatasetGroupsResponse
+newListDatasetGroupsResponse pHttpStatus_ =
+  ListDatasetGroupsResponse'
+    { datasetGroups =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects that summarize each dataset group\'s properties.
+listDatasetGroupsResponse_datasetGroups :: Lens.Lens' ListDatasetGroupsResponse (Prelude.Maybe [DatasetGroupSummary])
+listDatasetGroupsResponse_datasetGroups = Lens.lens (\ListDatasetGroupsResponse' {datasetGroups} -> datasetGroups) (\s@ListDatasetGroupsResponse' {} a -> s {datasetGroups = a} :: ListDatasetGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+listDatasetGroupsResponse_nextToken :: Lens.Lens' ListDatasetGroupsResponse (Prelude.Maybe Prelude.Text)
+listDatasetGroupsResponse_nextToken = Lens.lens (\ListDatasetGroupsResponse' {nextToken} -> nextToken) (\s@ListDatasetGroupsResponse' {} a -> s {nextToken = a} :: ListDatasetGroupsResponse)
+
+-- | The response's http status code.
+listDatasetGroupsResponse_httpStatus :: Lens.Lens' ListDatasetGroupsResponse Prelude.Int
+listDatasetGroupsResponse_httpStatus = Lens.lens (\ListDatasetGroupsResponse' {httpStatus} -> httpStatus) (\s@ListDatasetGroupsResponse' {} a -> s {httpStatus = a} :: ListDatasetGroupsResponse)
+
+instance Prelude.NFData ListDatasetGroupsResponse where
+  rnf ListDatasetGroupsResponse' {..} =
+    Prelude.rnf datasetGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListDatasetImportJobs.hs b/gen/Amazonka/Forecast/ListDatasetImportJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListDatasetImportJobs.hs
@@ -0,0 +1,316 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListDatasetImportJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of dataset import jobs created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation. For each import job, this operation returns a summary of its
+-- properties, including its Amazon Resource Name (ARN). You can retrieve
+-- the complete set of properties by using the ARN with the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDatasetImportJob.html DescribeDatasetImportJob>
+-- operation. You can filter the list by providing an array of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_Filter.html Filter>
+-- objects.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListDatasetImportJobs
+  ( -- * Creating a Request
+    ListDatasetImportJobs (..),
+    newListDatasetImportJobs,
+
+    -- * Request Lenses
+    listDatasetImportJobs_filters,
+    listDatasetImportJobs_maxResults,
+    listDatasetImportJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListDatasetImportJobsResponse (..),
+    newListDatasetImportJobsResponse,
+
+    -- * Response Lenses
+    listDatasetImportJobsResponse_datasetImportJobs,
+    listDatasetImportJobsResponse_nextToken,
+    listDatasetImportJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDatasetImportJobs' smart constructor.
+data ListDatasetImportJobs = ListDatasetImportJobs'
+  { -- | An array of filters. For each filter, you provide a condition and a
+    -- match statement. The condition is either @IS@ or @IS_NOT@, which
+    -- specifies whether to include or exclude the datasets that match the
+    -- statement from the list, respectively. The match statement consists of a
+    -- key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@. To include the datasets that match the statement, specify
+    --     @IS@. To exclude matching datasets, specify @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @DatasetArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    --
+    -- For example, to list all dataset import jobs whose status is ACTIVE, you
+    -- specify the following filter:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDatasetImportJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listDatasetImportJobs_filters' - An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the datasets that match the
+-- statement from the list, respectively. The match statement consists of a
+-- key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the datasets that match the statement, specify
+--     @IS@. To exclude matching datasets, specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @DatasetArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all dataset import jobs whose status is ACTIVE, you
+-- specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+--
+-- 'maxResults', 'listDatasetImportJobs_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listDatasetImportJobs_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListDatasetImportJobs ::
+  ListDatasetImportJobs
+newListDatasetImportJobs =
+  ListDatasetImportJobs'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the datasets that match the
+-- statement from the list, respectively. The match statement consists of a
+-- key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the datasets that match the statement, specify
+--     @IS@. To exclude matching datasets, specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @DatasetArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all dataset import jobs whose status is ACTIVE, you
+-- specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+listDatasetImportJobs_filters :: Lens.Lens' ListDatasetImportJobs (Prelude.Maybe [Filter])
+listDatasetImportJobs_filters = Lens.lens (\ListDatasetImportJobs' {filters} -> filters) (\s@ListDatasetImportJobs' {} a -> s {filters = a} :: ListDatasetImportJobs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listDatasetImportJobs_maxResults :: Lens.Lens' ListDatasetImportJobs (Prelude.Maybe Prelude.Natural)
+listDatasetImportJobs_maxResults = Lens.lens (\ListDatasetImportJobs' {maxResults} -> maxResults) (\s@ListDatasetImportJobs' {} a -> s {maxResults = a} :: ListDatasetImportJobs)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listDatasetImportJobs_nextToken :: Lens.Lens' ListDatasetImportJobs (Prelude.Maybe Prelude.Text)
+listDatasetImportJobs_nextToken = Lens.lens (\ListDatasetImportJobs' {nextToken} -> nextToken) (\s@ListDatasetImportJobs' {} a -> s {nextToken = a} :: ListDatasetImportJobs)
+
+instance Core.AWSPager ListDatasetImportJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDatasetImportJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDatasetImportJobsResponse_datasetImportJobs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDatasetImportJobs_nextToken
+          Lens..~ rs
+          Lens.^? listDatasetImportJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDatasetImportJobs where
+  type
+    AWSResponse ListDatasetImportJobs =
+      ListDatasetImportJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDatasetImportJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "DatasetImportJobs"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDatasetImportJobs where
+  hashWithSalt _salt ListDatasetImportJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDatasetImportJobs where
+  rnf ListDatasetImportJobs' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDatasetImportJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListDatasetImportJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDatasetImportJobs where
+  toJSON ListDatasetImportJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListDatasetImportJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDatasetImportJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDatasetImportJobsResponse' smart constructor.
+data ListDatasetImportJobsResponse = ListDatasetImportJobsResponse'
+  { -- | An array of objects that summarize each dataset import job\'s
+    -- properties.
+    datasetImportJobs :: Prelude.Maybe [DatasetImportJobSummary],
+    -- | If the response is truncated, Amazon Forecast returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDatasetImportJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetImportJobs', 'listDatasetImportJobsResponse_datasetImportJobs' - An array of objects that summarize each dataset import job\'s
+-- properties.
+--
+-- 'nextToken', 'listDatasetImportJobsResponse_nextToken' - If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listDatasetImportJobsResponse_httpStatus' - The response's http status code.
+newListDatasetImportJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDatasetImportJobsResponse
+newListDatasetImportJobsResponse pHttpStatus_ =
+  ListDatasetImportJobsResponse'
+    { datasetImportJobs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects that summarize each dataset import job\'s
+-- properties.
+listDatasetImportJobsResponse_datasetImportJobs :: Lens.Lens' ListDatasetImportJobsResponse (Prelude.Maybe [DatasetImportJobSummary])
+listDatasetImportJobsResponse_datasetImportJobs = Lens.lens (\ListDatasetImportJobsResponse' {datasetImportJobs} -> datasetImportJobs) (\s@ListDatasetImportJobsResponse' {} a -> s {datasetImportJobs = a} :: ListDatasetImportJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+listDatasetImportJobsResponse_nextToken :: Lens.Lens' ListDatasetImportJobsResponse (Prelude.Maybe Prelude.Text)
+listDatasetImportJobsResponse_nextToken = Lens.lens (\ListDatasetImportJobsResponse' {nextToken} -> nextToken) (\s@ListDatasetImportJobsResponse' {} a -> s {nextToken = a} :: ListDatasetImportJobsResponse)
+
+-- | The response's http status code.
+listDatasetImportJobsResponse_httpStatus :: Lens.Lens' ListDatasetImportJobsResponse Prelude.Int
+listDatasetImportJobsResponse_httpStatus = Lens.lens (\ListDatasetImportJobsResponse' {httpStatus} -> httpStatus) (\s@ListDatasetImportJobsResponse' {} a -> s {httpStatus = a} :: ListDatasetImportJobsResponse)
+
+instance Prelude.NFData ListDatasetImportJobsResponse where
+  rnf ListDatasetImportJobsResponse' {..} =
+    Prelude.rnf datasetImportJobs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListDatasets.hs b/gen/Amazonka/Forecast/ListDatasets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListDatasets.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListDatasets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of datasets created using the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDataset.html CreateDataset>
+-- operation. For each dataset, a summary of its properties, including its
+-- Amazon Resource Name (ARN), is returned. To retrieve the complete set of
+-- properties, use the ARN with the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDataset.html DescribeDataset>
+-- operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListDatasets
+  ( -- * Creating a Request
+    ListDatasets (..),
+    newListDatasets,
+
+    -- * Request Lenses
+    listDatasets_maxResults,
+    listDatasets_nextToken,
+
+    -- * Destructuring the Response
+    ListDatasetsResponse (..),
+    newListDatasetsResponse,
+
+    -- * Response Lenses
+    listDatasetsResponse_datasets,
+    listDatasetsResponse_nextToken,
+    listDatasetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListDatasets' smart constructor.
+data ListDatasets = ListDatasets'
+  { -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDatasets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listDatasets_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listDatasets_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListDatasets ::
+  ListDatasets
+newListDatasets =
+  ListDatasets'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of items to return in the response.
+listDatasets_maxResults :: Lens.Lens' ListDatasets (Prelude.Maybe Prelude.Natural)
+listDatasets_maxResults = Lens.lens (\ListDatasets' {maxResults} -> maxResults) (\s@ListDatasets' {} a -> s {maxResults = a} :: ListDatasets)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listDatasets_nextToken :: Lens.Lens' ListDatasets (Prelude.Maybe Prelude.Text)
+listDatasets_nextToken = Lens.lens (\ListDatasets' {nextToken} -> nextToken) (\s@ListDatasets' {} a -> s {nextToken = a} :: ListDatasets)
+
+instance Core.AWSPager ListDatasets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDatasetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDatasetsResponse_datasets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDatasets_nextToken
+          Lens..~ rs
+          Lens.^? listDatasetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDatasets where
+  type AWSResponse ListDatasets = ListDatasetsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListDatasetsResponse'
+            Prelude.<$> (x Data..?> "Datasets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDatasets where
+  hashWithSalt _salt ListDatasets' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDatasets where
+  rnf ListDatasets' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDatasets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListDatasets" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListDatasets where
+  toJSON ListDatasets' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListDatasets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDatasets where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListDatasetsResponse' smart constructor.
+data ListDatasetsResponse = ListDatasetsResponse'
+  { -- | An array of objects that summarize each dataset\'s properties.
+    datasets :: Prelude.Maybe [DatasetSummary],
+    -- | If the response is truncated, Amazon Forecast returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDatasetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasets', 'listDatasetsResponse_datasets' - An array of objects that summarize each dataset\'s properties.
+--
+-- 'nextToken', 'listDatasetsResponse_nextToken' - If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listDatasetsResponse_httpStatus' - The response's http status code.
+newListDatasetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDatasetsResponse
+newListDatasetsResponse pHttpStatus_ =
+  ListDatasetsResponse'
+    { datasets = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects that summarize each dataset\'s properties.
+listDatasetsResponse_datasets :: Lens.Lens' ListDatasetsResponse (Prelude.Maybe [DatasetSummary])
+listDatasetsResponse_datasets = Lens.lens (\ListDatasetsResponse' {datasets} -> datasets) (\s@ListDatasetsResponse' {} a -> s {datasets = a} :: ListDatasetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+listDatasetsResponse_nextToken :: Lens.Lens' ListDatasetsResponse (Prelude.Maybe Prelude.Text)
+listDatasetsResponse_nextToken = Lens.lens (\ListDatasetsResponse' {nextToken} -> nextToken) (\s@ListDatasetsResponse' {} a -> s {nextToken = a} :: ListDatasetsResponse)
+
+-- | The response's http status code.
+listDatasetsResponse_httpStatus :: Lens.Lens' ListDatasetsResponse Prelude.Int
+listDatasetsResponse_httpStatus = Lens.lens (\ListDatasetsResponse' {httpStatus} -> httpStatus) (\s@ListDatasetsResponse' {} a -> s {httpStatus = a} :: ListDatasetsResponse)
+
+instance Prelude.NFData ListDatasetsResponse where
+  rnf ListDatasetsResponse' {..} =
+    Prelude.rnf datasets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListExplainabilities.hs b/gen/Amazonka/Forecast/ListExplainabilities.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListExplainabilities.hs
@@ -0,0 +1,294 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListExplainabilities
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of Explainability resources created using the
+-- CreateExplainability operation. This operation returns a summary for
+-- each Explainability. You can filter the list using an array of Filter
+-- objects.
+--
+-- To retrieve the complete set of properties for a particular
+-- Explainability resource, use the ARN with the DescribeExplainability
+-- operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListExplainabilities
+  ( -- * Creating a Request
+    ListExplainabilities (..),
+    newListExplainabilities,
+
+    -- * Request Lenses
+    listExplainabilities_filters,
+    listExplainabilities_maxResults,
+    listExplainabilities_nextToken,
+
+    -- * Destructuring the Response
+    ListExplainabilitiesResponse (..),
+    newListExplainabilitiesResponse,
+
+    -- * Response Lenses
+    listExplainabilitiesResponse_explainabilities,
+    listExplainabilitiesResponse_nextToken,
+    listExplainabilitiesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExplainabilities' smart constructor.
+data ListExplainabilities = ListExplainabilities'
+  { -- | An array of filters. For each filter, provide a condition and a match
+    -- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+    -- whether to include or exclude the resources that match the statement
+    -- from the list. The match statement consists of a key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @ResourceArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items returned in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a NextToken. To retrieve the next set of results, use the token
+    -- in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExplainabilities' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listExplainabilities_filters' - An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude the resources that match the statement
+-- from the list. The match statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @ResourceArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- 'maxResults', 'listExplainabilities_maxResults' - The number of items returned in the response.
+--
+-- 'nextToken', 'listExplainabilities_nextToken' - If the result of the previous request was truncated, the response
+-- includes a NextToken. To retrieve the next set of results, use the token
+-- in the next request. Tokens expire after 24 hours.
+newListExplainabilities ::
+  ListExplainabilities
+newListExplainabilities =
+  ListExplainabilities'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude the resources that match the statement
+-- from the list. The match statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @ResourceArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+listExplainabilities_filters :: Lens.Lens' ListExplainabilities (Prelude.Maybe [Filter])
+listExplainabilities_filters = Lens.lens (\ListExplainabilities' {filters} -> filters) (\s@ListExplainabilities' {} a -> s {filters = a} :: ListExplainabilities) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items returned in the response.
+listExplainabilities_maxResults :: Lens.Lens' ListExplainabilities (Prelude.Maybe Prelude.Natural)
+listExplainabilities_maxResults = Lens.lens (\ListExplainabilities' {maxResults} -> maxResults) (\s@ListExplainabilities' {} a -> s {maxResults = a} :: ListExplainabilities)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a NextToken. To retrieve the next set of results, use the token
+-- in the next request. Tokens expire after 24 hours.
+listExplainabilities_nextToken :: Lens.Lens' ListExplainabilities (Prelude.Maybe Prelude.Text)
+listExplainabilities_nextToken = Lens.lens (\ListExplainabilities' {nextToken} -> nextToken) (\s@ListExplainabilities' {} a -> s {nextToken = a} :: ListExplainabilities)
+
+instance Core.AWSPager ListExplainabilities where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listExplainabilitiesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listExplainabilitiesResponse_explainabilities
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listExplainabilities_nextToken
+          Lens..~ rs
+          Lens.^? listExplainabilitiesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListExplainabilities where
+  type
+    AWSResponse ListExplainabilities =
+      ListExplainabilitiesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExplainabilitiesResponse'
+            Prelude.<$> ( x
+                            Data..?> "Explainabilities"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExplainabilities where
+  hashWithSalt _salt ListExplainabilities' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListExplainabilities where
+  rnf ListExplainabilities' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListExplainabilities where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListExplainabilities" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListExplainabilities where
+  toJSON ListExplainabilities' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListExplainabilities where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListExplainabilities where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListExplainabilitiesResponse' smart constructor.
+data ListExplainabilitiesResponse = ListExplainabilitiesResponse'
+  { -- | An array of objects that summarize the properties of each Explainability
+    -- resource.
+    explainabilities :: Prelude.Maybe [ExplainabilitySummary],
+    -- | Returns this token if the response is truncated. To retrieve the next
+    -- set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExplainabilitiesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilities', 'listExplainabilitiesResponse_explainabilities' - An array of objects that summarize the properties of each Explainability
+-- resource.
+--
+-- 'nextToken', 'listExplainabilitiesResponse_nextToken' - Returns this token if the response is truncated. To retrieve the next
+-- set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listExplainabilitiesResponse_httpStatus' - The response's http status code.
+newListExplainabilitiesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExplainabilitiesResponse
+newListExplainabilitiesResponse pHttpStatus_ =
+  ListExplainabilitiesResponse'
+    { explainabilities =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects that summarize the properties of each Explainability
+-- resource.
+listExplainabilitiesResponse_explainabilities :: Lens.Lens' ListExplainabilitiesResponse (Prelude.Maybe [ExplainabilitySummary])
+listExplainabilitiesResponse_explainabilities = Lens.lens (\ListExplainabilitiesResponse' {explainabilities} -> explainabilities) (\s@ListExplainabilitiesResponse' {} a -> s {explainabilities = a} :: ListExplainabilitiesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Returns this token if the response is truncated. To retrieve the next
+-- set of results, use the token in the next request.
+listExplainabilitiesResponse_nextToken :: Lens.Lens' ListExplainabilitiesResponse (Prelude.Maybe Prelude.Text)
+listExplainabilitiesResponse_nextToken = Lens.lens (\ListExplainabilitiesResponse' {nextToken} -> nextToken) (\s@ListExplainabilitiesResponse' {} a -> s {nextToken = a} :: ListExplainabilitiesResponse)
+
+-- | The response's http status code.
+listExplainabilitiesResponse_httpStatus :: Lens.Lens' ListExplainabilitiesResponse Prelude.Int
+listExplainabilitiesResponse_httpStatus = Lens.lens (\ListExplainabilitiesResponse' {httpStatus} -> httpStatus) (\s@ListExplainabilitiesResponse' {} a -> s {httpStatus = a} :: ListExplainabilitiesResponse)
+
+instance Prelude.NFData ListExplainabilitiesResponse where
+  rnf ListExplainabilitiesResponse' {..} =
+    Prelude.rnf explainabilities
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListExplainabilityExports.hs b/gen/Amazonka/Forecast/ListExplainabilityExports.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListExplainabilityExports.hs
@@ -0,0 +1,298 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListExplainabilityExports
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of Explainability exports created using the
+-- CreateExplainabilityExport operation. This operation returns a summary
+-- for each Explainability export. You can filter the list using an array
+-- of Filter objects.
+--
+-- To retrieve the complete set of properties for a particular
+-- Explainability export, use the ARN with the DescribeExplainability
+-- operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListExplainabilityExports
+  ( -- * Creating a Request
+    ListExplainabilityExports (..),
+    newListExplainabilityExports,
+
+    -- * Request Lenses
+    listExplainabilityExports_filters,
+    listExplainabilityExports_maxResults,
+    listExplainabilityExports_nextToken,
+
+    -- * Destructuring the Response
+    ListExplainabilityExportsResponse (..),
+    newListExplainabilityExportsResponse,
+
+    -- * Response Lenses
+    listExplainabilityExportsResponse_explainabilityExports,
+    listExplainabilityExportsResponse_nextToken,
+    listExplainabilityExportsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListExplainabilityExports' smart constructor.
+data ListExplainabilityExports = ListExplainabilityExports'
+  { -- | An array of filters. For each filter, provide a condition and a match
+    -- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+    -- whether to include or exclude resources that match the statement from
+    -- the list. The match statement consists of a key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @ResourceArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a NextToken. To retrieve the next set of results, use the token
+    -- in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExplainabilityExports' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listExplainabilityExports_filters' - An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude resources that match the statement from
+-- the list. The match statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @ResourceArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- 'maxResults', 'listExplainabilityExports_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listExplainabilityExports_nextToken' - If the result of the previous request was truncated, the response
+-- includes a NextToken. To retrieve the next set of results, use the token
+-- in the next request. Tokens expire after 24 hours.
+newListExplainabilityExports ::
+  ListExplainabilityExports
+newListExplainabilityExports =
+  ListExplainabilityExports'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude resources that match the statement from
+-- the list. The match statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @ResourceArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+listExplainabilityExports_filters :: Lens.Lens' ListExplainabilityExports (Prelude.Maybe [Filter])
+listExplainabilityExports_filters = Lens.lens (\ListExplainabilityExports' {filters} -> filters) (\s@ListExplainabilityExports' {} a -> s {filters = a} :: ListExplainabilityExports) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listExplainabilityExports_maxResults :: Lens.Lens' ListExplainabilityExports (Prelude.Maybe Prelude.Natural)
+listExplainabilityExports_maxResults = Lens.lens (\ListExplainabilityExports' {maxResults} -> maxResults) (\s@ListExplainabilityExports' {} a -> s {maxResults = a} :: ListExplainabilityExports)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a NextToken. To retrieve the next set of results, use the token
+-- in the next request. Tokens expire after 24 hours.
+listExplainabilityExports_nextToken :: Lens.Lens' ListExplainabilityExports (Prelude.Maybe Prelude.Text)
+listExplainabilityExports_nextToken = Lens.lens (\ListExplainabilityExports' {nextToken} -> nextToken) (\s@ListExplainabilityExports' {} a -> s {nextToken = a} :: ListExplainabilityExports)
+
+instance Core.AWSPager ListExplainabilityExports where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listExplainabilityExportsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listExplainabilityExportsResponse_explainabilityExports
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listExplainabilityExports_nextToken
+          Lens..~ rs
+          Lens.^? listExplainabilityExportsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListExplainabilityExports where
+  type
+    AWSResponse ListExplainabilityExports =
+      ListExplainabilityExportsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListExplainabilityExportsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ExplainabilityExports"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListExplainabilityExports where
+  hashWithSalt _salt ListExplainabilityExports' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListExplainabilityExports where
+  rnf ListExplainabilityExports' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListExplainabilityExports where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListExplainabilityExports" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListExplainabilityExports where
+  toJSON ListExplainabilityExports' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListExplainabilityExports where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListExplainabilityExports where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListExplainabilityExportsResponse' smart constructor.
+data ListExplainabilityExportsResponse = ListExplainabilityExportsResponse'
+  { -- | An array of objects that summarize the properties of each Explainability
+    -- export.
+    explainabilityExports :: Prelude.Maybe [ExplainabilityExportSummary],
+    -- | Returns this token if the response is truncated. To retrieve the next
+    -- set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListExplainabilityExportsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilityExports', 'listExplainabilityExportsResponse_explainabilityExports' - An array of objects that summarize the properties of each Explainability
+-- export.
+--
+-- 'nextToken', 'listExplainabilityExportsResponse_nextToken' - Returns this token if the response is truncated. To retrieve the next
+-- set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listExplainabilityExportsResponse_httpStatus' - The response's http status code.
+newListExplainabilityExportsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListExplainabilityExportsResponse
+newListExplainabilityExportsResponse pHttpStatus_ =
+  ListExplainabilityExportsResponse'
+    { explainabilityExports =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects that summarize the properties of each Explainability
+-- export.
+listExplainabilityExportsResponse_explainabilityExports :: Lens.Lens' ListExplainabilityExportsResponse (Prelude.Maybe [ExplainabilityExportSummary])
+listExplainabilityExportsResponse_explainabilityExports = Lens.lens (\ListExplainabilityExportsResponse' {explainabilityExports} -> explainabilityExports) (\s@ListExplainabilityExportsResponse' {} a -> s {explainabilityExports = a} :: ListExplainabilityExportsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Returns this token if the response is truncated. To retrieve the next
+-- set of results, use the token in the next request.
+listExplainabilityExportsResponse_nextToken :: Lens.Lens' ListExplainabilityExportsResponse (Prelude.Maybe Prelude.Text)
+listExplainabilityExportsResponse_nextToken = Lens.lens (\ListExplainabilityExportsResponse' {nextToken} -> nextToken) (\s@ListExplainabilityExportsResponse' {} a -> s {nextToken = a} :: ListExplainabilityExportsResponse)
+
+-- | The response's http status code.
+listExplainabilityExportsResponse_httpStatus :: Lens.Lens' ListExplainabilityExportsResponse Prelude.Int
+listExplainabilityExportsResponse_httpStatus = Lens.lens (\ListExplainabilityExportsResponse' {httpStatus} -> httpStatus) (\s@ListExplainabilityExportsResponse' {} a -> s {httpStatus = a} :: ListExplainabilityExportsResponse)
+
+instance
+  Prelude.NFData
+    ListExplainabilityExportsResponse
+  where
+  rnf ListExplainabilityExportsResponse' {..} =
+    Prelude.rnf explainabilityExports
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListForecastExportJobs.hs b/gen/Amazonka/Forecast/ListForecastExportJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListForecastExportJobs.hs
@@ -0,0 +1,316 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListForecastExportJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of forecast export jobs created using the
+-- CreateForecastExportJob operation. For each forecast export job, this
+-- operation returns a summary of its properties, including its Amazon
+-- Resource Name (ARN). To retrieve the complete set of properties, use the
+-- ARN with the DescribeForecastExportJob operation. You can filter the
+-- list using an array of Filter objects.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListForecastExportJobs
+  ( -- * Creating a Request
+    ListForecastExportJobs (..),
+    newListForecastExportJobs,
+
+    -- * Request Lenses
+    listForecastExportJobs_filters,
+    listForecastExportJobs_maxResults,
+    listForecastExportJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListForecastExportJobsResponse (..),
+    newListForecastExportJobsResponse,
+
+    -- * Response Lenses
+    listForecastExportJobsResponse_forecastExportJobs,
+    listForecastExportJobsResponse_nextToken,
+    listForecastExportJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListForecastExportJobs' smart constructor.
+data ListForecastExportJobs = ListForecastExportJobs'
+  { -- | An array of filters. For each filter, you provide a condition and a
+    -- match statement. The condition is either @IS@ or @IS_NOT@, which
+    -- specifies whether to include or exclude the forecast export jobs that
+    -- match the statement from the list, respectively. The match statement
+    -- consists of a key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@. To include the forecast export jobs that match the
+    --     statement, specify @IS@. To exclude matching forecast export jobs,
+    --     specify @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @ForecastArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    --
+    -- For example, to list all jobs that export a forecast named
+    -- /electricityforecast/, specify the following filter:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"ForecastArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityforecast\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListForecastExportJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listForecastExportJobs_filters' - An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the forecast export jobs that
+-- match the statement from the list, respectively. The match statement
+-- consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the forecast export jobs that match the
+--     statement, specify @IS@. To exclude matching forecast export jobs,
+--     specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @ForecastArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all jobs that export a forecast named
+-- /electricityforecast/, specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"ForecastArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityforecast\" } ]@
+--
+-- 'maxResults', 'listForecastExportJobs_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listForecastExportJobs_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListForecastExportJobs ::
+  ListForecastExportJobs
+newListForecastExportJobs =
+  ListForecastExportJobs'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the forecast export jobs that
+-- match the statement from the list, respectively. The match statement
+-- consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the forecast export jobs that match the
+--     statement, specify @IS@. To exclude matching forecast export jobs,
+--     specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @ForecastArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all jobs that export a forecast named
+-- /electricityforecast/, specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"ForecastArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityforecast\" } ]@
+listForecastExportJobs_filters :: Lens.Lens' ListForecastExportJobs (Prelude.Maybe [Filter])
+listForecastExportJobs_filters = Lens.lens (\ListForecastExportJobs' {filters} -> filters) (\s@ListForecastExportJobs' {} a -> s {filters = a} :: ListForecastExportJobs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listForecastExportJobs_maxResults :: Lens.Lens' ListForecastExportJobs (Prelude.Maybe Prelude.Natural)
+listForecastExportJobs_maxResults = Lens.lens (\ListForecastExportJobs' {maxResults} -> maxResults) (\s@ListForecastExportJobs' {} a -> s {maxResults = a} :: ListForecastExportJobs)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listForecastExportJobs_nextToken :: Lens.Lens' ListForecastExportJobs (Prelude.Maybe Prelude.Text)
+listForecastExportJobs_nextToken = Lens.lens (\ListForecastExportJobs' {nextToken} -> nextToken) (\s@ListForecastExportJobs' {} a -> s {nextToken = a} :: ListForecastExportJobs)
+
+instance Core.AWSPager ListForecastExportJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listForecastExportJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listForecastExportJobsResponse_forecastExportJobs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listForecastExportJobs_nextToken
+          Lens..~ rs
+          Lens.^? listForecastExportJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListForecastExportJobs where
+  type
+    AWSResponse ListForecastExportJobs =
+      ListForecastExportJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListForecastExportJobsResponse'
+            Prelude.<$> ( x
+                            Data..?> "ForecastExportJobs"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListForecastExportJobs where
+  hashWithSalt _salt ListForecastExportJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListForecastExportJobs where
+  rnf ListForecastExportJobs' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListForecastExportJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListForecastExportJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListForecastExportJobs where
+  toJSON ListForecastExportJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListForecastExportJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListForecastExportJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListForecastExportJobsResponse' smart constructor.
+data ListForecastExportJobsResponse = ListForecastExportJobsResponse'
+  { -- | An array of objects that summarize each export job\'s properties.
+    forecastExportJobs :: Prelude.Maybe [ForecastExportJobSummary],
+    -- | If the response is truncated, Amazon Forecast returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListForecastExportJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastExportJobs', 'listForecastExportJobsResponse_forecastExportJobs' - An array of objects that summarize each export job\'s properties.
+--
+-- 'nextToken', 'listForecastExportJobsResponse_nextToken' - If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listForecastExportJobsResponse_httpStatus' - The response's http status code.
+newListForecastExportJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListForecastExportJobsResponse
+newListForecastExportJobsResponse pHttpStatus_ =
+  ListForecastExportJobsResponse'
+    { forecastExportJobs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects that summarize each export job\'s properties.
+listForecastExportJobsResponse_forecastExportJobs :: Lens.Lens' ListForecastExportJobsResponse (Prelude.Maybe [ForecastExportJobSummary])
+listForecastExportJobsResponse_forecastExportJobs = Lens.lens (\ListForecastExportJobsResponse' {forecastExportJobs} -> forecastExportJobs) (\s@ListForecastExportJobsResponse' {} a -> s {forecastExportJobs = a} :: ListForecastExportJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+listForecastExportJobsResponse_nextToken :: Lens.Lens' ListForecastExportJobsResponse (Prelude.Maybe Prelude.Text)
+listForecastExportJobsResponse_nextToken = Lens.lens (\ListForecastExportJobsResponse' {nextToken} -> nextToken) (\s@ListForecastExportJobsResponse' {} a -> s {nextToken = a} :: ListForecastExportJobsResponse)
+
+-- | The response's http status code.
+listForecastExportJobsResponse_httpStatus :: Lens.Lens' ListForecastExportJobsResponse Prelude.Int
+listForecastExportJobsResponse_httpStatus = Lens.lens (\ListForecastExportJobsResponse' {httpStatus} -> httpStatus) (\s@ListForecastExportJobsResponse' {} a -> s {httpStatus = a} :: ListForecastExportJobsResponse)
+
+instance
+  Prelude.NFData
+    ListForecastExportJobsResponse
+  where
+  rnf ListForecastExportJobsResponse' {..} =
+    Prelude.rnf forecastExportJobs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListForecasts.hs b/gen/Amazonka/Forecast/ListForecasts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListForecasts.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListForecasts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of forecasts created using the CreateForecast operation.
+-- For each forecast, this operation returns a summary of its properties,
+-- including its Amazon Resource Name (ARN). To retrieve the complete set
+-- of properties, specify the ARN with the DescribeForecast operation. You
+-- can filter the list using an array of Filter objects.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListForecasts
+  ( -- * Creating a Request
+    ListForecasts (..),
+    newListForecasts,
+
+    -- * Request Lenses
+    listForecasts_filters,
+    listForecasts_maxResults,
+    listForecasts_nextToken,
+
+    -- * Destructuring the Response
+    ListForecastsResponse (..),
+    newListForecastsResponse,
+
+    -- * Response Lenses
+    listForecastsResponse_forecasts,
+    listForecastsResponse_nextToken,
+    listForecastsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListForecasts' smart constructor.
+data ListForecasts = ListForecasts'
+  { -- | An array of filters. For each filter, you provide a condition and a
+    -- match statement. The condition is either @IS@ or @IS_NOT@, which
+    -- specifies whether to include or exclude the forecasts that match the
+    -- statement from the list, respectively. The match statement consists of a
+    -- key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@. To include the forecasts that match the statement, specify
+    --     @IS@. To exclude matching forecasts, specify @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @DatasetGroupArn@, @PredictorArn@, and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    --
+    -- For example, to list all forecasts whose status is not ACTIVE, you would
+    -- specify:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS_NOT\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListForecasts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listForecasts_filters' - An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the forecasts that match the
+-- statement from the list, respectively. The match statement consists of a
+-- key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the forecasts that match the statement, specify
+--     @IS@. To exclude matching forecasts, specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @DatasetGroupArn@, @PredictorArn@, and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all forecasts whose status is not ACTIVE, you would
+-- specify:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS_NOT\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+--
+-- 'maxResults', 'listForecasts_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listForecasts_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListForecasts ::
+  ListForecasts
+newListForecasts =
+  ListForecasts'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the forecasts that match the
+-- statement from the list, respectively. The match statement consists of a
+-- key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the forecasts that match the statement, specify
+--     @IS@. To exclude matching forecasts, specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @DatasetGroupArn@, @PredictorArn@, and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all forecasts whose status is not ACTIVE, you would
+-- specify:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS_NOT\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+listForecasts_filters :: Lens.Lens' ListForecasts (Prelude.Maybe [Filter])
+listForecasts_filters = Lens.lens (\ListForecasts' {filters} -> filters) (\s@ListForecasts' {} a -> s {filters = a} :: ListForecasts) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listForecasts_maxResults :: Lens.Lens' ListForecasts (Prelude.Maybe Prelude.Natural)
+listForecasts_maxResults = Lens.lens (\ListForecasts' {maxResults} -> maxResults) (\s@ListForecasts' {} a -> s {maxResults = a} :: ListForecasts)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listForecasts_nextToken :: Lens.Lens' ListForecasts (Prelude.Maybe Prelude.Text)
+listForecasts_nextToken = Lens.lens (\ListForecasts' {nextToken} -> nextToken) (\s@ListForecasts' {} a -> s {nextToken = a} :: ListForecasts)
+
+instance Core.AWSPager ListForecasts where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listForecastsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listForecastsResponse_forecasts
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listForecasts_nextToken
+          Lens..~ rs
+          Lens.^? listForecastsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListForecasts where
+  type
+    AWSResponse ListForecasts =
+      ListForecastsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListForecastsResponse'
+            Prelude.<$> (x Data..?> "Forecasts" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListForecasts where
+  hashWithSalt _salt ListForecasts' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListForecasts where
+  rnf ListForecasts' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListForecasts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListForecasts" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListForecasts where
+  toJSON ListForecasts' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListForecasts where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListForecasts where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListForecastsResponse' smart constructor.
+data ListForecastsResponse = ListForecastsResponse'
+  { -- | An array of objects that summarize each forecast\'s properties.
+    forecasts :: Prelude.Maybe [ForecastSummary],
+    -- | If the response is truncated, Amazon Forecast returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListForecastsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecasts', 'listForecastsResponse_forecasts' - An array of objects that summarize each forecast\'s properties.
+--
+-- 'nextToken', 'listForecastsResponse_nextToken' - If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listForecastsResponse_httpStatus' - The response's http status code.
+newListForecastsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListForecastsResponse
+newListForecastsResponse pHttpStatus_ =
+  ListForecastsResponse'
+    { forecasts = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects that summarize each forecast\'s properties.
+listForecastsResponse_forecasts :: Lens.Lens' ListForecastsResponse (Prelude.Maybe [ForecastSummary])
+listForecastsResponse_forecasts = Lens.lens (\ListForecastsResponse' {forecasts} -> forecasts) (\s@ListForecastsResponse' {} a -> s {forecasts = a} :: ListForecastsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+listForecastsResponse_nextToken :: Lens.Lens' ListForecastsResponse (Prelude.Maybe Prelude.Text)
+listForecastsResponse_nextToken = Lens.lens (\ListForecastsResponse' {nextToken} -> nextToken) (\s@ListForecastsResponse' {} a -> s {nextToken = a} :: ListForecastsResponse)
+
+-- | The response's http status code.
+listForecastsResponse_httpStatus :: Lens.Lens' ListForecastsResponse Prelude.Int
+listForecastsResponse_httpStatus = Lens.lens (\ListForecastsResponse' {httpStatus} -> httpStatus) (\s@ListForecastsResponse' {} a -> s {httpStatus = a} :: ListForecastsResponse)
+
+instance Prelude.NFData ListForecastsResponse where
+  rnf ListForecastsResponse' {..} =
+    Prelude.rnf forecasts
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListMonitorEvaluations.hs b/gen/Amazonka/Forecast/ListMonitorEvaluations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListMonitorEvaluations.hs
@@ -0,0 +1,350 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListMonitorEvaluations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of the monitoring evaluation results and predictor events
+-- collected by the monitor resource during different windows of time.
+--
+-- For information about monitoring see predictor-monitoring. For more
+-- information about retrieving monitoring results see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring-results.html Viewing Monitoring Results>.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListMonitorEvaluations
+  ( -- * Creating a Request
+    ListMonitorEvaluations (..),
+    newListMonitorEvaluations,
+
+    -- * Request Lenses
+    listMonitorEvaluations_filters,
+    listMonitorEvaluations_maxResults,
+    listMonitorEvaluations_nextToken,
+    listMonitorEvaluations_monitorArn,
+
+    -- * Destructuring the Response
+    ListMonitorEvaluationsResponse (..),
+    newListMonitorEvaluationsResponse,
+
+    -- * Response Lenses
+    listMonitorEvaluationsResponse_nextToken,
+    listMonitorEvaluationsResponse_predictorMonitorEvaluations,
+    listMonitorEvaluationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMonitorEvaluations' smart constructor.
+data ListMonitorEvaluations = ListMonitorEvaluations'
+  { -- | An array of filters. For each filter, provide a condition and a match
+    -- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+    -- whether to include or exclude the resources that match the statement
+    -- from the list. The match statement consists of a key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. The only valid value
+    --     is @EvaluationState@.
+    --
+    -- -   @Value@ - The value to match. Valid values are only @SUCCESS@ or
+    --     @FAILURE@.
+    --
+    -- For example, to list only successful monitor evaluations, you would
+    -- specify:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"EvaluationState\", \"Value\": \"SUCCESS\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of monitoring results to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the monitor resource to get results
+    -- from.
+    monitorArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMonitorEvaluations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listMonitorEvaluations_filters' - An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude the resources that match the statement
+-- from the list. The match statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. The only valid value
+--     is @EvaluationState@.
+--
+-- -   @Value@ - The value to match. Valid values are only @SUCCESS@ or
+--     @FAILURE@.
+--
+-- For example, to list only successful monitor evaluations, you would
+-- specify:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"EvaluationState\", \"Value\": \"SUCCESS\" } ]@
+--
+-- 'maxResults', 'listMonitorEvaluations_maxResults' - The maximum number of monitoring results to return.
+--
+-- 'nextToken', 'listMonitorEvaluations_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+--
+-- 'monitorArn', 'listMonitorEvaluations_monitorArn' - The Amazon Resource Name (ARN) of the monitor resource to get results
+-- from.
+newListMonitorEvaluations ::
+  -- | 'monitorArn'
+  Prelude.Text ->
+  ListMonitorEvaluations
+newListMonitorEvaluations pMonitorArn_ =
+  ListMonitorEvaluations'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      monitorArn = pMonitorArn_
+    }
+
+-- | An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude the resources that match the statement
+-- from the list. The match statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. The only valid value
+--     is @EvaluationState@.
+--
+-- -   @Value@ - The value to match. Valid values are only @SUCCESS@ or
+--     @FAILURE@.
+--
+-- For example, to list only successful monitor evaluations, you would
+-- specify:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"EvaluationState\", \"Value\": \"SUCCESS\" } ]@
+listMonitorEvaluations_filters :: Lens.Lens' ListMonitorEvaluations (Prelude.Maybe [Filter])
+listMonitorEvaluations_filters = Lens.lens (\ListMonitorEvaluations' {filters} -> filters) (\s@ListMonitorEvaluations' {} a -> s {filters = a} :: ListMonitorEvaluations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of monitoring results to return.
+listMonitorEvaluations_maxResults :: Lens.Lens' ListMonitorEvaluations (Prelude.Maybe Prelude.Natural)
+listMonitorEvaluations_maxResults = Lens.lens (\ListMonitorEvaluations' {maxResults} -> maxResults) (\s@ListMonitorEvaluations' {} a -> s {maxResults = a} :: ListMonitorEvaluations)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listMonitorEvaluations_nextToken :: Lens.Lens' ListMonitorEvaluations (Prelude.Maybe Prelude.Text)
+listMonitorEvaluations_nextToken = Lens.lens (\ListMonitorEvaluations' {nextToken} -> nextToken) (\s@ListMonitorEvaluations' {} a -> s {nextToken = a} :: ListMonitorEvaluations)
+
+-- | The Amazon Resource Name (ARN) of the monitor resource to get results
+-- from.
+listMonitorEvaluations_monitorArn :: Lens.Lens' ListMonitorEvaluations Prelude.Text
+listMonitorEvaluations_monitorArn = Lens.lens (\ListMonitorEvaluations' {monitorArn} -> monitorArn) (\s@ListMonitorEvaluations' {} a -> s {monitorArn = a} :: ListMonitorEvaluations)
+
+instance Core.AWSPager ListMonitorEvaluations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listMonitorEvaluationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listMonitorEvaluationsResponse_predictorMonitorEvaluations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listMonitorEvaluations_nextToken
+          Lens..~ rs
+          Lens.^? listMonitorEvaluationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListMonitorEvaluations where
+  type
+    AWSResponse ListMonitorEvaluations =
+      ListMonitorEvaluationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMonitorEvaluationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "PredictorMonitorEvaluations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListMonitorEvaluations where
+  hashWithSalt _salt ListMonitorEvaluations' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` monitorArn
+
+instance Prelude.NFData ListMonitorEvaluations where
+  rnf ListMonitorEvaluations' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf monitorArn
+
+instance Data.ToHeaders ListMonitorEvaluations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListMonitorEvaluations" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListMonitorEvaluations where
+  toJSON ListMonitorEvaluations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("MonitorArn" Data..= monitorArn)
+          ]
+      )
+
+instance Data.ToPath ListMonitorEvaluations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListMonitorEvaluations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListMonitorEvaluationsResponse' smart constructor.
+data ListMonitorEvaluationsResponse = ListMonitorEvaluationsResponse'
+  { -- | If the response is truncated, Amazon Forecast returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    -- Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The monitoring results and predictor events collected by the monitor
+    -- resource during different windows of time.
+    --
+    -- For information about monitoring see
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring-results.html Viewing Monitoring Results>.
+    -- For more information about retrieving monitoring results see
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring-results.html Viewing Monitoring Results>.
+    predictorMonitorEvaluations :: Prelude.Maybe [PredictorMonitorEvaluation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMonitorEvaluationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listMonitorEvaluationsResponse_nextToken' - If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+-- Tokens expire after 24 hours.
+--
+-- 'predictorMonitorEvaluations', 'listMonitorEvaluationsResponse_predictorMonitorEvaluations' - The monitoring results and predictor events collected by the monitor
+-- resource during different windows of time.
+--
+-- For information about monitoring see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring-results.html Viewing Monitoring Results>.
+-- For more information about retrieving monitoring results see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring-results.html Viewing Monitoring Results>.
+--
+-- 'httpStatus', 'listMonitorEvaluationsResponse_httpStatus' - The response's http status code.
+newListMonitorEvaluationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMonitorEvaluationsResponse
+newListMonitorEvaluationsResponse pHttpStatus_ =
+  ListMonitorEvaluationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      predictorMonitorEvaluations =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+-- Tokens expire after 24 hours.
+listMonitorEvaluationsResponse_nextToken :: Lens.Lens' ListMonitorEvaluationsResponse (Prelude.Maybe Prelude.Text)
+listMonitorEvaluationsResponse_nextToken = Lens.lens (\ListMonitorEvaluationsResponse' {nextToken} -> nextToken) (\s@ListMonitorEvaluationsResponse' {} a -> s {nextToken = a} :: ListMonitorEvaluationsResponse)
+
+-- | The monitoring results and predictor events collected by the monitor
+-- resource during different windows of time.
+--
+-- For information about monitoring see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring-results.html Viewing Monitoring Results>.
+-- For more information about retrieving monitoring results see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/predictor-monitoring-results.html Viewing Monitoring Results>.
+listMonitorEvaluationsResponse_predictorMonitorEvaluations :: Lens.Lens' ListMonitorEvaluationsResponse (Prelude.Maybe [PredictorMonitorEvaluation])
+listMonitorEvaluationsResponse_predictorMonitorEvaluations = Lens.lens (\ListMonitorEvaluationsResponse' {predictorMonitorEvaluations} -> predictorMonitorEvaluations) (\s@ListMonitorEvaluationsResponse' {} a -> s {predictorMonitorEvaluations = a} :: ListMonitorEvaluationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listMonitorEvaluationsResponse_httpStatus :: Lens.Lens' ListMonitorEvaluationsResponse Prelude.Int
+listMonitorEvaluationsResponse_httpStatus = Lens.lens (\ListMonitorEvaluationsResponse' {httpStatus} -> httpStatus) (\s@ListMonitorEvaluationsResponse' {} a -> s {httpStatus = a} :: ListMonitorEvaluationsResponse)
+
+instance
+  Prelude.NFData
+    ListMonitorEvaluationsResponse
+  where
+  rnf ListMonitorEvaluationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf predictorMonitorEvaluations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListMonitors.hs b/gen/Amazonka/Forecast/ListMonitors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListMonitors.hs
@@ -0,0 +1,297 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListMonitors
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of monitors created with the CreateMonitor operation and
+-- CreateAutoPredictor operation. For each monitor resource, this operation
+-- returns of a summary of its properties, including its Amazon Resource
+-- Name (ARN). You can retrieve a complete set of properties of a monitor
+-- resource by specify the monitor\'s ARN in the DescribeMonitor operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListMonitors
+  ( -- * Creating a Request
+    ListMonitors (..),
+    newListMonitors,
+
+    -- * Request Lenses
+    listMonitors_filters,
+    listMonitors_maxResults,
+    listMonitors_nextToken,
+
+    -- * Destructuring the Response
+    ListMonitorsResponse (..),
+    newListMonitorsResponse,
+
+    -- * Response Lenses
+    listMonitorsResponse_monitors,
+    listMonitorsResponse_nextToken,
+    listMonitorsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListMonitors' smart constructor.
+data ListMonitors = ListMonitors'
+  { -- | An array of filters. For each filter, provide a condition and a match
+    -- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+    -- whether to include or exclude the resources that match the statement
+    -- from the list. The match statement consists of a key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. The only valid value
+    --     is @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    --
+    -- For example, to list all monitors who\'s status is ACTIVE, you would
+    -- specify:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of monitors to include in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMonitors' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listMonitors_filters' - An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude the resources that match the statement
+-- from the list. The match statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. The only valid value
+--     is @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all monitors who\'s status is ACTIVE, you would
+-- specify:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+--
+-- 'maxResults', 'listMonitors_maxResults' - The maximum number of monitors to include in the response.
+--
+-- 'nextToken', 'listMonitors_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListMonitors ::
+  ListMonitors
+newListMonitors =
+  ListMonitors'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude the resources that match the statement
+-- from the list. The match statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. The only valid value
+--     is @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all monitors who\'s status is ACTIVE, you would
+-- specify:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+listMonitors_filters :: Lens.Lens' ListMonitors (Prelude.Maybe [Filter])
+listMonitors_filters = Lens.lens (\ListMonitors' {filters} -> filters) (\s@ListMonitors' {} a -> s {filters = a} :: ListMonitors) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of monitors to include in the response.
+listMonitors_maxResults :: Lens.Lens' ListMonitors (Prelude.Maybe Prelude.Natural)
+listMonitors_maxResults = Lens.lens (\ListMonitors' {maxResults} -> maxResults) (\s@ListMonitors' {} a -> s {maxResults = a} :: ListMonitors)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listMonitors_nextToken :: Lens.Lens' ListMonitors (Prelude.Maybe Prelude.Text)
+listMonitors_nextToken = Lens.lens (\ListMonitors' {nextToken} -> nextToken) (\s@ListMonitors' {} a -> s {nextToken = a} :: ListMonitors)
+
+instance Core.AWSPager ListMonitors where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listMonitorsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listMonitorsResponse_monitors
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listMonitors_nextToken
+          Lens..~ rs
+          Lens.^? listMonitorsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListMonitors where
+  type AWSResponse ListMonitors = ListMonitorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListMonitorsResponse'
+            Prelude.<$> (x Data..?> "Monitors" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListMonitors where
+  hashWithSalt _salt ListMonitors' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListMonitors where
+  rnf ListMonitors' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListMonitors where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListMonitors" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListMonitors where
+  toJSON ListMonitors' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListMonitors where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListMonitors where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListMonitorsResponse' smart constructor.
+data ListMonitorsResponse = ListMonitorsResponse'
+  { -- | An array of objects that summarize each monitor\'s properties.
+    monitors :: Prelude.Maybe [MonitorSummary],
+    -- | If the response is truncated, Amazon Forecast returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListMonitorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'monitors', 'listMonitorsResponse_monitors' - An array of objects that summarize each monitor\'s properties.
+--
+-- 'nextToken', 'listMonitorsResponse_nextToken' - If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+--
+-- 'httpStatus', 'listMonitorsResponse_httpStatus' - The response's http status code.
+newListMonitorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListMonitorsResponse
+newListMonitorsResponse pHttpStatus_ =
+  ListMonitorsResponse'
+    { monitors = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An array of objects that summarize each monitor\'s properties.
+listMonitorsResponse_monitors :: Lens.Lens' ListMonitorsResponse (Prelude.Maybe [MonitorSummary])
+listMonitorsResponse_monitors = Lens.lens (\ListMonitorsResponse' {monitors} -> monitors) (\s@ListMonitorsResponse' {} a -> s {monitors = a} :: ListMonitorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+listMonitorsResponse_nextToken :: Lens.Lens' ListMonitorsResponse (Prelude.Maybe Prelude.Text)
+listMonitorsResponse_nextToken = Lens.lens (\ListMonitorsResponse' {nextToken} -> nextToken) (\s@ListMonitorsResponse' {} a -> s {nextToken = a} :: ListMonitorsResponse)
+
+-- | The response's http status code.
+listMonitorsResponse_httpStatus :: Lens.Lens' ListMonitorsResponse Prelude.Int
+listMonitorsResponse_httpStatus = Lens.lens (\ListMonitorsResponse' {httpStatus} -> httpStatus) (\s@ListMonitorsResponse' {} a -> s {httpStatus = a} :: ListMonitorsResponse)
+
+instance Prelude.NFData ListMonitorsResponse where
+  rnf ListMonitorsResponse' {..} =
+    Prelude.rnf monitors
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListPredictorBacktestExportJobs.hs b/gen/Amazonka/Forecast/ListPredictorBacktestExportJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListPredictorBacktestExportJobs.hs
@@ -0,0 +1,326 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListPredictorBacktestExportJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of predictor backtest export jobs created using the
+-- CreatePredictorBacktestExportJob operation. This operation returns a
+-- summary for each backtest export job. You can filter the list using an
+-- array of Filter objects.
+--
+-- To retrieve the complete set of properties for a particular backtest
+-- export job, use the ARN with the DescribePredictorBacktestExportJob
+-- operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListPredictorBacktestExportJobs
+  ( -- * Creating a Request
+    ListPredictorBacktestExportJobs (..),
+    newListPredictorBacktestExportJobs,
+
+    -- * Request Lenses
+    listPredictorBacktestExportJobs_filters,
+    listPredictorBacktestExportJobs_maxResults,
+    listPredictorBacktestExportJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListPredictorBacktestExportJobsResponse (..),
+    newListPredictorBacktestExportJobsResponse,
+
+    -- * Response Lenses
+    listPredictorBacktestExportJobsResponse_nextToken,
+    listPredictorBacktestExportJobsResponse_predictorBacktestExportJobs,
+    listPredictorBacktestExportJobsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPredictorBacktestExportJobs' smart constructor.
+data ListPredictorBacktestExportJobs = ListPredictorBacktestExportJobs'
+  { -- | An array of filters. For each filter, provide a condition and a match
+    -- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+    -- whether to include or exclude the predictor backtest export jobs that
+    -- match the statement from the list. The match statement consists of a key
+    -- and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@. To include the predictor backtest export jobs that match
+    --     the statement, specify @IS@. To exclude matching predictor backtest
+    --     export jobs, specify @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @PredictorArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a NextToken. To retrieve the next set of results, use the token
+    -- in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPredictorBacktestExportJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listPredictorBacktestExportJobs_filters' - An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude the predictor backtest export jobs that
+-- match the statement from the list. The match statement consists of a key
+-- and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the predictor backtest export jobs that match
+--     the statement, specify @IS@. To exclude matching predictor backtest
+--     export jobs, specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @PredictorArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- 'maxResults', 'listPredictorBacktestExportJobs_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listPredictorBacktestExportJobs_nextToken' - If the result of the previous request was truncated, the response
+-- includes a NextToken. To retrieve the next set of results, use the token
+-- in the next request. Tokens expire after 24 hours.
+newListPredictorBacktestExportJobs ::
+  ListPredictorBacktestExportJobs
+newListPredictorBacktestExportJobs =
+  ListPredictorBacktestExportJobs'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, provide a condition and a match
+-- statement. The condition is either @IS@ or @IS_NOT@, which specifies
+-- whether to include or exclude the predictor backtest export jobs that
+-- match the statement from the list. The match statement consists of a key
+-- and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the predictor backtest export jobs that match
+--     the statement, specify @IS@. To exclude matching predictor backtest
+--     export jobs, specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @PredictorArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+listPredictorBacktestExportJobs_filters :: Lens.Lens' ListPredictorBacktestExportJobs (Prelude.Maybe [Filter])
+listPredictorBacktestExportJobs_filters = Lens.lens (\ListPredictorBacktestExportJobs' {filters} -> filters) (\s@ListPredictorBacktestExportJobs' {} a -> s {filters = a} :: ListPredictorBacktestExportJobs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listPredictorBacktestExportJobs_maxResults :: Lens.Lens' ListPredictorBacktestExportJobs (Prelude.Maybe Prelude.Natural)
+listPredictorBacktestExportJobs_maxResults = Lens.lens (\ListPredictorBacktestExportJobs' {maxResults} -> maxResults) (\s@ListPredictorBacktestExportJobs' {} a -> s {maxResults = a} :: ListPredictorBacktestExportJobs)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a NextToken. To retrieve the next set of results, use the token
+-- in the next request. Tokens expire after 24 hours.
+listPredictorBacktestExportJobs_nextToken :: Lens.Lens' ListPredictorBacktestExportJobs (Prelude.Maybe Prelude.Text)
+listPredictorBacktestExportJobs_nextToken = Lens.lens (\ListPredictorBacktestExportJobs' {nextToken} -> nextToken) (\s@ListPredictorBacktestExportJobs' {} a -> s {nextToken = a} :: ListPredictorBacktestExportJobs)
+
+instance
+  Core.AWSPager
+    ListPredictorBacktestExportJobs
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPredictorBacktestExportJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPredictorBacktestExportJobsResponse_predictorBacktestExportJobs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPredictorBacktestExportJobs_nextToken
+          Lens..~ rs
+          Lens.^? listPredictorBacktestExportJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    ListPredictorBacktestExportJobs
+  where
+  type
+    AWSResponse ListPredictorBacktestExportJobs =
+      ListPredictorBacktestExportJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPredictorBacktestExportJobsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "PredictorBacktestExportJobs"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ListPredictorBacktestExportJobs
+  where
+  hashWithSalt
+    _salt
+    ListPredictorBacktestExportJobs' {..} =
+      _salt
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    ListPredictorBacktestExportJobs
+  where
+  rnf ListPredictorBacktestExportJobs' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    ListPredictorBacktestExportJobs
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListPredictorBacktestExportJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPredictorBacktestExportJobs where
+  toJSON ListPredictorBacktestExportJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListPredictorBacktestExportJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListPredictorBacktestExportJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListPredictorBacktestExportJobsResponse' smart constructor.
+data ListPredictorBacktestExportJobsResponse = ListPredictorBacktestExportJobsResponse'
+  { -- | Returns this token if the response is truncated. To retrieve the next
+    -- set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of objects that summarize the properties of each predictor
+    -- backtest export job.
+    predictorBacktestExportJobs :: Prelude.Maybe [PredictorBacktestExportJobSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPredictorBacktestExportJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listPredictorBacktestExportJobsResponse_nextToken' - Returns this token if the response is truncated. To retrieve the next
+-- set of results, use the token in the next request.
+--
+-- 'predictorBacktestExportJobs', 'listPredictorBacktestExportJobsResponse_predictorBacktestExportJobs' - An array of objects that summarize the properties of each predictor
+-- backtest export job.
+--
+-- 'httpStatus', 'listPredictorBacktestExportJobsResponse_httpStatus' - The response's http status code.
+newListPredictorBacktestExportJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPredictorBacktestExportJobsResponse
+newListPredictorBacktestExportJobsResponse
+  pHttpStatus_ =
+    ListPredictorBacktestExportJobsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        predictorBacktestExportJobs =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns this token if the response is truncated. To retrieve the next
+-- set of results, use the token in the next request.
+listPredictorBacktestExportJobsResponse_nextToken :: Lens.Lens' ListPredictorBacktestExportJobsResponse (Prelude.Maybe Prelude.Text)
+listPredictorBacktestExportJobsResponse_nextToken = Lens.lens (\ListPredictorBacktestExportJobsResponse' {nextToken} -> nextToken) (\s@ListPredictorBacktestExportJobsResponse' {} a -> s {nextToken = a} :: ListPredictorBacktestExportJobsResponse)
+
+-- | An array of objects that summarize the properties of each predictor
+-- backtest export job.
+listPredictorBacktestExportJobsResponse_predictorBacktestExportJobs :: Lens.Lens' ListPredictorBacktestExportJobsResponse (Prelude.Maybe [PredictorBacktestExportJobSummary])
+listPredictorBacktestExportJobsResponse_predictorBacktestExportJobs = Lens.lens (\ListPredictorBacktestExportJobsResponse' {predictorBacktestExportJobs} -> predictorBacktestExportJobs) (\s@ListPredictorBacktestExportJobsResponse' {} a -> s {predictorBacktestExportJobs = a} :: ListPredictorBacktestExportJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listPredictorBacktestExportJobsResponse_httpStatus :: Lens.Lens' ListPredictorBacktestExportJobsResponse Prelude.Int
+listPredictorBacktestExportJobsResponse_httpStatus = Lens.lens (\ListPredictorBacktestExportJobsResponse' {httpStatus} -> httpStatus) (\s@ListPredictorBacktestExportJobsResponse' {} a -> s {httpStatus = a} :: ListPredictorBacktestExportJobsResponse)
+
+instance
+  Prelude.NFData
+    ListPredictorBacktestExportJobsResponse
+  where
+  rnf ListPredictorBacktestExportJobsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf predictorBacktestExportJobs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListPredictors.hs b/gen/Amazonka/Forecast/ListPredictors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListPredictors.hs
@@ -0,0 +1,308 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListPredictors
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of predictors created using the CreateAutoPredictor or
+-- CreatePredictor operations. For each predictor, this operation returns a
+-- summary of its properties, including its Amazon Resource Name (ARN).
+--
+-- You can retrieve the complete set of properties by using the ARN with
+-- the DescribeAutoPredictor and DescribePredictor operations. You can
+-- filter the list using an array of Filter objects.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListPredictors
+  ( -- * Creating a Request
+    ListPredictors (..),
+    newListPredictors,
+
+    -- * Request Lenses
+    listPredictors_filters,
+    listPredictors_maxResults,
+    listPredictors_nextToken,
+
+    -- * Destructuring the Response
+    ListPredictorsResponse (..),
+    newListPredictorsResponse,
+
+    -- * Response Lenses
+    listPredictorsResponse_nextToken,
+    listPredictorsResponse_predictors,
+    listPredictorsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListPredictors' smart constructor.
+data ListPredictors = ListPredictors'
+  { -- | An array of filters. For each filter, you provide a condition and a
+    -- match statement. The condition is either @IS@ or @IS_NOT@, which
+    -- specifies whether to include or exclude the predictors that match the
+    -- statement from the list, respectively. The match statement consists of a
+    -- key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@. To include the predictors that match the statement,
+    --     specify @IS@. To exclude matching predictors, specify @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @DatasetGroupArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    --
+    -- For example, to list all predictors whose status is ACTIVE, you would
+    -- specify:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPredictors' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listPredictors_filters' - An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the predictors that match the
+-- statement from the list, respectively. The match statement consists of a
+-- key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the predictors that match the statement,
+--     specify @IS@. To exclude matching predictors, specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @DatasetGroupArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all predictors whose status is ACTIVE, you would
+-- specify:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+--
+-- 'maxResults', 'listPredictors_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listPredictors_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListPredictors ::
+  ListPredictors
+newListPredictors =
+  ListPredictors'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the predictors that match the
+-- statement from the list, respectively. The match statement consists of a
+-- key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the predictors that match the statement,
+--     specify @IS@. To exclude matching predictors, specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @DatasetGroupArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all predictors whose status is ACTIVE, you would
+-- specify:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"Status\", \"Value\": \"ACTIVE\" } ]@
+listPredictors_filters :: Lens.Lens' ListPredictors (Prelude.Maybe [Filter])
+listPredictors_filters = Lens.lens (\ListPredictors' {filters} -> filters) (\s@ListPredictors' {} a -> s {filters = a} :: ListPredictors) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listPredictors_maxResults :: Lens.Lens' ListPredictors (Prelude.Maybe Prelude.Natural)
+listPredictors_maxResults = Lens.lens (\ListPredictors' {maxResults} -> maxResults) (\s@ListPredictors' {} a -> s {maxResults = a} :: ListPredictors)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listPredictors_nextToken :: Lens.Lens' ListPredictors (Prelude.Maybe Prelude.Text)
+listPredictors_nextToken = Lens.lens (\ListPredictors' {nextToken} -> nextToken) (\s@ListPredictors' {} a -> s {nextToken = a} :: ListPredictors)
+
+instance Core.AWSPager ListPredictors where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listPredictorsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listPredictorsResponse_predictors
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listPredictors_nextToken
+          Lens..~ rs
+          Lens.^? listPredictorsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListPredictors where
+  type
+    AWSResponse ListPredictors =
+      ListPredictorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListPredictorsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Predictors" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListPredictors where
+  hashWithSalt _salt ListPredictors' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListPredictors where
+  rnf ListPredictors' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListPredictors where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListPredictors" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListPredictors where
+  toJSON ListPredictors' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListPredictors where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListPredictors where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListPredictorsResponse' smart constructor.
+data ListPredictorsResponse = ListPredictorsResponse'
+  { -- | If the response is truncated, Amazon Forecast returns this token. To
+    -- retrieve the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of objects that summarize each predictor\'s properties.
+    predictors :: Prelude.Maybe [PredictorSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListPredictorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listPredictorsResponse_nextToken' - If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+--
+-- 'predictors', 'listPredictorsResponse_predictors' - An array of objects that summarize each predictor\'s properties.
+--
+-- 'httpStatus', 'listPredictorsResponse_httpStatus' - The response's http status code.
+newListPredictorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListPredictorsResponse
+newListPredictorsResponse pHttpStatus_ =
+  ListPredictorsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      predictors = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Amazon Forecast returns this token. To
+-- retrieve the next set of results, use the token in the next request.
+listPredictorsResponse_nextToken :: Lens.Lens' ListPredictorsResponse (Prelude.Maybe Prelude.Text)
+listPredictorsResponse_nextToken = Lens.lens (\ListPredictorsResponse' {nextToken} -> nextToken) (\s@ListPredictorsResponse' {} a -> s {nextToken = a} :: ListPredictorsResponse)
+
+-- | An array of objects that summarize each predictor\'s properties.
+listPredictorsResponse_predictors :: Lens.Lens' ListPredictorsResponse (Prelude.Maybe [PredictorSummary])
+listPredictorsResponse_predictors = Lens.lens (\ListPredictorsResponse' {predictors} -> predictors) (\s@ListPredictorsResponse' {} a -> s {predictors = a} :: ListPredictorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listPredictorsResponse_httpStatus :: Lens.Lens' ListPredictorsResponse Prelude.Int
+listPredictorsResponse_httpStatus = Lens.lens (\ListPredictorsResponse' {httpStatus} -> httpStatus) (\s@ListPredictorsResponse' {} a -> s {httpStatus = a} :: ListPredictorsResponse)
+
+instance Prelude.NFData ListPredictorsResponse where
+  rnf ListPredictorsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf predictors
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListTagsForResource.hs b/gen/Amazonka/Forecast/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListTagsForResource.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the tags for an Amazon Forecast resource.
+module Amazonka.Forecast.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) that identifies the resource for which to
+    -- list the tags.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) that identifies the resource for which to
+-- list the tags.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) that identifies the resource for which to
+-- list the tags.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "Tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The tags for the resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The tags for the resource.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The tags for the resource.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListWhatIfAnalyses.hs b/gen/Amazonka/Forecast/ListWhatIfAnalyses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListWhatIfAnalyses.hs
@@ -0,0 +1,313 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListWhatIfAnalyses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of what-if analyses created using the
+-- CreateWhatIfAnalysis operation. For each what-if analysis, this
+-- operation returns a summary of its properties, including its Amazon
+-- Resource Name (ARN). You can retrieve the complete set of properties by
+-- using the what-if analysis ARN with the DescribeWhatIfAnalysis
+-- operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListWhatIfAnalyses
+  ( -- * Creating a Request
+    ListWhatIfAnalyses (..),
+    newListWhatIfAnalyses,
+
+    -- * Request Lenses
+    listWhatIfAnalyses_filters,
+    listWhatIfAnalyses_maxResults,
+    listWhatIfAnalyses_nextToken,
+
+    -- * Destructuring the Response
+    ListWhatIfAnalysesResponse (..),
+    newListWhatIfAnalysesResponse,
+
+    -- * Response Lenses
+    listWhatIfAnalysesResponse_nextToken,
+    listWhatIfAnalysesResponse_whatIfAnalyses,
+    listWhatIfAnalysesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWhatIfAnalyses' smart constructor.
+data ListWhatIfAnalyses = ListWhatIfAnalyses'
+  { -- | An array of filters. For each filter, you provide a condition and a
+    -- match statement. The condition is either @IS@ or @IS_NOT@, which
+    -- specifies whether to include or exclude the what-if analysis jobs that
+    -- match the statement from the list, respectively. The match statement
+    -- consists of a key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@. To include the what-if analysis jobs that match the
+    --     statement, specify @IS@. To exclude matching what-if analysis jobs,
+    --     specify @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @WhatIfAnalysisArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    --
+    -- For example, to list all jobs that export a forecast named
+    -- /electricityWhatIf/, specify the following filter:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfAnalysisArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWhatIf\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWhatIfAnalyses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listWhatIfAnalyses_filters' - An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the what-if analysis jobs that
+-- match the statement from the list, respectively. The match statement
+-- consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the what-if analysis jobs that match the
+--     statement, specify @IS@. To exclude matching what-if analysis jobs,
+--     specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @WhatIfAnalysisArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all jobs that export a forecast named
+-- /electricityWhatIf/, specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfAnalysisArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWhatIf\" } ]@
+--
+-- 'maxResults', 'listWhatIfAnalyses_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listWhatIfAnalyses_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+newListWhatIfAnalyses ::
+  ListWhatIfAnalyses
+newListWhatIfAnalyses =
+  ListWhatIfAnalyses'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the what-if analysis jobs that
+-- match the statement from the list, respectively. The match statement
+-- consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the what-if analysis jobs that match the
+--     statement, specify @IS@. To exclude matching what-if analysis jobs,
+--     specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @WhatIfAnalysisArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all jobs that export a forecast named
+-- /electricityWhatIf/, specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfAnalysisArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWhatIf\" } ]@
+listWhatIfAnalyses_filters :: Lens.Lens' ListWhatIfAnalyses (Prelude.Maybe [Filter])
+listWhatIfAnalyses_filters = Lens.lens (\ListWhatIfAnalyses' {filters} -> filters) (\s@ListWhatIfAnalyses' {} a -> s {filters = a} :: ListWhatIfAnalyses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listWhatIfAnalyses_maxResults :: Lens.Lens' ListWhatIfAnalyses (Prelude.Maybe Prelude.Natural)
+listWhatIfAnalyses_maxResults = Lens.lens (\ListWhatIfAnalyses' {maxResults} -> maxResults) (\s@ListWhatIfAnalyses' {} a -> s {maxResults = a} :: ListWhatIfAnalyses)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next request. Tokens expire after 24 hours.
+listWhatIfAnalyses_nextToken :: Lens.Lens' ListWhatIfAnalyses (Prelude.Maybe Prelude.Text)
+listWhatIfAnalyses_nextToken = Lens.lens (\ListWhatIfAnalyses' {nextToken} -> nextToken) (\s@ListWhatIfAnalyses' {} a -> s {nextToken = a} :: ListWhatIfAnalyses)
+
+instance Core.AWSPager ListWhatIfAnalyses where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWhatIfAnalysesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWhatIfAnalysesResponse_whatIfAnalyses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWhatIfAnalyses_nextToken
+          Lens..~ rs
+          Lens.^? listWhatIfAnalysesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWhatIfAnalyses where
+  type
+    AWSResponse ListWhatIfAnalyses =
+      ListWhatIfAnalysesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWhatIfAnalysesResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "WhatIfAnalyses" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWhatIfAnalyses where
+  hashWithSalt _salt ListWhatIfAnalyses' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWhatIfAnalyses where
+  rnf ListWhatIfAnalyses' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWhatIfAnalyses where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListWhatIfAnalyses" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWhatIfAnalyses where
+  toJSON ListWhatIfAnalyses' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListWhatIfAnalyses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListWhatIfAnalyses where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListWhatIfAnalysesResponse' smart constructor.
+data ListWhatIfAnalysesResponse = ListWhatIfAnalysesResponse'
+  { -- | If the response is truncated, Forecast returns this token. To retrieve
+    -- the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of @WhatIfAnalysisSummary@ objects that describe the matched
+    -- analyses.
+    whatIfAnalyses :: Prelude.Maybe [WhatIfAnalysisSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWhatIfAnalysesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listWhatIfAnalysesResponse_nextToken' - If the response is truncated, Forecast returns this token. To retrieve
+-- the next set of results, use the token in the next request.
+--
+-- 'whatIfAnalyses', 'listWhatIfAnalysesResponse_whatIfAnalyses' - An array of @WhatIfAnalysisSummary@ objects that describe the matched
+-- analyses.
+--
+-- 'httpStatus', 'listWhatIfAnalysesResponse_httpStatus' - The response's http status code.
+newListWhatIfAnalysesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWhatIfAnalysesResponse
+newListWhatIfAnalysesResponse pHttpStatus_ =
+  ListWhatIfAnalysesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      whatIfAnalyses = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Forecast returns this token. To retrieve
+-- the next set of results, use the token in the next request.
+listWhatIfAnalysesResponse_nextToken :: Lens.Lens' ListWhatIfAnalysesResponse (Prelude.Maybe Prelude.Text)
+listWhatIfAnalysesResponse_nextToken = Lens.lens (\ListWhatIfAnalysesResponse' {nextToken} -> nextToken) (\s@ListWhatIfAnalysesResponse' {} a -> s {nextToken = a} :: ListWhatIfAnalysesResponse)
+
+-- | An array of @WhatIfAnalysisSummary@ objects that describe the matched
+-- analyses.
+listWhatIfAnalysesResponse_whatIfAnalyses :: Lens.Lens' ListWhatIfAnalysesResponse (Prelude.Maybe [WhatIfAnalysisSummary])
+listWhatIfAnalysesResponse_whatIfAnalyses = Lens.lens (\ListWhatIfAnalysesResponse' {whatIfAnalyses} -> whatIfAnalyses) (\s@ListWhatIfAnalysesResponse' {} a -> s {whatIfAnalyses = a} :: ListWhatIfAnalysesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWhatIfAnalysesResponse_httpStatus :: Lens.Lens' ListWhatIfAnalysesResponse Prelude.Int
+listWhatIfAnalysesResponse_httpStatus = Lens.lens (\ListWhatIfAnalysesResponse' {httpStatus} -> httpStatus) (\s@ListWhatIfAnalysesResponse' {} a -> s {httpStatus = a} :: ListWhatIfAnalysesResponse)
+
+instance Prelude.NFData ListWhatIfAnalysesResponse where
+  rnf ListWhatIfAnalysesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf whatIfAnalyses
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListWhatIfForecastExports.hs b/gen/Amazonka/Forecast/ListWhatIfForecastExports.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListWhatIfForecastExports.hs
@@ -0,0 +1,320 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListWhatIfForecastExports
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of what-if forecast exports created using the
+-- CreateWhatIfForecastExport operation. For each what-if forecast export,
+-- this operation returns a summary of its properties, including its Amazon
+-- Resource Name (ARN). You can retrieve the complete set of properties by
+-- using the what-if forecast export ARN with the
+-- DescribeWhatIfForecastExport operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListWhatIfForecastExports
+  ( -- * Creating a Request
+    ListWhatIfForecastExports (..),
+    newListWhatIfForecastExports,
+
+    -- * Request Lenses
+    listWhatIfForecastExports_filters,
+    listWhatIfForecastExports_maxResults,
+    listWhatIfForecastExports_nextToken,
+
+    -- * Destructuring the Response
+    ListWhatIfForecastExportsResponse (..),
+    newListWhatIfForecastExportsResponse,
+
+    -- * Response Lenses
+    listWhatIfForecastExportsResponse_nextToken,
+    listWhatIfForecastExportsResponse_whatIfForecastExports,
+    listWhatIfForecastExportsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWhatIfForecastExports' smart constructor.
+data ListWhatIfForecastExports = ListWhatIfForecastExports'
+  { -- | An array of filters. For each filter, you provide a condition and a
+    -- match statement. The condition is either @IS@ or @IS_NOT@, which
+    -- specifies whether to include or exclude the what-if forecast export jobs
+    -- that match the statement from the list, respectively. The match
+    -- statement consists of a key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@. To include the forecast export jobs that match the
+    --     statement, specify @IS@. To exclude matching forecast export jobs,
+    --     specify @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @WhatIfForecastExportArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    --
+    -- For example, to list all jobs that export a forecast named
+    -- /electricityWIFExport/, specify the following filter:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfForecastExportArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWIFExport\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next  request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWhatIfForecastExports' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listWhatIfForecastExports_filters' - An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the what-if forecast export jobs
+-- that match the statement from the list, respectively. The match
+-- statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the forecast export jobs that match the
+--     statement, specify @IS@. To exclude matching forecast export jobs,
+--     specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @WhatIfForecastExportArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all jobs that export a forecast named
+-- /electricityWIFExport/, specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfForecastExportArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWIFExport\" } ]@
+--
+-- 'maxResults', 'listWhatIfForecastExports_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listWhatIfForecastExports_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next  request. Tokens expire after 24 hours.
+newListWhatIfForecastExports ::
+  ListWhatIfForecastExports
+newListWhatIfForecastExports =
+  ListWhatIfForecastExports'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the what-if forecast export jobs
+-- that match the statement from the list, respectively. The match
+-- statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the forecast export jobs that match the
+--     statement, specify @IS@. To exclude matching forecast export jobs,
+--     specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @WhatIfForecastExportArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all jobs that export a forecast named
+-- /electricityWIFExport/, specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfForecastExportArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWIFExport\" } ]@
+listWhatIfForecastExports_filters :: Lens.Lens' ListWhatIfForecastExports (Prelude.Maybe [Filter])
+listWhatIfForecastExports_filters = Lens.lens (\ListWhatIfForecastExports' {filters} -> filters) (\s@ListWhatIfForecastExports' {} a -> s {filters = a} :: ListWhatIfForecastExports) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listWhatIfForecastExports_maxResults :: Lens.Lens' ListWhatIfForecastExports (Prelude.Maybe Prelude.Natural)
+listWhatIfForecastExports_maxResults = Lens.lens (\ListWhatIfForecastExports' {maxResults} -> maxResults) (\s@ListWhatIfForecastExports' {} a -> s {maxResults = a} :: ListWhatIfForecastExports)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next  request. Tokens expire after 24 hours.
+listWhatIfForecastExports_nextToken :: Lens.Lens' ListWhatIfForecastExports (Prelude.Maybe Prelude.Text)
+listWhatIfForecastExports_nextToken = Lens.lens (\ListWhatIfForecastExports' {nextToken} -> nextToken) (\s@ListWhatIfForecastExports' {} a -> s {nextToken = a} :: ListWhatIfForecastExports)
+
+instance Core.AWSPager ListWhatIfForecastExports where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWhatIfForecastExportsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWhatIfForecastExportsResponse_whatIfForecastExports
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWhatIfForecastExports_nextToken
+          Lens..~ rs
+          Lens.^? listWhatIfForecastExportsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWhatIfForecastExports where
+  type
+    AWSResponse ListWhatIfForecastExports =
+      ListWhatIfForecastExportsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWhatIfForecastExportsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "WhatIfForecastExports"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWhatIfForecastExports where
+  hashWithSalt _salt ListWhatIfForecastExports' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWhatIfForecastExports where
+  rnf ListWhatIfForecastExports' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWhatIfForecastExports where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListWhatIfForecastExports" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWhatIfForecastExports where
+  toJSON ListWhatIfForecastExports' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListWhatIfForecastExports where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListWhatIfForecastExports where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListWhatIfForecastExportsResponse' smart constructor.
+data ListWhatIfForecastExportsResponse = ListWhatIfForecastExportsResponse'
+  { -- | If the response is truncated, Forecast returns this token. To retrieve
+    -- the next set of results, use the token in the next request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of @WhatIfForecastExports@ objects that describe the matched
+    -- forecast exports.
+    whatIfForecastExports :: Prelude.Maybe [WhatIfForecastExportSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWhatIfForecastExportsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listWhatIfForecastExportsResponse_nextToken' - If the response is truncated, Forecast returns this token. To retrieve
+-- the next set of results, use the token in the next request.
+--
+-- 'whatIfForecastExports', 'listWhatIfForecastExportsResponse_whatIfForecastExports' - An array of @WhatIfForecastExports@ objects that describe the matched
+-- forecast exports.
+--
+-- 'httpStatus', 'listWhatIfForecastExportsResponse_httpStatus' - The response's http status code.
+newListWhatIfForecastExportsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWhatIfForecastExportsResponse
+newListWhatIfForecastExportsResponse pHttpStatus_ =
+  ListWhatIfForecastExportsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      whatIfForecastExports = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the response is truncated, Forecast returns this token. To retrieve
+-- the next set of results, use the token in the next request.
+listWhatIfForecastExportsResponse_nextToken :: Lens.Lens' ListWhatIfForecastExportsResponse (Prelude.Maybe Prelude.Text)
+listWhatIfForecastExportsResponse_nextToken = Lens.lens (\ListWhatIfForecastExportsResponse' {nextToken} -> nextToken) (\s@ListWhatIfForecastExportsResponse' {} a -> s {nextToken = a} :: ListWhatIfForecastExportsResponse)
+
+-- | An array of @WhatIfForecastExports@ objects that describe the matched
+-- forecast exports.
+listWhatIfForecastExportsResponse_whatIfForecastExports :: Lens.Lens' ListWhatIfForecastExportsResponse (Prelude.Maybe [WhatIfForecastExportSummary])
+listWhatIfForecastExportsResponse_whatIfForecastExports = Lens.lens (\ListWhatIfForecastExportsResponse' {whatIfForecastExports} -> whatIfForecastExports) (\s@ListWhatIfForecastExportsResponse' {} a -> s {whatIfForecastExports = a} :: ListWhatIfForecastExportsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWhatIfForecastExportsResponse_httpStatus :: Lens.Lens' ListWhatIfForecastExportsResponse Prelude.Int
+listWhatIfForecastExportsResponse_httpStatus = Lens.lens (\ListWhatIfForecastExportsResponse' {httpStatus} -> httpStatus) (\s@ListWhatIfForecastExportsResponse' {} a -> s {httpStatus = a} :: ListWhatIfForecastExportsResponse)
+
+instance
+  Prelude.NFData
+    ListWhatIfForecastExportsResponse
+  where
+  rnf ListWhatIfForecastExportsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf whatIfForecastExports
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ListWhatIfForecasts.hs b/gen/Amazonka/Forecast/ListWhatIfForecasts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ListWhatIfForecasts.hs
@@ -0,0 +1,319 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ListWhatIfForecasts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of what-if forecasts created using the
+-- CreateWhatIfForecast operation. For each what-if forecast, this
+-- operation returns a summary of its properties, including its Amazon
+-- Resource Name (ARN). You can retrieve the complete set of properties by
+-- using the what-if forecast ARN with the DescribeWhatIfForecast
+-- operation.
+--
+-- This operation returns paginated results.
+module Amazonka.Forecast.ListWhatIfForecasts
+  ( -- * Creating a Request
+    ListWhatIfForecasts (..),
+    newListWhatIfForecasts,
+
+    -- * Request Lenses
+    listWhatIfForecasts_filters,
+    listWhatIfForecasts_maxResults,
+    listWhatIfForecasts_nextToken,
+
+    -- * Destructuring the Response
+    ListWhatIfForecastsResponse (..),
+    newListWhatIfForecastsResponse,
+
+    -- * Response Lenses
+    listWhatIfForecastsResponse_nextToken,
+    listWhatIfForecastsResponse_whatIfForecasts,
+    listWhatIfForecastsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListWhatIfForecasts' smart constructor.
+data ListWhatIfForecasts = ListWhatIfForecasts'
+  { -- | An array of filters. For each filter, you provide a condition and a
+    -- match statement. The condition is either @IS@ or @IS_NOT@, which
+    -- specifies whether to include or exclude the what-if forecast export jobs
+    -- that match the statement from the list, respectively. The match
+    -- statement consists of a key and a value.
+    --
+    -- __Filter properties__
+    --
+    -- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+    --     @IS_NOT@. To include the forecast export jobs that match the
+    --     statement, specify @IS@. To exclude matching forecast export jobs,
+    --     specify @IS_NOT@.
+    --
+    -- -   @Key@ - The name of the parameter to filter on. Valid values are
+    --     @WhatIfForecastArn@ and @Status@.
+    --
+    -- -   @Value@ - The value to match.
+    --
+    -- For example, to list all jobs that export a forecast named
+    -- /electricityWhatIfForecast/, specify the following filter:
+    --
+    -- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfForecastArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWhatIfForecast\" } ]@
+    filters :: Prelude.Maybe [Filter],
+    -- | The number of items to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next  request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWhatIfForecasts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'listWhatIfForecasts_filters' - An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the what-if forecast export jobs
+-- that match the statement from the list, respectively. The match
+-- statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the forecast export jobs that match the
+--     statement, specify @IS@. To exclude matching forecast export jobs,
+--     specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @WhatIfForecastArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all jobs that export a forecast named
+-- /electricityWhatIfForecast/, specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfForecastArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWhatIfForecast\" } ]@
+--
+-- 'maxResults', 'listWhatIfForecasts_maxResults' - The number of items to return in the response.
+--
+-- 'nextToken', 'listWhatIfForecasts_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next  request. Tokens expire after 24 hours.
+newListWhatIfForecasts ::
+  ListWhatIfForecasts
+newListWhatIfForecasts =
+  ListWhatIfForecasts'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | An array of filters. For each filter, you provide a condition and a
+-- match statement. The condition is either @IS@ or @IS_NOT@, which
+-- specifies whether to include or exclude the what-if forecast export jobs
+-- that match the statement from the list, respectively. The match
+-- statement consists of a key and a value.
+--
+-- __Filter properties__
+--
+-- -   @Condition@ - The condition to apply. Valid values are @IS@ and
+--     @IS_NOT@. To include the forecast export jobs that match the
+--     statement, specify @IS@. To exclude matching forecast export jobs,
+--     specify @IS_NOT@.
+--
+-- -   @Key@ - The name of the parameter to filter on. Valid values are
+--     @WhatIfForecastArn@ and @Status@.
+--
+-- -   @Value@ - The value to match.
+--
+-- For example, to list all jobs that export a forecast named
+-- /electricityWhatIfForecast/, specify the following filter:
+--
+-- @\"Filters\": [ { \"Condition\": \"IS\", \"Key\": \"WhatIfForecastArn\", \"Value\": \"arn:aws:forecast:us-west-2:\<acct-id>:forecast\/electricityWhatIfForecast\" } ]@
+listWhatIfForecasts_filters :: Lens.Lens' ListWhatIfForecasts (Prelude.Maybe [Filter])
+listWhatIfForecasts_filters = Lens.lens (\ListWhatIfForecasts' {filters} -> filters) (\s@ListWhatIfForecasts' {} a -> s {filters = a} :: ListWhatIfForecasts) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of items to return in the response.
+listWhatIfForecasts_maxResults :: Lens.Lens' ListWhatIfForecasts (Prelude.Maybe Prelude.Natural)
+listWhatIfForecasts_maxResults = Lens.lens (\ListWhatIfForecasts' {maxResults} -> maxResults) (\s@ListWhatIfForecasts' {} a -> s {maxResults = a} :: ListWhatIfForecasts)
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next  request. Tokens expire after 24 hours.
+listWhatIfForecasts_nextToken :: Lens.Lens' ListWhatIfForecasts (Prelude.Maybe Prelude.Text)
+listWhatIfForecasts_nextToken = Lens.lens (\ListWhatIfForecasts' {nextToken} -> nextToken) (\s@ListWhatIfForecasts' {} a -> s {nextToken = a} :: ListWhatIfForecasts)
+
+instance Core.AWSPager ListWhatIfForecasts where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listWhatIfForecastsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listWhatIfForecastsResponse_whatIfForecasts
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listWhatIfForecasts_nextToken
+          Lens..~ rs
+          Lens.^? listWhatIfForecastsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListWhatIfForecasts where
+  type
+    AWSResponse ListWhatIfForecasts =
+      ListWhatIfForecastsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListWhatIfForecastsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "WhatIfForecasts"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListWhatIfForecasts where
+  hashWithSalt _salt ListWhatIfForecasts' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListWhatIfForecasts where
+  rnf ListWhatIfForecasts' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListWhatIfForecasts where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ListWhatIfForecasts" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListWhatIfForecasts where
+  toJSON ListWhatIfForecasts' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Filters" Data..=) Prelude.<$> filters,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListWhatIfForecasts where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListWhatIfForecasts where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListWhatIfForecastsResponse' smart constructor.
+data ListWhatIfForecastsResponse = ListWhatIfForecastsResponse'
+  { -- | If the result of the previous request was truncated, the response
+    -- includes a @NextToken@. To retrieve the next set of results, use the
+    -- token in the next  request. Tokens expire after 24 hours.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | An array of @WhatIfForecasts@ objects that describe the matched
+    -- forecasts.
+    whatIfForecasts :: Prelude.Maybe [WhatIfForecastSummary],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListWhatIfForecastsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listWhatIfForecastsResponse_nextToken' - If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next  request. Tokens expire after 24 hours.
+--
+-- 'whatIfForecasts', 'listWhatIfForecastsResponse_whatIfForecasts' - An array of @WhatIfForecasts@ objects that describe the matched
+-- forecasts.
+--
+-- 'httpStatus', 'listWhatIfForecastsResponse_httpStatus' - The response's http status code.
+newListWhatIfForecastsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListWhatIfForecastsResponse
+newListWhatIfForecastsResponse pHttpStatus_ =
+  ListWhatIfForecastsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      whatIfForecasts = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the result of the previous request was truncated, the response
+-- includes a @NextToken@. To retrieve the next set of results, use the
+-- token in the next  request. Tokens expire after 24 hours.
+listWhatIfForecastsResponse_nextToken :: Lens.Lens' ListWhatIfForecastsResponse (Prelude.Maybe Prelude.Text)
+listWhatIfForecastsResponse_nextToken = Lens.lens (\ListWhatIfForecastsResponse' {nextToken} -> nextToken) (\s@ListWhatIfForecastsResponse' {} a -> s {nextToken = a} :: ListWhatIfForecastsResponse)
+
+-- | An array of @WhatIfForecasts@ objects that describe the matched
+-- forecasts.
+listWhatIfForecastsResponse_whatIfForecasts :: Lens.Lens' ListWhatIfForecastsResponse (Prelude.Maybe [WhatIfForecastSummary])
+listWhatIfForecastsResponse_whatIfForecasts = Lens.lens (\ListWhatIfForecastsResponse' {whatIfForecasts} -> whatIfForecasts) (\s@ListWhatIfForecastsResponse' {} a -> s {whatIfForecasts = a} :: ListWhatIfForecastsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listWhatIfForecastsResponse_httpStatus :: Lens.Lens' ListWhatIfForecastsResponse Prelude.Int
+listWhatIfForecastsResponse_httpStatus = Lens.lens (\ListWhatIfForecastsResponse' {httpStatus} -> httpStatus) (\s@ListWhatIfForecastsResponse' {} a -> s {httpStatus = a} :: ListWhatIfForecastsResponse)
+
+instance Prelude.NFData ListWhatIfForecastsResponse where
+  rnf ListWhatIfForecastsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf whatIfForecasts
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/ResumeResource.hs b/gen/Amazonka/Forecast/ResumeResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/ResumeResource.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.ResumeResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resumes a stopped monitor resource.
+module Amazonka.Forecast.ResumeResource
+  ( -- * Creating a Request
+    ResumeResource (..),
+    newResumeResource,
+
+    -- * Request Lenses
+    resumeResource_resourceArn,
+
+    -- * Destructuring the Response
+    ResumeResourceResponse (..),
+    newResumeResourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResumeResource' smart constructor.
+data ResumeResource = ResumeResource'
+  { -- | The Amazon Resource Name (ARN) of the monitor resource to resume.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResumeResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'resumeResource_resourceArn' - The Amazon Resource Name (ARN) of the monitor resource to resume.
+newResumeResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ResumeResource
+newResumeResource pResourceArn_ =
+  ResumeResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the monitor resource to resume.
+resumeResource_resourceArn :: Lens.Lens' ResumeResource Prelude.Text
+resumeResource_resourceArn = Lens.lens (\ResumeResource' {resourceArn} -> resourceArn) (\s@ResumeResource' {} a -> s {resourceArn = a} :: ResumeResource)
+
+instance Core.AWSRequest ResumeResource where
+  type
+    AWSResponse ResumeResource =
+      ResumeResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveNull ResumeResourceResponse'
+
+instance Prelude.Hashable ResumeResource where
+  hashWithSalt _salt ResumeResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ResumeResource where
+  rnf ResumeResource' {..} = Prelude.rnf resourceArn
+
+instance Data.ToHeaders ResumeResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.ResumeResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ResumeResource where
+  toJSON ResumeResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath ResumeResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResumeResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newResumeResourceResponse' smart constructor.
+data ResumeResourceResponse = ResumeResourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResumeResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newResumeResourceResponse ::
+  ResumeResourceResponse
+newResumeResourceResponse = ResumeResourceResponse'
+
+instance Prelude.NFData ResumeResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/StopResource.hs b/gen/Amazonka/Forecast/StopResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/StopResource.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.StopResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a resource.
+--
+-- The resource undergoes the following states: @CREATE_STOPPING@ and
+-- @CREATE_STOPPED@. You cannot resume a resource once it has been stopped.
+--
+-- This operation can be applied to the following resources (and their
+-- corresponding child resources):
+--
+-- -   Dataset Import Job
+--
+-- -   Predictor Job
+--
+-- -   Forecast Job
+--
+-- -   Forecast Export Job
+--
+-- -   Predictor Backtest Export Job
+--
+-- -   Explainability Job
+--
+-- -   Explainability Export Job
+module Amazonka.Forecast.StopResource
+  ( -- * Creating a Request
+    StopResource (..),
+    newStopResource,
+
+    -- * Request Lenses
+    stopResource_resourceArn,
+
+    -- * Destructuring the Response
+    StopResourceResponse (..),
+    newStopResourceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopResource' smart constructor.
+data StopResource = StopResource'
+  { -- | The Amazon Resource Name (ARN) that identifies the resource to stop. The
+    -- supported ARNs are @DatasetImportJobArn@, @PredictorArn@,
+    -- @PredictorBacktestExportJobArn@, @ForecastArn@, @ForecastExportJobArn@,
+    -- @ExplainabilityArn@, and @ExplainabilityExportArn@.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'stopResource_resourceArn' - The Amazon Resource Name (ARN) that identifies the resource to stop. The
+-- supported ARNs are @DatasetImportJobArn@, @PredictorArn@,
+-- @PredictorBacktestExportJobArn@, @ForecastArn@, @ForecastExportJobArn@,
+-- @ExplainabilityArn@, and @ExplainabilityExportArn@.
+newStopResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  StopResource
+newStopResource pResourceArn_ =
+  StopResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) that identifies the resource to stop. The
+-- supported ARNs are @DatasetImportJobArn@, @PredictorArn@,
+-- @PredictorBacktestExportJobArn@, @ForecastArn@, @ForecastExportJobArn@,
+-- @ExplainabilityArn@, and @ExplainabilityExportArn@.
+stopResource_resourceArn :: Lens.Lens' StopResource Prelude.Text
+stopResource_resourceArn = Lens.lens (\StopResource' {resourceArn} -> resourceArn) (\s@StopResource' {} a -> s {resourceArn = a} :: StopResource)
+
+instance Core.AWSRequest StopResource where
+  type AWSResponse StopResource = StopResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response = Response.receiveNull StopResourceResponse'
+
+instance Prelude.Hashable StopResource where
+  hashWithSalt _salt StopResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData StopResource where
+  rnf StopResource' {..} = Prelude.rnf resourceArn
+
+instance Data.ToHeaders StopResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.StopResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopResource where
+  toJSON StopResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath StopResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopResourceResponse' smart constructor.
+data StopResourceResponse = StopResourceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newStopResourceResponse ::
+  StopResourceResponse
+newStopResourceResponse = StopResourceResponse'
+
+instance Prelude.NFData StopResourceResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Forecast/TagResource.hs b/gen/Amazonka/Forecast/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/TagResource.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified tags to a resource with the specified
+-- @resourceArn@. If existing tags on a resource are not specified in the
+-- request parameters, they are not changed. When a resource is deleted,
+-- the tags associated with that resource are also deleted.
+module Amazonka.Forecast.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) that identifies the resource for which to
+    -- list the tags.
+    resourceArn :: Prelude.Text,
+    -- | The tags to add to the resource. A tag is an array of key-value pairs.
+    --
+    -- The following basic restrictions apply to tags:
+    --
+    -- -   Maximum number of tags per resource - 50.
+    --
+    -- -   For each resource, each tag key must be unique, and each tag key can
+    --     have only one value.
+    --
+    -- -   Maximum key length - 128 Unicode characters in UTF-8.
+    --
+    -- -   Maximum value length - 256 Unicode characters in UTF-8.
+    --
+    -- -   If your tagging schema is used across multiple services and
+    --     resources, remember that other services may have restrictions on
+    --     allowed characters. Generally allowed characters are: letters,
+    --     numbers, and spaces representable in UTF-8, and the following
+    --     characters: + - = . _ : \/ \@.
+    --
+    -- -   Tag keys and values are case sensitive.
+    --
+    -- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+    --     such as a prefix for keys as it is reserved for AWS use. You cannot
+    --     edit or delete tag keys with this prefix. Values can have this
+    --     prefix. If a tag value has @aws@ as its prefix but the key does not,
+    --     then Forecast considers it to be a user tag and will count against
+    --     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+    --     count against your tags per resource limit.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) that identifies the resource for which to
+-- list the tags.
+--
+-- 'tags', 'tagResource_tags' - The tags to add to the resource. A tag is an array of key-value pairs.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) that identifies the resource for which to
+-- list the tags.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to add to the resource. A tag is an array of key-value pairs.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ("AmazonForecast.TagResource" :: Prelude.ByteString),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/Types.hs b/gen/Amazonka/Forecast/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types.hs
@@ -0,0 +1,756 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _InvalidInputException,
+    _InvalidNextTokenException,
+    _LimitExceededException,
+    _ResourceAlreadyExistsException,
+    _ResourceInUseException,
+    _ResourceNotFoundException,
+
+    -- * AttributeType
+    AttributeType (..),
+
+    -- * AutoMLOverrideStrategy
+    AutoMLOverrideStrategy (..),
+
+    -- * Condition
+    Condition (..),
+
+    -- * DatasetType
+    DatasetType (..),
+
+    -- * DayOfWeek
+    DayOfWeek (..),
+
+    -- * Domain
+    Domain (..),
+
+    -- * EvaluationType
+    EvaluationType (..),
+
+    -- * FeaturizationMethodName
+    FeaturizationMethodName (..),
+
+    -- * FilterConditionString
+    FilterConditionString (..),
+
+    -- * Month
+    Month (..),
+
+    -- * Operation
+    Operation (..),
+
+    -- * OptimizationMetric
+    OptimizationMetric (..),
+
+    -- * ScalingType
+    ScalingType (..),
+
+    -- * State
+    State (..),
+
+    -- * TimePointGranularity
+    TimePointGranularity (..),
+
+    -- * TimeSeriesGranularity
+    TimeSeriesGranularity (..),
+
+    -- * Action
+    Action (..),
+    newAction,
+    action_attributeName,
+    action_operation,
+    action_value,
+
+    -- * AdditionalDataset
+    AdditionalDataset (..),
+    newAdditionalDataset,
+    additionalDataset_configuration,
+    additionalDataset_name,
+
+    -- * AttributeConfig
+    AttributeConfig (..),
+    newAttributeConfig,
+    attributeConfig_attributeName,
+    attributeConfig_transformations,
+
+    -- * Baseline
+    Baseline (..),
+    newBaseline,
+    baseline_predictorBaseline,
+
+    -- * BaselineMetric
+    BaselineMetric (..),
+    newBaselineMetric,
+    baselineMetric_name,
+    baselineMetric_value,
+
+    -- * CategoricalParameterRange
+    CategoricalParameterRange (..),
+    newCategoricalParameterRange,
+    categoricalParameterRange_name,
+    categoricalParameterRange_values,
+
+    -- * ContinuousParameterRange
+    ContinuousParameterRange (..),
+    newContinuousParameterRange,
+    continuousParameterRange_scalingType,
+    continuousParameterRange_name,
+    continuousParameterRange_maxValue,
+    continuousParameterRange_minValue,
+
+    -- * DataConfig
+    DataConfig (..),
+    newDataConfig,
+    dataConfig_additionalDatasets,
+    dataConfig_attributeConfigs,
+    dataConfig_datasetGroupArn,
+
+    -- * DataDestination
+    DataDestination (..),
+    newDataDestination,
+    dataDestination_s3Config,
+
+    -- * DataSource
+    DataSource (..),
+    newDataSource,
+    dataSource_s3Config,
+
+    -- * DatasetGroupSummary
+    DatasetGroupSummary (..),
+    newDatasetGroupSummary,
+    datasetGroupSummary_creationTime,
+    datasetGroupSummary_datasetGroupArn,
+    datasetGroupSummary_datasetGroupName,
+    datasetGroupSummary_lastModificationTime,
+
+    -- * DatasetImportJobSummary
+    DatasetImportJobSummary (..),
+    newDatasetImportJobSummary,
+    datasetImportJobSummary_creationTime,
+    datasetImportJobSummary_dataSource,
+    datasetImportJobSummary_datasetImportJobArn,
+    datasetImportJobSummary_datasetImportJobName,
+    datasetImportJobSummary_lastModificationTime,
+    datasetImportJobSummary_message,
+    datasetImportJobSummary_status,
+
+    -- * DatasetSummary
+    DatasetSummary (..),
+    newDatasetSummary,
+    datasetSummary_creationTime,
+    datasetSummary_datasetArn,
+    datasetSummary_datasetName,
+    datasetSummary_datasetType,
+    datasetSummary_domain,
+    datasetSummary_lastModificationTime,
+
+    -- * EncryptionConfig
+    EncryptionConfig (..),
+    newEncryptionConfig,
+    encryptionConfig_roleArn,
+    encryptionConfig_kmsKeyArn,
+
+    -- * ErrorMetric
+    ErrorMetric (..),
+    newErrorMetric,
+    errorMetric_forecastType,
+    errorMetric_mape,
+    errorMetric_mase,
+    errorMetric_rmse,
+    errorMetric_wape,
+
+    -- * EvaluationParameters
+    EvaluationParameters (..),
+    newEvaluationParameters,
+    evaluationParameters_backTestWindowOffset,
+    evaluationParameters_numberOfBacktestWindows,
+
+    -- * EvaluationResult
+    EvaluationResult (..),
+    newEvaluationResult,
+    evaluationResult_algorithmArn,
+    evaluationResult_testWindows,
+
+    -- * ExplainabilityConfig
+    ExplainabilityConfig (..),
+    newExplainabilityConfig,
+    explainabilityConfig_timeSeriesGranularity,
+    explainabilityConfig_timePointGranularity,
+
+    -- * ExplainabilityExportSummary
+    ExplainabilityExportSummary (..),
+    newExplainabilityExportSummary,
+    explainabilityExportSummary_creationTime,
+    explainabilityExportSummary_destination,
+    explainabilityExportSummary_explainabilityExportArn,
+    explainabilityExportSummary_explainabilityExportName,
+    explainabilityExportSummary_lastModificationTime,
+    explainabilityExportSummary_message,
+    explainabilityExportSummary_status,
+
+    -- * ExplainabilityInfo
+    ExplainabilityInfo (..),
+    newExplainabilityInfo,
+    explainabilityInfo_explainabilityArn,
+    explainabilityInfo_status,
+
+    -- * ExplainabilitySummary
+    ExplainabilitySummary (..),
+    newExplainabilitySummary,
+    explainabilitySummary_creationTime,
+    explainabilitySummary_explainabilityArn,
+    explainabilitySummary_explainabilityConfig,
+    explainabilitySummary_explainabilityName,
+    explainabilitySummary_lastModificationTime,
+    explainabilitySummary_message,
+    explainabilitySummary_resourceArn,
+    explainabilitySummary_status,
+
+    -- * Featurization
+    Featurization (..),
+    newFeaturization,
+    featurization_featurizationPipeline,
+    featurization_attributeName,
+
+    -- * FeaturizationConfig
+    FeaturizationConfig (..),
+    newFeaturizationConfig,
+    featurizationConfig_featurizations,
+    featurizationConfig_forecastDimensions,
+    featurizationConfig_forecastFrequency,
+
+    -- * FeaturizationMethod
+    FeaturizationMethod (..),
+    newFeaturizationMethod,
+    featurizationMethod_featurizationMethodParameters,
+    featurizationMethod_featurizationMethodName,
+
+    -- * Filter
+    Filter (..),
+    newFilter,
+    filter_key,
+    filter_value,
+    filter_condition,
+
+    -- * ForecastExportJobSummary
+    ForecastExportJobSummary (..),
+    newForecastExportJobSummary,
+    forecastExportJobSummary_creationTime,
+    forecastExportJobSummary_destination,
+    forecastExportJobSummary_forecastExportJobArn,
+    forecastExportJobSummary_forecastExportJobName,
+    forecastExportJobSummary_lastModificationTime,
+    forecastExportJobSummary_message,
+    forecastExportJobSummary_status,
+
+    -- * ForecastSummary
+    ForecastSummary (..),
+    newForecastSummary,
+    forecastSummary_createdUsingAutoPredictor,
+    forecastSummary_creationTime,
+    forecastSummary_datasetGroupArn,
+    forecastSummary_forecastArn,
+    forecastSummary_forecastName,
+    forecastSummary_lastModificationTime,
+    forecastSummary_message,
+    forecastSummary_predictorArn,
+    forecastSummary_status,
+
+    -- * HyperParameterTuningJobConfig
+    HyperParameterTuningJobConfig (..),
+    newHyperParameterTuningJobConfig,
+    hyperParameterTuningJobConfig_parameterRanges,
+
+    -- * InputDataConfig
+    InputDataConfig (..),
+    newInputDataConfig,
+    inputDataConfig_supplementaryFeatures,
+    inputDataConfig_datasetGroupArn,
+
+    -- * IntegerParameterRange
+    IntegerParameterRange (..),
+    newIntegerParameterRange,
+    integerParameterRange_scalingType,
+    integerParameterRange_name,
+    integerParameterRange_maxValue,
+    integerParameterRange_minValue,
+
+    -- * MetricResult
+    MetricResult (..),
+    newMetricResult,
+    metricResult_metricName,
+    metricResult_metricValue,
+
+    -- * Metrics
+    Metrics (..),
+    newMetrics,
+    metrics_averageWeightedQuantileLoss,
+    metrics_errorMetrics,
+    metrics_rmse,
+    metrics_weightedQuantileLosses,
+
+    -- * MonitorConfig
+    MonitorConfig (..),
+    newMonitorConfig,
+    monitorConfig_monitorName,
+
+    -- * MonitorDataSource
+    MonitorDataSource (..),
+    newMonitorDataSource,
+    monitorDataSource_datasetImportJobArn,
+    monitorDataSource_forecastArn,
+    monitorDataSource_predictorArn,
+
+    -- * MonitorInfo
+    MonitorInfo (..),
+    newMonitorInfo,
+    monitorInfo_monitorArn,
+    monitorInfo_status,
+
+    -- * MonitorSummary
+    MonitorSummary (..),
+    newMonitorSummary,
+    monitorSummary_creationTime,
+    monitorSummary_lastModificationTime,
+    monitorSummary_monitorArn,
+    monitorSummary_monitorName,
+    monitorSummary_resourceArn,
+    monitorSummary_status,
+
+    -- * ParameterRanges
+    ParameterRanges (..),
+    newParameterRanges,
+    parameterRanges_categoricalParameterRanges,
+    parameterRanges_continuousParameterRanges,
+    parameterRanges_integerParameterRanges,
+
+    -- * PredictorBacktestExportJobSummary
+    PredictorBacktestExportJobSummary (..),
+    newPredictorBacktestExportJobSummary,
+    predictorBacktestExportJobSummary_creationTime,
+    predictorBacktestExportJobSummary_destination,
+    predictorBacktestExportJobSummary_lastModificationTime,
+    predictorBacktestExportJobSummary_message,
+    predictorBacktestExportJobSummary_predictorBacktestExportJobArn,
+    predictorBacktestExportJobSummary_predictorBacktestExportJobName,
+    predictorBacktestExportJobSummary_status,
+
+    -- * PredictorBaseline
+    PredictorBaseline (..),
+    newPredictorBaseline,
+    predictorBaseline_baselineMetrics,
+
+    -- * PredictorEvent
+    PredictorEvent (..),
+    newPredictorEvent,
+    predictorEvent_datetime,
+    predictorEvent_detail,
+
+    -- * PredictorExecution
+    PredictorExecution (..),
+    newPredictorExecution,
+    predictorExecution_algorithmArn,
+    predictorExecution_testWindows,
+
+    -- * PredictorExecutionDetails
+    PredictorExecutionDetails (..),
+    newPredictorExecutionDetails,
+    predictorExecutionDetails_predictorExecutions,
+
+    -- * PredictorMonitorEvaluation
+    PredictorMonitorEvaluation (..),
+    newPredictorMonitorEvaluation,
+    predictorMonitorEvaluation_evaluationState,
+    predictorMonitorEvaluation_evaluationTime,
+    predictorMonitorEvaluation_message,
+    predictorMonitorEvaluation_metricResults,
+    predictorMonitorEvaluation_monitorArn,
+    predictorMonitorEvaluation_monitorDataSource,
+    predictorMonitorEvaluation_numItemsEvaluated,
+    predictorMonitorEvaluation_predictorEvent,
+    predictorMonitorEvaluation_resourceArn,
+    predictorMonitorEvaluation_windowEndDatetime,
+    predictorMonitorEvaluation_windowStartDatetime,
+
+    -- * PredictorSummary
+    PredictorSummary (..),
+    newPredictorSummary,
+    predictorSummary_creationTime,
+    predictorSummary_datasetGroupArn,
+    predictorSummary_isAutoPredictor,
+    predictorSummary_lastModificationTime,
+    predictorSummary_message,
+    predictorSummary_predictorArn,
+    predictorSummary_predictorName,
+    predictorSummary_referencePredictorSummary,
+    predictorSummary_status,
+
+    -- * ReferencePredictorSummary
+    ReferencePredictorSummary (..),
+    newReferencePredictorSummary,
+    referencePredictorSummary_arn,
+    referencePredictorSummary_state,
+
+    -- * S3Config
+    S3Config (..),
+    newS3Config,
+    s3Config_kmsKeyArn,
+    s3Config_path,
+    s3Config_roleArn,
+
+    -- * Schema
+    Schema (..),
+    newSchema,
+    schema_attributes,
+
+    -- * SchemaAttribute
+    SchemaAttribute (..),
+    newSchemaAttribute,
+    schemaAttribute_attributeName,
+    schemaAttribute_attributeType,
+
+    -- * Statistics
+    Statistics (..),
+    newStatistics,
+    statistics_avg,
+    statistics_count,
+    statistics_countDistinct,
+    statistics_countDistinctLong,
+    statistics_countLong,
+    statistics_countNan,
+    statistics_countNanLong,
+    statistics_countNull,
+    statistics_countNullLong,
+    statistics_max,
+    statistics_min,
+    statistics_stddev,
+
+    -- * SupplementaryFeature
+    SupplementaryFeature (..),
+    newSupplementaryFeature,
+    supplementaryFeature_name,
+    supplementaryFeature_value,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TestWindowSummary
+    TestWindowSummary (..),
+    newTestWindowSummary,
+    testWindowSummary_message,
+    testWindowSummary_status,
+    testWindowSummary_testWindowEnd,
+    testWindowSummary_testWindowStart,
+
+    -- * TimeAlignmentBoundary
+    TimeAlignmentBoundary (..),
+    newTimeAlignmentBoundary,
+    timeAlignmentBoundary_dayOfMonth,
+    timeAlignmentBoundary_dayOfWeek,
+    timeAlignmentBoundary_hour,
+    timeAlignmentBoundary_month,
+
+    -- * TimeSeriesCondition
+    TimeSeriesCondition (..),
+    newTimeSeriesCondition,
+    timeSeriesCondition_attributeName,
+    timeSeriesCondition_attributeValue,
+    timeSeriesCondition_condition,
+
+    -- * TimeSeriesIdentifiers
+    TimeSeriesIdentifiers (..),
+    newTimeSeriesIdentifiers,
+    timeSeriesIdentifiers_dataSource,
+    timeSeriesIdentifiers_format,
+    timeSeriesIdentifiers_schema,
+
+    -- * TimeSeriesReplacementsDataSource
+    TimeSeriesReplacementsDataSource (..),
+    newTimeSeriesReplacementsDataSource,
+    timeSeriesReplacementsDataSource_format,
+    timeSeriesReplacementsDataSource_timestampFormat,
+    timeSeriesReplacementsDataSource_s3Config,
+    timeSeriesReplacementsDataSource_schema,
+
+    -- * TimeSeriesSelector
+    TimeSeriesSelector (..),
+    newTimeSeriesSelector,
+    timeSeriesSelector_timeSeriesIdentifiers,
+
+    -- * TimeSeriesTransformation
+    TimeSeriesTransformation (..),
+    newTimeSeriesTransformation,
+    timeSeriesTransformation_action,
+    timeSeriesTransformation_timeSeriesConditions,
+
+    -- * WeightedQuantileLoss
+    WeightedQuantileLoss (..),
+    newWeightedQuantileLoss,
+    weightedQuantileLoss_lossValue,
+    weightedQuantileLoss_quantile,
+
+    -- * WhatIfAnalysisSummary
+    WhatIfAnalysisSummary (..),
+    newWhatIfAnalysisSummary,
+    whatIfAnalysisSummary_creationTime,
+    whatIfAnalysisSummary_forecastArn,
+    whatIfAnalysisSummary_lastModificationTime,
+    whatIfAnalysisSummary_message,
+    whatIfAnalysisSummary_status,
+    whatIfAnalysisSummary_whatIfAnalysisArn,
+    whatIfAnalysisSummary_whatIfAnalysisName,
+
+    -- * WhatIfForecastExportSummary
+    WhatIfForecastExportSummary (..),
+    newWhatIfForecastExportSummary,
+    whatIfForecastExportSummary_creationTime,
+    whatIfForecastExportSummary_destination,
+    whatIfForecastExportSummary_lastModificationTime,
+    whatIfForecastExportSummary_message,
+    whatIfForecastExportSummary_status,
+    whatIfForecastExportSummary_whatIfForecastArns,
+    whatIfForecastExportSummary_whatIfForecastExportArn,
+    whatIfForecastExportSummary_whatIfForecastExportName,
+
+    -- * WhatIfForecastSummary
+    WhatIfForecastSummary (..),
+    newWhatIfForecastSummary,
+    whatIfForecastSummary_creationTime,
+    whatIfForecastSummary_lastModificationTime,
+    whatIfForecastSummary_message,
+    whatIfForecastSummary_status,
+    whatIfForecastSummary_whatIfAnalysisArn,
+    whatIfForecastSummary_whatIfForecastArn,
+    whatIfForecastSummary_whatIfForecastName,
+
+    -- * WindowSummary
+    WindowSummary (..),
+    newWindowSummary,
+    windowSummary_evaluationType,
+    windowSummary_itemCount,
+    windowSummary_metrics,
+    windowSummary_testWindowEnd,
+    windowSummary_testWindowStart,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.Forecast.Types.Action
+import Amazonka.Forecast.Types.AdditionalDataset
+import Amazonka.Forecast.Types.AttributeConfig
+import Amazonka.Forecast.Types.AttributeType
+import Amazonka.Forecast.Types.AutoMLOverrideStrategy
+import Amazonka.Forecast.Types.Baseline
+import Amazonka.Forecast.Types.BaselineMetric
+import Amazonka.Forecast.Types.CategoricalParameterRange
+import Amazonka.Forecast.Types.Condition
+import Amazonka.Forecast.Types.ContinuousParameterRange
+import Amazonka.Forecast.Types.DataConfig
+import Amazonka.Forecast.Types.DataDestination
+import Amazonka.Forecast.Types.DataSource
+import Amazonka.Forecast.Types.DatasetGroupSummary
+import Amazonka.Forecast.Types.DatasetImportJobSummary
+import Amazonka.Forecast.Types.DatasetSummary
+import Amazonka.Forecast.Types.DatasetType
+import Amazonka.Forecast.Types.DayOfWeek
+import Amazonka.Forecast.Types.Domain
+import Amazonka.Forecast.Types.EncryptionConfig
+import Amazonka.Forecast.Types.ErrorMetric
+import Amazonka.Forecast.Types.EvaluationParameters
+import Amazonka.Forecast.Types.EvaluationResult
+import Amazonka.Forecast.Types.EvaluationType
+import Amazonka.Forecast.Types.ExplainabilityConfig
+import Amazonka.Forecast.Types.ExplainabilityExportSummary
+import Amazonka.Forecast.Types.ExplainabilityInfo
+import Amazonka.Forecast.Types.ExplainabilitySummary
+import Amazonka.Forecast.Types.Featurization
+import Amazonka.Forecast.Types.FeaturizationConfig
+import Amazonka.Forecast.Types.FeaturizationMethod
+import Amazonka.Forecast.Types.FeaturizationMethodName
+import Amazonka.Forecast.Types.Filter
+import Amazonka.Forecast.Types.FilterConditionString
+import Amazonka.Forecast.Types.ForecastExportJobSummary
+import Amazonka.Forecast.Types.ForecastSummary
+import Amazonka.Forecast.Types.HyperParameterTuningJobConfig
+import Amazonka.Forecast.Types.InputDataConfig
+import Amazonka.Forecast.Types.IntegerParameterRange
+import Amazonka.Forecast.Types.MetricResult
+import Amazonka.Forecast.Types.Metrics
+import Amazonka.Forecast.Types.MonitorConfig
+import Amazonka.Forecast.Types.MonitorDataSource
+import Amazonka.Forecast.Types.MonitorInfo
+import Amazonka.Forecast.Types.MonitorSummary
+import Amazonka.Forecast.Types.Month
+import Amazonka.Forecast.Types.Operation
+import Amazonka.Forecast.Types.OptimizationMetric
+import Amazonka.Forecast.Types.ParameterRanges
+import Amazonka.Forecast.Types.PredictorBacktestExportJobSummary
+import Amazonka.Forecast.Types.PredictorBaseline
+import Amazonka.Forecast.Types.PredictorEvent
+import Amazonka.Forecast.Types.PredictorExecution
+import Amazonka.Forecast.Types.PredictorExecutionDetails
+import Amazonka.Forecast.Types.PredictorMonitorEvaluation
+import Amazonka.Forecast.Types.PredictorSummary
+import Amazonka.Forecast.Types.ReferencePredictorSummary
+import Amazonka.Forecast.Types.S3Config
+import Amazonka.Forecast.Types.ScalingType
+import Amazonka.Forecast.Types.Schema
+import Amazonka.Forecast.Types.SchemaAttribute
+import Amazonka.Forecast.Types.State
+import Amazonka.Forecast.Types.Statistics
+import Amazonka.Forecast.Types.SupplementaryFeature
+import Amazonka.Forecast.Types.Tag
+import Amazonka.Forecast.Types.TestWindowSummary
+import Amazonka.Forecast.Types.TimeAlignmentBoundary
+import Amazonka.Forecast.Types.TimePointGranularity
+import Amazonka.Forecast.Types.TimeSeriesCondition
+import Amazonka.Forecast.Types.TimeSeriesGranularity
+import Amazonka.Forecast.Types.TimeSeriesIdentifiers
+import Amazonka.Forecast.Types.TimeSeriesReplacementsDataSource
+import Amazonka.Forecast.Types.TimeSeriesSelector
+import Amazonka.Forecast.Types.TimeSeriesTransformation
+import Amazonka.Forecast.Types.WeightedQuantileLoss
+import Amazonka.Forecast.Types.WhatIfAnalysisSummary
+import Amazonka.Forecast.Types.WhatIfForecastExportSummary
+import Amazonka.Forecast.Types.WhatIfForecastSummary
+import Amazonka.Forecast.Types.WindowSummary
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2018-06-26@ of the Amazon Forecast Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Forecast",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "forecast",
+      Core.signingName = "forecast",
+      Core.version = "2018-06-26",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Forecast",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | We can\'t process the request because it includes an invalid value or a
+-- value that exceeds the valid range.
+_InvalidInputException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidInputException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidInputException"
+
+-- | The token is not valid. Tokens expire after 24 hours.
+_InvalidNextTokenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidNextTokenException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidNextTokenException"
+
+-- | The limit on the number of resources per account has been exceeded.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+
+-- | There is already a resource with this name. Try again with a different
+-- name.
+_ResourceAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistsException"
+
+-- | The specified resource is in use.
+_ResourceInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceInUseException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceInUseException"
+
+-- | We can\'t find a resource with that Amazon Resource Name (ARN). Check
+-- the ARN and try again.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
diff --git a/gen/Amazonka/Forecast/Types/Action.hs b/gen/Amazonka/Forecast/Types/Action.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Action.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Action
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Action where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.Operation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the modifications that you are making to an attribute for a
+-- what-if forecast. For example, you can use this operation to create a
+-- what-if forecast that investigates a 10% off sale on all shoes. To do
+-- this, you specify @\"AttributeName\": \"shoes\"@,
+-- @\"Operation\": \"MULTIPLY\"@, and @\"Value\": \"0.90\"@. Pair this
+-- operation with the TimeSeriesCondition operation within the
+-- CreateWhatIfForecastRequest$TimeSeriesTransformations operation to
+-- define a subset of attribute items that are modified.
+--
+-- /See:/ 'newAction' smart constructor.
+data Action = Action'
+  { -- | The related time series that you are modifying. This value is case
+    -- insensitive.
+    attributeName :: Prelude.Text,
+    -- | The operation that is applied to the provided attribute. Operations
+    -- include:
+    --
+    -- -   @ADD@ - adds @Value@ to all rows of @AttributeName@.
+    --
+    -- -   @SUBTRACT@ - subtracts @Value@ from all rows of @AttributeName@.
+    --
+    -- -   @MULTIPLY@ - multiplies all rows of @AttributeName@ by @Value@.
+    --
+    -- -   @DIVIDE@ - divides all rows of @AttributeName@ by @Value@.
+    operation :: Operation,
+    -- | The value that is applied for the chosen @Operation@.
+    value :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Action' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'action_attributeName' - The related time series that you are modifying. This value is case
+-- insensitive.
+--
+-- 'operation', 'action_operation' - The operation that is applied to the provided attribute. Operations
+-- include:
+--
+-- -   @ADD@ - adds @Value@ to all rows of @AttributeName@.
+--
+-- -   @SUBTRACT@ - subtracts @Value@ from all rows of @AttributeName@.
+--
+-- -   @MULTIPLY@ - multiplies all rows of @AttributeName@ by @Value@.
+--
+-- -   @DIVIDE@ - divides all rows of @AttributeName@ by @Value@.
+--
+-- 'value', 'action_value' - The value that is applied for the chosen @Operation@.
+newAction ::
+  -- | 'attributeName'
+  Prelude.Text ->
+  -- | 'operation'
+  Operation ->
+  -- | 'value'
+  Prelude.Double ->
+  Action
+newAction pAttributeName_ pOperation_ pValue_ =
+  Action'
+    { attributeName = pAttributeName_,
+      operation = pOperation_,
+      value = pValue_
+    }
+
+-- | The related time series that you are modifying. This value is case
+-- insensitive.
+action_attributeName :: Lens.Lens' Action Prelude.Text
+action_attributeName = Lens.lens (\Action' {attributeName} -> attributeName) (\s@Action' {} a -> s {attributeName = a} :: Action)
+
+-- | The operation that is applied to the provided attribute. Operations
+-- include:
+--
+-- -   @ADD@ - adds @Value@ to all rows of @AttributeName@.
+--
+-- -   @SUBTRACT@ - subtracts @Value@ from all rows of @AttributeName@.
+--
+-- -   @MULTIPLY@ - multiplies all rows of @AttributeName@ by @Value@.
+--
+-- -   @DIVIDE@ - divides all rows of @AttributeName@ by @Value@.
+action_operation :: Lens.Lens' Action Operation
+action_operation = Lens.lens (\Action' {operation} -> operation) (\s@Action' {} a -> s {operation = a} :: Action)
+
+-- | The value that is applied for the chosen @Operation@.
+action_value :: Lens.Lens' Action Prelude.Double
+action_value = Lens.lens (\Action' {value} -> value) (\s@Action' {} a -> s {value = a} :: Action)
+
+instance Data.FromJSON Action where
+  parseJSON =
+    Data.withObject
+      "Action"
+      ( \x ->
+          Action'
+            Prelude.<$> (x Data..: "AttributeName")
+            Prelude.<*> (x Data..: "Operation")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Action where
+  hashWithSalt _salt Action' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` operation
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Action where
+  rnf Action' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf operation
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Action where
+  toJSON Action' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AttributeName" Data..= attributeName),
+            Prelude.Just ("Operation" Data..= operation),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/AdditionalDataset.hs b/gen/Amazonka/Forecast/Types/AdditionalDataset.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/AdditionalDataset.hs
@@ -0,0 +1,541 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.AdditionalDataset
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.AdditionalDataset where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an additional dataset. This object is part of the DataConfig
+-- object. Forecast supports the Weather Index and Holidays additional
+-- datasets.
+--
+-- __Weather Index__
+--
+-- The Amazon Forecast Weather Index is a built-in dataset that
+-- incorporates historical and projected weather information into your
+-- model. The Weather Index supplements your datasets with over two years
+-- of historical weather data and up to 14 days of projected weather data.
+-- For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/weather.html Amazon Forecast Weather Index>.
+--
+-- __Holidays__
+--
+-- Holidays is a built-in dataset that incorporates national holiday
+-- information into your model. It provides native support for the holiday
+-- calendars of 66 countries. To view the holiday calendars, refer to the
+-- <http://jollyday.sourceforge.net/data.html Jollyday> library. For more
+-- information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/holidays.html Holidays Featurization>.
+--
+-- /See:/ 'newAdditionalDataset' smart constructor.
+data AdditionalDataset = AdditionalDataset'
+  { -- | __Weather Index__
+    --
+    -- To enable the Weather Index, do not specify a value for @Configuration@.
+    --
+    -- __Holidays__
+    --
+    -- __Holidays__
+    --
+    -- To enable Holidays, set @CountryCode@ to one of the following two-letter
+    -- country codes:
+    --
+    -- -   \"AL\" - ALBANIA
+    --
+    -- -   \"AR\" - ARGENTINA
+    --
+    -- -   \"AT\" - AUSTRIA
+    --
+    -- -   \"AU\" - AUSTRALIA
+    --
+    -- -   \"BA\" - BOSNIA HERZEGOVINA
+    --
+    -- -   \"BE\" - BELGIUM
+    --
+    -- -   \"BG\" - BULGARIA
+    --
+    -- -   \"BO\" - BOLIVIA
+    --
+    -- -   \"BR\" - BRAZIL
+    --
+    -- -   \"BY\" - BELARUS
+    --
+    -- -   \"CA\" - CANADA
+    --
+    -- -   \"CL\" - CHILE
+    --
+    -- -   \"CO\" - COLOMBIA
+    --
+    -- -   \"CR\" - COSTA RICA
+    --
+    -- -   \"HR\" - CROATIA
+    --
+    -- -   \"CZ\" - CZECH REPUBLIC
+    --
+    -- -   \"DK\" - DENMARK
+    --
+    -- -   \"EC\" - ECUADOR
+    --
+    -- -   \"EE\" - ESTONIA
+    --
+    -- -   \"ET\" - ETHIOPIA
+    --
+    -- -   \"FI\" - FINLAND
+    --
+    -- -   \"FR\" - FRANCE
+    --
+    -- -   \"DE\" - GERMANY
+    --
+    -- -   \"GR\" - GREECE
+    --
+    -- -   \"HU\" - HUNGARY
+    --
+    -- -   \"IS\" - ICELAND
+    --
+    -- -   \"IN\" - INDIA
+    --
+    -- -   \"IE\" - IRELAND
+    --
+    -- -   \"IT\" - ITALY
+    --
+    -- -   \"JP\" - JAPAN
+    --
+    -- -   \"KZ\" - KAZAKHSTAN
+    --
+    -- -   \"KR\" - KOREA
+    --
+    -- -   \"LV\" - LATVIA
+    --
+    -- -   \"LI\" - LIECHTENSTEIN
+    --
+    -- -   \"LT\" - LITHUANIA
+    --
+    -- -   \"LU\" - LUXEMBOURG
+    --
+    -- -   \"MK\" - MACEDONIA
+    --
+    -- -   \"MT\" - MALTA
+    --
+    -- -   \"MX\" - MEXICO
+    --
+    -- -   \"MD\" - MOLDOVA
+    --
+    -- -   \"ME\" - MONTENEGRO
+    --
+    -- -   \"NL\" - NETHERLANDS
+    --
+    -- -   \"NZ\" - NEW ZEALAND
+    --
+    -- -   \"NI\" - NICARAGUA
+    --
+    -- -   \"NG\" - NIGERIA
+    --
+    -- -   \"NO\" - NORWAY
+    --
+    -- -   \"PA\" - PANAMA
+    --
+    -- -   \"PY\" - PARAGUAY
+    --
+    -- -   \"PE\" - PERU
+    --
+    -- -   \"PL\" - POLAND
+    --
+    -- -   \"PT\" - PORTUGAL
+    --
+    -- -   \"RO\" - ROMANIA
+    --
+    -- -   \"RU\" - RUSSIA
+    --
+    -- -   \"RS\" - SERBIA
+    --
+    -- -   \"SK\" - SLOVAKIA
+    --
+    -- -   \"SI\" - SLOVENIA
+    --
+    -- -   \"ZA\" - SOUTH AFRICA
+    --
+    -- -   \"ES\" - SPAIN
+    --
+    -- -   \"SE\" - SWEDEN
+    --
+    -- -   \"CH\" - SWITZERLAND
+    --
+    -- -   \"UA\" - UKRAINE
+    --
+    -- -   \"AE\" - UNITED ARAB EMIRATES
+    --
+    -- -   \"US\" - UNITED STATES
+    --
+    -- -   \"UK\" - UNITED KINGDOM
+    --
+    -- -   \"UY\" - URUGUAY
+    --
+    -- -   \"VE\" - VENEZUELA
+    configuration :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.NonEmpty Prelude.Text)),
+    -- | The name of the additional dataset. Valid names: @\"holiday\"@ and
+    -- @\"weather\"@.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdditionalDataset' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configuration', 'additionalDataset_configuration' - __Weather Index__
+--
+-- To enable the Weather Index, do not specify a value for @Configuration@.
+--
+-- __Holidays__
+--
+-- __Holidays__
+--
+-- To enable Holidays, set @CountryCode@ to one of the following two-letter
+-- country codes:
+--
+-- -   \"AL\" - ALBANIA
+--
+-- -   \"AR\" - ARGENTINA
+--
+-- -   \"AT\" - AUSTRIA
+--
+-- -   \"AU\" - AUSTRALIA
+--
+-- -   \"BA\" - BOSNIA HERZEGOVINA
+--
+-- -   \"BE\" - BELGIUM
+--
+-- -   \"BG\" - BULGARIA
+--
+-- -   \"BO\" - BOLIVIA
+--
+-- -   \"BR\" - BRAZIL
+--
+-- -   \"BY\" - BELARUS
+--
+-- -   \"CA\" - CANADA
+--
+-- -   \"CL\" - CHILE
+--
+-- -   \"CO\" - COLOMBIA
+--
+-- -   \"CR\" - COSTA RICA
+--
+-- -   \"HR\" - CROATIA
+--
+-- -   \"CZ\" - CZECH REPUBLIC
+--
+-- -   \"DK\" - DENMARK
+--
+-- -   \"EC\" - ECUADOR
+--
+-- -   \"EE\" - ESTONIA
+--
+-- -   \"ET\" - ETHIOPIA
+--
+-- -   \"FI\" - FINLAND
+--
+-- -   \"FR\" - FRANCE
+--
+-- -   \"DE\" - GERMANY
+--
+-- -   \"GR\" - GREECE
+--
+-- -   \"HU\" - HUNGARY
+--
+-- -   \"IS\" - ICELAND
+--
+-- -   \"IN\" - INDIA
+--
+-- -   \"IE\" - IRELAND
+--
+-- -   \"IT\" - ITALY
+--
+-- -   \"JP\" - JAPAN
+--
+-- -   \"KZ\" - KAZAKHSTAN
+--
+-- -   \"KR\" - KOREA
+--
+-- -   \"LV\" - LATVIA
+--
+-- -   \"LI\" - LIECHTENSTEIN
+--
+-- -   \"LT\" - LITHUANIA
+--
+-- -   \"LU\" - LUXEMBOURG
+--
+-- -   \"MK\" - MACEDONIA
+--
+-- -   \"MT\" - MALTA
+--
+-- -   \"MX\" - MEXICO
+--
+-- -   \"MD\" - MOLDOVA
+--
+-- -   \"ME\" - MONTENEGRO
+--
+-- -   \"NL\" - NETHERLANDS
+--
+-- -   \"NZ\" - NEW ZEALAND
+--
+-- -   \"NI\" - NICARAGUA
+--
+-- -   \"NG\" - NIGERIA
+--
+-- -   \"NO\" - NORWAY
+--
+-- -   \"PA\" - PANAMA
+--
+-- -   \"PY\" - PARAGUAY
+--
+-- -   \"PE\" - PERU
+--
+-- -   \"PL\" - POLAND
+--
+-- -   \"PT\" - PORTUGAL
+--
+-- -   \"RO\" - ROMANIA
+--
+-- -   \"RU\" - RUSSIA
+--
+-- -   \"RS\" - SERBIA
+--
+-- -   \"SK\" - SLOVAKIA
+--
+-- -   \"SI\" - SLOVENIA
+--
+-- -   \"ZA\" - SOUTH AFRICA
+--
+-- -   \"ES\" - SPAIN
+--
+-- -   \"SE\" - SWEDEN
+--
+-- -   \"CH\" - SWITZERLAND
+--
+-- -   \"UA\" - UKRAINE
+--
+-- -   \"AE\" - UNITED ARAB EMIRATES
+--
+-- -   \"US\" - UNITED STATES
+--
+-- -   \"UK\" - UNITED KINGDOM
+--
+-- -   \"UY\" - URUGUAY
+--
+-- -   \"VE\" - VENEZUELA
+--
+-- 'name', 'additionalDataset_name' - The name of the additional dataset. Valid names: @\"holiday\"@ and
+-- @\"weather\"@.
+newAdditionalDataset ::
+  -- | 'name'
+  Prelude.Text ->
+  AdditionalDataset
+newAdditionalDataset pName_ =
+  AdditionalDataset'
+    { configuration = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | __Weather Index__
+--
+-- To enable the Weather Index, do not specify a value for @Configuration@.
+--
+-- __Holidays__
+--
+-- __Holidays__
+--
+-- To enable Holidays, set @CountryCode@ to one of the following two-letter
+-- country codes:
+--
+-- -   \"AL\" - ALBANIA
+--
+-- -   \"AR\" - ARGENTINA
+--
+-- -   \"AT\" - AUSTRIA
+--
+-- -   \"AU\" - AUSTRALIA
+--
+-- -   \"BA\" - BOSNIA HERZEGOVINA
+--
+-- -   \"BE\" - BELGIUM
+--
+-- -   \"BG\" - BULGARIA
+--
+-- -   \"BO\" - BOLIVIA
+--
+-- -   \"BR\" - BRAZIL
+--
+-- -   \"BY\" - BELARUS
+--
+-- -   \"CA\" - CANADA
+--
+-- -   \"CL\" - CHILE
+--
+-- -   \"CO\" - COLOMBIA
+--
+-- -   \"CR\" - COSTA RICA
+--
+-- -   \"HR\" - CROATIA
+--
+-- -   \"CZ\" - CZECH REPUBLIC
+--
+-- -   \"DK\" - DENMARK
+--
+-- -   \"EC\" - ECUADOR
+--
+-- -   \"EE\" - ESTONIA
+--
+-- -   \"ET\" - ETHIOPIA
+--
+-- -   \"FI\" - FINLAND
+--
+-- -   \"FR\" - FRANCE
+--
+-- -   \"DE\" - GERMANY
+--
+-- -   \"GR\" - GREECE
+--
+-- -   \"HU\" - HUNGARY
+--
+-- -   \"IS\" - ICELAND
+--
+-- -   \"IN\" - INDIA
+--
+-- -   \"IE\" - IRELAND
+--
+-- -   \"IT\" - ITALY
+--
+-- -   \"JP\" - JAPAN
+--
+-- -   \"KZ\" - KAZAKHSTAN
+--
+-- -   \"KR\" - KOREA
+--
+-- -   \"LV\" - LATVIA
+--
+-- -   \"LI\" - LIECHTENSTEIN
+--
+-- -   \"LT\" - LITHUANIA
+--
+-- -   \"LU\" - LUXEMBOURG
+--
+-- -   \"MK\" - MACEDONIA
+--
+-- -   \"MT\" - MALTA
+--
+-- -   \"MX\" - MEXICO
+--
+-- -   \"MD\" - MOLDOVA
+--
+-- -   \"ME\" - MONTENEGRO
+--
+-- -   \"NL\" - NETHERLANDS
+--
+-- -   \"NZ\" - NEW ZEALAND
+--
+-- -   \"NI\" - NICARAGUA
+--
+-- -   \"NG\" - NIGERIA
+--
+-- -   \"NO\" - NORWAY
+--
+-- -   \"PA\" - PANAMA
+--
+-- -   \"PY\" - PARAGUAY
+--
+-- -   \"PE\" - PERU
+--
+-- -   \"PL\" - POLAND
+--
+-- -   \"PT\" - PORTUGAL
+--
+-- -   \"RO\" - ROMANIA
+--
+-- -   \"RU\" - RUSSIA
+--
+-- -   \"RS\" - SERBIA
+--
+-- -   \"SK\" - SLOVAKIA
+--
+-- -   \"SI\" - SLOVENIA
+--
+-- -   \"ZA\" - SOUTH AFRICA
+--
+-- -   \"ES\" - SPAIN
+--
+-- -   \"SE\" - SWEDEN
+--
+-- -   \"CH\" - SWITZERLAND
+--
+-- -   \"UA\" - UKRAINE
+--
+-- -   \"AE\" - UNITED ARAB EMIRATES
+--
+-- -   \"US\" - UNITED STATES
+--
+-- -   \"UK\" - UNITED KINGDOM
+--
+-- -   \"UY\" - URUGUAY
+--
+-- -   \"VE\" - VENEZUELA
+additionalDataset_configuration :: Lens.Lens' AdditionalDataset (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.NonEmpty Prelude.Text)))
+additionalDataset_configuration = Lens.lens (\AdditionalDataset' {configuration} -> configuration) (\s@AdditionalDataset' {} a -> s {configuration = a} :: AdditionalDataset) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the additional dataset. Valid names: @\"holiday\"@ and
+-- @\"weather\"@.
+additionalDataset_name :: Lens.Lens' AdditionalDataset Prelude.Text
+additionalDataset_name = Lens.lens (\AdditionalDataset' {name} -> name) (\s@AdditionalDataset' {} a -> s {name = a} :: AdditionalDataset)
+
+instance Data.FromJSON AdditionalDataset where
+  parseJSON =
+    Data.withObject
+      "AdditionalDataset"
+      ( \x ->
+          AdditionalDataset'
+            Prelude.<$> (x Data..:? "Configuration" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable AdditionalDataset where
+  hashWithSalt _salt AdditionalDataset' {..} =
+    _salt
+      `Prelude.hashWithSalt` configuration
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AdditionalDataset where
+  rnf AdditionalDataset' {..} =
+    Prelude.rnf configuration
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToJSON AdditionalDataset where
+  toJSON AdditionalDataset' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Configuration" Data..=) Prelude.<$> configuration,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/AttributeConfig.hs b/gen/Amazonka/Forecast/Types/AttributeConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/AttributeConfig.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.AttributeConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.AttributeConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the method used to transform attributes.
+--
+-- The following is an example using the RETAIL domain:
+--
+-- @{@
+--
+-- @\"AttributeName\": \"demand\",@
+--
+-- @\"Transformations\": {\"aggregation\": \"sum\", \"middlefill\": \"zero\", \"backfill\": \"zero\"}@
+--
+-- @}@
+--
+-- /See:/ 'newAttributeConfig' smart constructor.
+data AttributeConfig = AttributeConfig'
+  { -- | The name of the attribute as specified in the schema. Amazon Forecast
+    -- supports the target field of the target time series and the related time
+    -- series datasets. For example, for the RETAIL domain, the target is
+    -- @demand@.
+    attributeName :: Prelude.Text,
+    -- | The method parameters (key-value pairs), which are a map of override
+    -- parameters. Specify these parameters to override the default values.
+    -- Related Time Series attributes do not accept aggregation parameters.
+    --
+    -- The following list shows the parameters and their valid values for the
+    -- \"filling\" featurization method for a __Target Time Series__ dataset.
+    -- Default values are bolded.
+    --
+    -- -   @aggregation@: __sum__, @avg@, @first@, @min@, @max@
+    --
+    -- -   @frontfill@: __none__
+    --
+    -- -   @middlefill@: __zero__, @nan@ (not a number), @value@, @median@,
+    --     @mean@, @min@, @max@
+    --
+    -- -   @backfill@: __zero__, @nan@, @value@, @median@, @mean@, @min@, @max@
+    --
+    -- The following list shows the parameters and their valid values for a
+    -- __Related Time Series__ featurization method (there are no defaults):
+    --
+    -- -   @middlefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+    --
+    -- -   @backfill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+    --
+    -- -   @futurefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+    --
+    -- To set a filling method to a specific value, set the fill parameter to
+    -- @value@ and define the value in a corresponding @_value@ parameter. For
+    -- example, to set backfilling to a value of 2, include the following:
+    -- @\"backfill\": \"value\"@ and @\"backfill_value\":\"2\"@.
+    transformations :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttributeConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'attributeConfig_attributeName' - The name of the attribute as specified in the schema. Amazon Forecast
+-- supports the target field of the target time series and the related time
+-- series datasets. For example, for the RETAIL domain, the target is
+-- @demand@.
+--
+-- 'transformations', 'attributeConfig_transformations' - The method parameters (key-value pairs), which are a map of override
+-- parameters. Specify these parameters to override the default values.
+-- Related Time Series attributes do not accept aggregation parameters.
+--
+-- The following list shows the parameters and their valid values for the
+-- \"filling\" featurization method for a __Target Time Series__ dataset.
+-- Default values are bolded.
+--
+-- -   @aggregation@: __sum__, @avg@, @first@, @min@, @max@
+--
+-- -   @frontfill@: __none__
+--
+-- -   @middlefill@: __zero__, @nan@ (not a number), @value@, @median@,
+--     @mean@, @min@, @max@
+--
+-- -   @backfill@: __zero__, @nan@, @value@, @median@, @mean@, @min@, @max@
+--
+-- The following list shows the parameters and their valid values for a
+-- __Related Time Series__ featurization method (there are no defaults):
+--
+-- -   @middlefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- -   @backfill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- -   @futurefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- To set a filling method to a specific value, set the fill parameter to
+-- @value@ and define the value in a corresponding @_value@ parameter. For
+-- example, to set backfilling to a value of 2, include the following:
+-- @\"backfill\": \"value\"@ and @\"backfill_value\":\"2\"@.
+newAttributeConfig ::
+  -- | 'attributeName'
+  Prelude.Text ->
+  AttributeConfig
+newAttributeConfig pAttributeName_ =
+  AttributeConfig'
+    { attributeName = pAttributeName_,
+      transformations = Prelude.mempty
+    }
+
+-- | The name of the attribute as specified in the schema. Amazon Forecast
+-- supports the target field of the target time series and the related time
+-- series datasets. For example, for the RETAIL domain, the target is
+-- @demand@.
+attributeConfig_attributeName :: Lens.Lens' AttributeConfig Prelude.Text
+attributeConfig_attributeName = Lens.lens (\AttributeConfig' {attributeName} -> attributeName) (\s@AttributeConfig' {} a -> s {attributeName = a} :: AttributeConfig)
+
+-- | The method parameters (key-value pairs), which are a map of override
+-- parameters. Specify these parameters to override the default values.
+-- Related Time Series attributes do not accept aggregation parameters.
+--
+-- The following list shows the parameters and their valid values for the
+-- \"filling\" featurization method for a __Target Time Series__ dataset.
+-- Default values are bolded.
+--
+-- -   @aggregation@: __sum__, @avg@, @first@, @min@, @max@
+--
+-- -   @frontfill@: __none__
+--
+-- -   @middlefill@: __zero__, @nan@ (not a number), @value@, @median@,
+--     @mean@, @min@, @max@
+--
+-- -   @backfill@: __zero__, @nan@, @value@, @median@, @mean@, @min@, @max@
+--
+-- The following list shows the parameters and their valid values for a
+-- __Related Time Series__ featurization method (there are no defaults):
+--
+-- -   @middlefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- -   @backfill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- -   @futurefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- To set a filling method to a specific value, set the fill parameter to
+-- @value@ and define the value in a corresponding @_value@ parameter. For
+-- example, to set backfilling to a value of 2, include the following:
+-- @\"backfill\": \"value\"@ and @\"backfill_value\":\"2\"@.
+attributeConfig_transformations :: Lens.Lens' AttributeConfig (Prelude.HashMap Prelude.Text Prelude.Text)
+attributeConfig_transformations = Lens.lens (\AttributeConfig' {transformations} -> transformations) (\s@AttributeConfig' {} a -> s {transformations = a} :: AttributeConfig) Prelude.. Lens.coerced
+
+instance Data.FromJSON AttributeConfig where
+  parseJSON =
+    Data.withObject
+      "AttributeConfig"
+      ( \x ->
+          AttributeConfig'
+            Prelude.<$> (x Data..: "AttributeName")
+            Prelude.<*> ( x
+                            Data..:? "Transformations"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable AttributeConfig where
+  hashWithSalt _salt AttributeConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` transformations
+
+instance Prelude.NFData AttributeConfig where
+  rnf AttributeConfig' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf transformations
+
+instance Data.ToJSON AttributeConfig where
+  toJSON AttributeConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AttributeName" Data..= attributeName),
+            Prelude.Just
+              ("Transformations" Data..= transformations)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/AttributeType.hs b/gen/Amazonka/Forecast/Types/AttributeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/AttributeType.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.AttributeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.AttributeType
+  ( AttributeType
+      ( ..,
+        AttributeType_Float,
+        AttributeType_Geolocation,
+        AttributeType_Integer,
+        AttributeType_String,
+        AttributeType_Timestamp
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AttributeType = AttributeType'
+  { fromAttributeType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AttributeType_Float :: AttributeType
+pattern AttributeType_Float = AttributeType' "float"
+
+pattern AttributeType_Geolocation :: AttributeType
+pattern AttributeType_Geolocation = AttributeType' "geolocation"
+
+pattern AttributeType_Integer :: AttributeType
+pattern AttributeType_Integer = AttributeType' "integer"
+
+pattern AttributeType_String :: AttributeType
+pattern AttributeType_String = AttributeType' "string"
+
+pattern AttributeType_Timestamp :: AttributeType
+pattern AttributeType_Timestamp = AttributeType' "timestamp"
+
+{-# COMPLETE
+  AttributeType_Float,
+  AttributeType_Geolocation,
+  AttributeType_Integer,
+  AttributeType_String,
+  AttributeType_Timestamp,
+  AttributeType'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/AutoMLOverrideStrategy.hs b/gen/Amazonka/Forecast/Types/AutoMLOverrideStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/AutoMLOverrideStrategy.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.AutoMLOverrideStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.AutoMLOverrideStrategy
+  ( AutoMLOverrideStrategy
+      ( ..,
+        AutoMLOverrideStrategy_AccuracyOptimized,
+        AutoMLOverrideStrategy_LatencyOptimized
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AutoMLOverrideStrategy = AutoMLOverrideStrategy'
+  { fromAutoMLOverrideStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AutoMLOverrideStrategy_AccuracyOptimized :: AutoMLOverrideStrategy
+pattern AutoMLOverrideStrategy_AccuracyOptimized = AutoMLOverrideStrategy' "AccuracyOptimized"
+
+pattern AutoMLOverrideStrategy_LatencyOptimized :: AutoMLOverrideStrategy
+pattern AutoMLOverrideStrategy_LatencyOptimized = AutoMLOverrideStrategy' "LatencyOptimized"
+
+{-# COMPLETE
+  AutoMLOverrideStrategy_AccuracyOptimized,
+  AutoMLOverrideStrategy_LatencyOptimized,
+  AutoMLOverrideStrategy'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/Baseline.hs b/gen/Amazonka/Forecast/Types/Baseline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Baseline.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Baseline
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Baseline where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.PredictorBaseline
+import qualified Amazonka.Prelude as Prelude
+
+-- | Metrics you can use as a baseline for comparison purposes. Use these
+-- metrics when you interpret monitoring results for an auto predictor.
+--
+-- /See:/ 'newBaseline' smart constructor.
+data Baseline = Baseline'
+  { -- | The initial
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/metrics.html accuracy metrics>
+    -- for the predictor you are monitoring. Use these metrics as a baseline
+    -- for comparison purposes as you use your predictor and the metrics
+    -- change.
+    predictorBaseline :: Prelude.Maybe PredictorBaseline
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Baseline' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorBaseline', 'baseline_predictorBaseline' - The initial
+-- <https://docs.aws.amazon.com/forecast/latest/dg/metrics.html accuracy metrics>
+-- for the predictor you are monitoring. Use these metrics as a baseline
+-- for comparison purposes as you use your predictor and the metrics
+-- change.
+newBaseline ::
+  Baseline
+newBaseline =
+  Baseline' {predictorBaseline = Prelude.Nothing}
+
+-- | The initial
+-- <https://docs.aws.amazon.com/forecast/latest/dg/metrics.html accuracy metrics>
+-- for the predictor you are monitoring. Use these metrics as a baseline
+-- for comparison purposes as you use your predictor and the metrics
+-- change.
+baseline_predictorBaseline :: Lens.Lens' Baseline (Prelude.Maybe PredictorBaseline)
+baseline_predictorBaseline = Lens.lens (\Baseline' {predictorBaseline} -> predictorBaseline) (\s@Baseline' {} a -> s {predictorBaseline = a} :: Baseline)
+
+instance Data.FromJSON Baseline where
+  parseJSON =
+    Data.withObject
+      "Baseline"
+      ( \x ->
+          Baseline'
+            Prelude.<$> (x Data..:? "PredictorBaseline")
+      )
+
+instance Prelude.Hashable Baseline where
+  hashWithSalt _salt Baseline' {..} =
+    _salt `Prelude.hashWithSalt` predictorBaseline
+
+instance Prelude.NFData Baseline where
+  rnf Baseline' {..} = Prelude.rnf predictorBaseline
diff --git a/gen/Amazonka/Forecast/Types/BaselineMetric.hs b/gen/Amazonka/Forecast/Types/BaselineMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/BaselineMetric.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.BaselineMetric
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.BaselineMetric where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An individual metric that you can use for comparison as you evaluate
+-- your monitoring results.
+--
+-- /See:/ 'newBaselineMetric' smart constructor.
+data BaselineMetric = BaselineMetric'
+  { -- | The name of the metric.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The value for the metric.
+    value :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BaselineMetric' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'baselineMetric_name' - The name of the metric.
+--
+-- 'value', 'baselineMetric_value' - The value for the metric.
+newBaselineMetric ::
+  BaselineMetric
+newBaselineMetric =
+  BaselineMetric'
+    { name = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The name of the metric.
+baselineMetric_name :: Lens.Lens' BaselineMetric (Prelude.Maybe Prelude.Text)
+baselineMetric_name = Lens.lens (\BaselineMetric' {name} -> name) (\s@BaselineMetric' {} a -> s {name = a} :: BaselineMetric)
+
+-- | The value for the metric.
+baselineMetric_value :: Lens.Lens' BaselineMetric (Prelude.Maybe Prelude.Double)
+baselineMetric_value = Lens.lens (\BaselineMetric' {value} -> value) (\s@BaselineMetric' {} a -> s {value = a} :: BaselineMetric)
+
+instance Data.FromJSON BaselineMetric where
+  parseJSON =
+    Data.withObject
+      "BaselineMetric"
+      ( \x ->
+          BaselineMetric'
+            Prelude.<$> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Value")
+      )
+
+instance Prelude.Hashable BaselineMetric where
+  hashWithSalt _salt BaselineMetric' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData BaselineMetric where
+  rnf BaselineMetric' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/Forecast/Types/CategoricalParameterRange.hs b/gen/Amazonka/Forecast/Types/CategoricalParameterRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/CategoricalParameterRange.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.CategoricalParameterRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.CategoricalParameterRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a categorical hyperparameter and it\'s range of tunable
+-- values. This object is part of the ParameterRanges object.
+--
+-- /See:/ 'newCategoricalParameterRange' smart constructor.
+data CategoricalParameterRange = CategoricalParameterRange'
+  { -- | The name of the categorical hyperparameter to tune.
+    name :: Prelude.Text,
+    -- | A list of the tunable categories for the hyperparameter.
+    values :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CategoricalParameterRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'categoricalParameterRange_name' - The name of the categorical hyperparameter to tune.
+--
+-- 'values', 'categoricalParameterRange_values' - A list of the tunable categories for the hyperparameter.
+newCategoricalParameterRange ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'values'
+  Prelude.NonEmpty Prelude.Text ->
+  CategoricalParameterRange
+newCategoricalParameterRange pName_ pValues_ =
+  CategoricalParameterRange'
+    { name = pName_,
+      values = Lens.coerced Lens.# pValues_
+    }
+
+-- | The name of the categorical hyperparameter to tune.
+categoricalParameterRange_name :: Lens.Lens' CategoricalParameterRange Prelude.Text
+categoricalParameterRange_name = Lens.lens (\CategoricalParameterRange' {name} -> name) (\s@CategoricalParameterRange' {} a -> s {name = a} :: CategoricalParameterRange)
+
+-- | A list of the tunable categories for the hyperparameter.
+categoricalParameterRange_values :: Lens.Lens' CategoricalParameterRange (Prelude.NonEmpty Prelude.Text)
+categoricalParameterRange_values = Lens.lens (\CategoricalParameterRange' {values} -> values) (\s@CategoricalParameterRange' {} a -> s {values = a} :: CategoricalParameterRange) Prelude.. Lens.coerced
+
+instance Data.FromJSON CategoricalParameterRange where
+  parseJSON =
+    Data.withObject
+      "CategoricalParameterRange"
+      ( \x ->
+          CategoricalParameterRange'
+            Prelude.<$> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Values")
+      )
+
+instance Prelude.Hashable CategoricalParameterRange where
+  hashWithSalt _salt CategoricalParameterRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData CategoricalParameterRange where
+  rnf CategoricalParameterRange' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON CategoricalParameterRange where
+  toJSON CategoricalParameterRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Values" Data..= values)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/Condition.hs b/gen/Amazonka/Forecast/Types/Condition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Condition.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Condition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Condition
+  ( Condition
+      ( ..,
+        Condition_EQUALS,
+        Condition_GREATER_THAN,
+        Condition_LESS_THAN,
+        Condition_NOT_EQUALS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Condition = Condition'
+  { fromCondition ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Condition_EQUALS :: Condition
+pattern Condition_EQUALS = Condition' "EQUALS"
+
+pattern Condition_GREATER_THAN :: Condition
+pattern Condition_GREATER_THAN = Condition' "GREATER_THAN"
+
+pattern Condition_LESS_THAN :: Condition
+pattern Condition_LESS_THAN = Condition' "LESS_THAN"
+
+pattern Condition_NOT_EQUALS :: Condition
+pattern Condition_NOT_EQUALS = Condition' "NOT_EQUALS"
+
+{-# COMPLETE
+  Condition_EQUALS,
+  Condition_GREATER_THAN,
+  Condition_LESS_THAN,
+  Condition_NOT_EQUALS,
+  Condition'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/ContinuousParameterRange.hs b/gen/Amazonka/Forecast/Types/ContinuousParameterRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ContinuousParameterRange.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ContinuousParameterRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ContinuousParameterRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.ScalingType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a continuous hyperparameter and it\'s range of tunable values.
+-- This object is part of the ParameterRanges object.
+--
+-- /See:/ 'newContinuousParameterRange' smart constructor.
+data ContinuousParameterRange = ContinuousParameterRange'
+  { -- | The scale that hyperparameter tuning uses to search the hyperparameter
+    -- range. Valid values:
+    --
+    -- [Auto]
+    --     Amazon Forecast hyperparameter tuning chooses the best scale for the
+    --     hyperparameter.
+    --
+    -- [Linear]
+    --     Hyperparameter tuning searches the values in the hyperparameter
+    --     range by using a linear scale.
+    --
+    -- [Logarithmic]
+    --     Hyperparameter tuning searches the values in the hyperparameter
+    --     range by using a logarithmic scale.
+    --
+    --     Logarithmic scaling works only for ranges that have values greater
+    --     than 0.
+    --
+    -- [ReverseLogarithmic]
+    --     hyperparameter tuning searches the values in the hyperparameter
+    --     range by using a reverse logarithmic scale.
+    --
+    --     Reverse logarithmic scaling works only for ranges that are entirely
+    --     within the range 0 \<= x \< 1.0.
+    --
+    -- For information about choosing a hyperparameter scale, see
+    -- <http://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html#scaling-type Hyperparameter Scaling>.
+    -- One of the following values:
+    scalingType :: Prelude.Maybe ScalingType,
+    -- | The name of the hyperparameter to tune.
+    name :: Prelude.Text,
+    -- | The maximum tunable value of the hyperparameter.
+    maxValue :: Prelude.Double,
+    -- | The minimum tunable value of the hyperparameter.
+    minValue :: Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ContinuousParameterRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scalingType', 'continuousParameterRange_scalingType' - The scale that hyperparameter tuning uses to search the hyperparameter
+-- range. Valid values:
+--
+-- [Auto]
+--     Amazon Forecast hyperparameter tuning chooses the best scale for the
+--     hyperparameter.
+--
+-- [Linear]
+--     Hyperparameter tuning searches the values in the hyperparameter
+--     range by using a linear scale.
+--
+-- [Logarithmic]
+--     Hyperparameter tuning searches the values in the hyperparameter
+--     range by using a logarithmic scale.
+--
+--     Logarithmic scaling works only for ranges that have values greater
+--     than 0.
+--
+-- [ReverseLogarithmic]
+--     hyperparameter tuning searches the values in the hyperparameter
+--     range by using a reverse logarithmic scale.
+--
+--     Reverse logarithmic scaling works only for ranges that are entirely
+--     within the range 0 \<= x \< 1.0.
+--
+-- For information about choosing a hyperparameter scale, see
+-- <http://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html#scaling-type Hyperparameter Scaling>.
+-- One of the following values:
+--
+-- 'name', 'continuousParameterRange_name' - The name of the hyperparameter to tune.
+--
+-- 'maxValue', 'continuousParameterRange_maxValue' - The maximum tunable value of the hyperparameter.
+--
+-- 'minValue', 'continuousParameterRange_minValue' - The minimum tunable value of the hyperparameter.
+newContinuousParameterRange ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'maxValue'
+  Prelude.Double ->
+  -- | 'minValue'
+  Prelude.Double ->
+  ContinuousParameterRange
+newContinuousParameterRange
+  pName_
+  pMaxValue_
+  pMinValue_ =
+    ContinuousParameterRange'
+      { scalingType =
+          Prelude.Nothing,
+        name = pName_,
+        maxValue = pMaxValue_,
+        minValue = pMinValue_
+      }
+
+-- | The scale that hyperparameter tuning uses to search the hyperparameter
+-- range. Valid values:
+--
+-- [Auto]
+--     Amazon Forecast hyperparameter tuning chooses the best scale for the
+--     hyperparameter.
+--
+-- [Linear]
+--     Hyperparameter tuning searches the values in the hyperparameter
+--     range by using a linear scale.
+--
+-- [Logarithmic]
+--     Hyperparameter tuning searches the values in the hyperparameter
+--     range by using a logarithmic scale.
+--
+--     Logarithmic scaling works only for ranges that have values greater
+--     than 0.
+--
+-- [ReverseLogarithmic]
+--     hyperparameter tuning searches the values in the hyperparameter
+--     range by using a reverse logarithmic scale.
+--
+--     Reverse logarithmic scaling works only for ranges that are entirely
+--     within the range 0 \<= x \< 1.0.
+--
+-- For information about choosing a hyperparameter scale, see
+-- <http://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html#scaling-type Hyperparameter Scaling>.
+-- One of the following values:
+continuousParameterRange_scalingType :: Lens.Lens' ContinuousParameterRange (Prelude.Maybe ScalingType)
+continuousParameterRange_scalingType = Lens.lens (\ContinuousParameterRange' {scalingType} -> scalingType) (\s@ContinuousParameterRange' {} a -> s {scalingType = a} :: ContinuousParameterRange)
+
+-- | The name of the hyperparameter to tune.
+continuousParameterRange_name :: Lens.Lens' ContinuousParameterRange Prelude.Text
+continuousParameterRange_name = Lens.lens (\ContinuousParameterRange' {name} -> name) (\s@ContinuousParameterRange' {} a -> s {name = a} :: ContinuousParameterRange)
+
+-- | The maximum tunable value of the hyperparameter.
+continuousParameterRange_maxValue :: Lens.Lens' ContinuousParameterRange Prelude.Double
+continuousParameterRange_maxValue = Lens.lens (\ContinuousParameterRange' {maxValue} -> maxValue) (\s@ContinuousParameterRange' {} a -> s {maxValue = a} :: ContinuousParameterRange)
+
+-- | The minimum tunable value of the hyperparameter.
+continuousParameterRange_minValue :: Lens.Lens' ContinuousParameterRange Prelude.Double
+continuousParameterRange_minValue = Lens.lens (\ContinuousParameterRange' {minValue} -> minValue) (\s@ContinuousParameterRange' {} a -> s {minValue = a} :: ContinuousParameterRange)
+
+instance Data.FromJSON ContinuousParameterRange where
+  parseJSON =
+    Data.withObject
+      "ContinuousParameterRange"
+      ( \x ->
+          ContinuousParameterRange'
+            Prelude.<$> (x Data..:? "ScalingType")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "MaxValue")
+            Prelude.<*> (x Data..: "MinValue")
+      )
+
+instance Prelude.Hashable ContinuousParameterRange where
+  hashWithSalt _salt ContinuousParameterRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` scalingType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` maxValue
+      `Prelude.hashWithSalt` minValue
+
+instance Prelude.NFData ContinuousParameterRange where
+  rnf ContinuousParameterRange' {..} =
+    Prelude.rnf scalingType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf maxValue
+      `Prelude.seq` Prelude.rnf minValue
+
+instance Data.ToJSON ContinuousParameterRange where
+  toJSON ContinuousParameterRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ScalingType" Data..=) Prelude.<$> scalingType,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("MaxValue" Data..= maxValue),
+            Prelude.Just ("MinValue" Data..= minValue)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/DataConfig.hs b/gen/Amazonka/Forecast/Types/DataConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/DataConfig.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.DataConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.DataConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.AdditionalDataset
+import Amazonka.Forecast.Types.AttributeConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | The data configuration for your dataset group and any additional
+-- datasets.
+--
+-- /See:/ 'newDataConfig' smart constructor.
+data DataConfig = DataConfig'
+  { -- | Additional built-in datasets like Holidays and the Weather Index.
+    additionalDatasets :: Prelude.Maybe (Prelude.NonEmpty AdditionalDataset),
+    -- | Aggregation and filling options for attributes in your dataset group.
+    attributeConfigs :: Prelude.Maybe (Prelude.NonEmpty AttributeConfig),
+    -- | The ARN of the dataset group used to train the predictor.
+    datasetGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalDatasets', 'dataConfig_additionalDatasets' - Additional built-in datasets like Holidays and the Weather Index.
+--
+-- 'attributeConfigs', 'dataConfig_attributeConfigs' - Aggregation and filling options for attributes in your dataset group.
+--
+-- 'datasetGroupArn', 'dataConfig_datasetGroupArn' - The ARN of the dataset group used to train the predictor.
+newDataConfig ::
+  -- | 'datasetGroupArn'
+  Prelude.Text ->
+  DataConfig
+newDataConfig pDatasetGroupArn_ =
+  DataConfig'
+    { additionalDatasets = Prelude.Nothing,
+      attributeConfigs = Prelude.Nothing,
+      datasetGroupArn = pDatasetGroupArn_
+    }
+
+-- | Additional built-in datasets like Holidays and the Weather Index.
+dataConfig_additionalDatasets :: Lens.Lens' DataConfig (Prelude.Maybe (Prelude.NonEmpty AdditionalDataset))
+dataConfig_additionalDatasets = Lens.lens (\DataConfig' {additionalDatasets} -> additionalDatasets) (\s@DataConfig' {} a -> s {additionalDatasets = a} :: DataConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | Aggregation and filling options for attributes in your dataset group.
+dataConfig_attributeConfigs :: Lens.Lens' DataConfig (Prelude.Maybe (Prelude.NonEmpty AttributeConfig))
+dataConfig_attributeConfigs = Lens.lens (\DataConfig' {attributeConfigs} -> attributeConfigs) (\s@DataConfig' {} a -> s {attributeConfigs = a} :: DataConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the dataset group used to train the predictor.
+dataConfig_datasetGroupArn :: Lens.Lens' DataConfig Prelude.Text
+dataConfig_datasetGroupArn = Lens.lens (\DataConfig' {datasetGroupArn} -> datasetGroupArn) (\s@DataConfig' {} a -> s {datasetGroupArn = a} :: DataConfig)
+
+instance Data.FromJSON DataConfig where
+  parseJSON =
+    Data.withObject
+      "DataConfig"
+      ( \x ->
+          DataConfig'
+            Prelude.<$> (x Data..:? "AdditionalDatasets")
+            Prelude.<*> (x Data..:? "AttributeConfigs")
+            Prelude.<*> (x Data..: "DatasetGroupArn")
+      )
+
+instance Prelude.Hashable DataConfig where
+  hashWithSalt _salt DataConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalDatasets
+      `Prelude.hashWithSalt` attributeConfigs
+      `Prelude.hashWithSalt` datasetGroupArn
+
+instance Prelude.NFData DataConfig where
+  rnf DataConfig' {..} =
+    Prelude.rnf additionalDatasets
+      `Prelude.seq` Prelude.rnf attributeConfigs
+      `Prelude.seq` Prelude.rnf datasetGroupArn
+
+instance Data.ToJSON DataConfig where
+  toJSON DataConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AdditionalDatasets" Data..=)
+              Prelude.<$> additionalDatasets,
+            ("AttributeConfigs" Data..=)
+              Prelude.<$> attributeConfigs,
+            Prelude.Just
+              ("DatasetGroupArn" Data..= datasetGroupArn)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/DataDestination.hs b/gen/Amazonka/Forecast/Types/DataDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/DataDestination.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.DataDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.DataDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.S3Config
+import qualified Amazonka.Prelude as Prelude
+
+-- | The destination for an export job. Provide an S3 path, an AWS Identity
+-- and Access Management (IAM) role that allows Amazon Forecast to access
+-- the location, and an AWS Key Management Service (KMS) key (optional).
+--
+-- /See:/ 'newDataDestination' smart constructor.
+data DataDestination = DataDestination'
+  { -- | The path to an Amazon Simple Storage Service (Amazon S3) bucket along
+    -- with the credentials to access the bucket.
+    s3Config :: S3Config
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Config', 'dataDestination_s3Config' - The path to an Amazon Simple Storage Service (Amazon S3) bucket along
+-- with the credentials to access the bucket.
+newDataDestination ::
+  -- | 's3Config'
+  S3Config ->
+  DataDestination
+newDataDestination pS3Config_ =
+  DataDestination' {s3Config = pS3Config_}
+
+-- | The path to an Amazon Simple Storage Service (Amazon S3) bucket along
+-- with the credentials to access the bucket.
+dataDestination_s3Config :: Lens.Lens' DataDestination S3Config
+dataDestination_s3Config = Lens.lens (\DataDestination' {s3Config} -> s3Config) (\s@DataDestination' {} a -> s {s3Config = a} :: DataDestination)
+
+instance Data.FromJSON DataDestination where
+  parseJSON =
+    Data.withObject
+      "DataDestination"
+      ( \x ->
+          DataDestination' Prelude.<$> (x Data..: "S3Config")
+      )
+
+instance Prelude.Hashable DataDestination where
+  hashWithSalt _salt DataDestination' {..} =
+    _salt `Prelude.hashWithSalt` s3Config
+
+instance Prelude.NFData DataDestination where
+  rnf DataDestination' {..} = Prelude.rnf s3Config
+
+instance Data.ToJSON DataDestination where
+  toJSON DataDestination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("S3Config" Data..= s3Config)]
+      )
diff --git a/gen/Amazonka/Forecast/Types/DataSource.hs b/gen/Amazonka/Forecast/Types/DataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/DataSource.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.DataSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.DataSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.S3Config
+import qualified Amazonka.Prelude as Prelude
+
+-- | The source of your data, an AWS Identity and Access Management (IAM)
+-- role that allows Amazon Forecast to access the data and, optionally, an
+-- AWS Key Management Service (KMS) key.
+--
+-- /See:/ 'newDataSource' smart constructor.
+data DataSource = DataSource'
+  { -- | The path to the data stored in an Amazon Simple Storage Service (Amazon
+    -- S3) bucket along with the credentials to access the data.
+    s3Config :: S3Config
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Config', 'dataSource_s3Config' - The path to the data stored in an Amazon Simple Storage Service (Amazon
+-- S3) bucket along with the credentials to access the data.
+newDataSource ::
+  -- | 's3Config'
+  S3Config ->
+  DataSource
+newDataSource pS3Config_ =
+  DataSource' {s3Config = pS3Config_}
+
+-- | The path to the data stored in an Amazon Simple Storage Service (Amazon
+-- S3) bucket along with the credentials to access the data.
+dataSource_s3Config :: Lens.Lens' DataSource S3Config
+dataSource_s3Config = Lens.lens (\DataSource' {s3Config} -> s3Config) (\s@DataSource' {} a -> s {s3Config = a} :: DataSource)
+
+instance Data.FromJSON DataSource where
+  parseJSON =
+    Data.withObject
+      "DataSource"
+      ( \x ->
+          DataSource' Prelude.<$> (x Data..: "S3Config")
+      )
+
+instance Prelude.Hashable DataSource where
+  hashWithSalt _salt DataSource' {..} =
+    _salt `Prelude.hashWithSalt` s3Config
+
+instance Prelude.NFData DataSource where
+  rnf DataSource' {..} = Prelude.rnf s3Config
+
+instance Data.ToJSON DataSource where
+  toJSON DataSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("S3Config" Data..= s3Config)]
+      )
diff --git a/gen/Amazonka/Forecast/Types/DatasetGroupSummary.hs b/gen/Amazonka/Forecast/Types/DatasetGroupSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/DatasetGroupSummary.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.DatasetGroupSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.DatasetGroupSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the dataset group properties used in the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_ListDatasetGroups.html ListDatasetGroups>
+-- operation. To get the complete set of properties, call the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDatasetGroup.html DescribeDatasetGroup>
+-- operation, and provide the @DatasetGroupArn@.
+--
+-- /See:/ 'newDatasetGroupSummary' smart constructor.
+data DatasetGroupSummary = DatasetGroupSummary'
+  { -- | When the dataset group was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the dataset group.
+    datasetGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the dataset group.
+    datasetGroupName :: Prelude.Maybe Prelude.Text,
+    -- | When the dataset group was created or last updated from a call to the
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+    -- operation. While the dataset group is being updated,
+    -- @LastModificationTime@ is the current time of the @ListDatasetGroups@
+    -- call.
+    lastModificationTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatasetGroupSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'datasetGroupSummary_creationTime' - When the dataset group was created.
+--
+-- 'datasetGroupArn', 'datasetGroupSummary_datasetGroupArn' - The Amazon Resource Name (ARN) of the dataset group.
+--
+-- 'datasetGroupName', 'datasetGroupSummary_datasetGroupName' - The name of the dataset group.
+--
+-- 'lastModificationTime', 'datasetGroupSummary_lastModificationTime' - When the dataset group was created or last updated from a call to the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+-- operation. While the dataset group is being updated,
+-- @LastModificationTime@ is the current time of the @ListDatasetGroups@
+-- call.
+newDatasetGroupSummary ::
+  DatasetGroupSummary
+newDatasetGroupSummary =
+  DatasetGroupSummary'
+    { creationTime =
+        Prelude.Nothing,
+      datasetGroupArn = Prelude.Nothing,
+      datasetGroupName = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing
+    }
+
+-- | When the dataset group was created.
+datasetGroupSummary_creationTime :: Lens.Lens' DatasetGroupSummary (Prelude.Maybe Prelude.UTCTime)
+datasetGroupSummary_creationTime = Lens.lens (\DatasetGroupSummary' {creationTime} -> creationTime) (\s@DatasetGroupSummary' {} a -> s {creationTime = a} :: DatasetGroupSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the dataset group.
+datasetGroupSummary_datasetGroupArn :: Lens.Lens' DatasetGroupSummary (Prelude.Maybe Prelude.Text)
+datasetGroupSummary_datasetGroupArn = Lens.lens (\DatasetGroupSummary' {datasetGroupArn} -> datasetGroupArn) (\s@DatasetGroupSummary' {} a -> s {datasetGroupArn = a} :: DatasetGroupSummary)
+
+-- | The name of the dataset group.
+datasetGroupSummary_datasetGroupName :: Lens.Lens' DatasetGroupSummary (Prelude.Maybe Prelude.Text)
+datasetGroupSummary_datasetGroupName = Lens.lens (\DatasetGroupSummary' {datasetGroupName} -> datasetGroupName) (\s@DatasetGroupSummary' {} a -> s {datasetGroupName = a} :: DatasetGroupSummary)
+
+-- | When the dataset group was created or last updated from a call to the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_UpdateDatasetGroup.html UpdateDatasetGroup>
+-- operation. While the dataset group is being updated,
+-- @LastModificationTime@ is the current time of the @ListDatasetGroups@
+-- call.
+datasetGroupSummary_lastModificationTime :: Lens.Lens' DatasetGroupSummary (Prelude.Maybe Prelude.UTCTime)
+datasetGroupSummary_lastModificationTime = Lens.lens (\DatasetGroupSummary' {lastModificationTime} -> lastModificationTime) (\s@DatasetGroupSummary' {} a -> s {lastModificationTime = a} :: DatasetGroupSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON DatasetGroupSummary where
+  parseJSON =
+    Data.withObject
+      "DatasetGroupSummary"
+      ( \x ->
+          DatasetGroupSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "DatasetGroupArn")
+            Prelude.<*> (x Data..:? "DatasetGroupName")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+      )
+
+instance Prelude.Hashable DatasetGroupSummary where
+  hashWithSalt _salt DatasetGroupSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` datasetGroupArn
+      `Prelude.hashWithSalt` datasetGroupName
+      `Prelude.hashWithSalt` lastModificationTime
+
+instance Prelude.NFData DatasetGroupSummary where
+  rnf DatasetGroupSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf datasetGroupArn
+      `Prelude.seq` Prelude.rnf datasetGroupName
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/Forecast/Types/DatasetImportJobSummary.hs b/gen/Amazonka/Forecast/Types/DatasetImportJobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/DatasetImportJobSummary.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.DatasetImportJobSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.DatasetImportJobSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.DataSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the dataset import job properties used in the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_ListDatasetImportJobs.html ListDatasetImportJobs>
+-- operation. To get the complete set of properties, call the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDatasetImportJob.html DescribeDatasetImportJob>
+-- operation, and provide the @DatasetImportJobArn@.
+--
+-- /See:/ 'newDatasetImportJobSummary' smart constructor.
+data DatasetImportJobSummary = DatasetImportJobSummary'
+  { -- | When the dataset import job was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The location of the training data to import and an AWS Identity and
+    -- Access Management (IAM) role that Amazon Forecast can assume to access
+    -- the data. The training data must be stored in an Amazon S3 bucket.
+    --
+    -- If encryption is used, @DataSource@ includes an AWS Key Management
+    -- Service (KMS) key.
+    dataSource :: Prelude.Maybe DataSource,
+    -- | The Amazon Resource Name (ARN) of the dataset import job.
+    datasetImportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the dataset import job.
+    datasetImportJobName :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the dataset import job. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatasetImportJobSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'datasetImportJobSummary_creationTime' - When the dataset import job was created.
+--
+-- 'dataSource', 'datasetImportJobSummary_dataSource' - The location of the training data to import and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the data. The training data must be stored in an Amazon S3 bucket.
+--
+-- If encryption is used, @DataSource@ includes an AWS Key Management
+-- Service (KMS) key.
+--
+-- 'datasetImportJobArn', 'datasetImportJobSummary_datasetImportJobArn' - The Amazon Resource Name (ARN) of the dataset import job.
+--
+-- 'datasetImportJobName', 'datasetImportJobSummary_datasetImportJobName' - The name of the dataset import job.
+--
+-- 'lastModificationTime', 'datasetImportJobSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'datasetImportJobSummary_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'datasetImportJobSummary_status' - The status of the dataset import job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+newDatasetImportJobSummary ::
+  DatasetImportJobSummary
+newDatasetImportJobSummary =
+  DatasetImportJobSummary'
+    { creationTime =
+        Prelude.Nothing,
+      dataSource = Prelude.Nothing,
+      datasetImportJobArn = Prelude.Nothing,
+      datasetImportJobName = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | When the dataset import job was created.
+datasetImportJobSummary_creationTime :: Lens.Lens' DatasetImportJobSummary (Prelude.Maybe Prelude.UTCTime)
+datasetImportJobSummary_creationTime = Lens.lens (\DatasetImportJobSummary' {creationTime} -> creationTime) (\s@DatasetImportJobSummary' {} a -> s {creationTime = a} :: DatasetImportJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The location of the training data to import and an AWS Identity and
+-- Access Management (IAM) role that Amazon Forecast can assume to access
+-- the data. The training data must be stored in an Amazon S3 bucket.
+--
+-- If encryption is used, @DataSource@ includes an AWS Key Management
+-- Service (KMS) key.
+datasetImportJobSummary_dataSource :: Lens.Lens' DatasetImportJobSummary (Prelude.Maybe DataSource)
+datasetImportJobSummary_dataSource = Lens.lens (\DatasetImportJobSummary' {dataSource} -> dataSource) (\s@DatasetImportJobSummary' {} a -> s {dataSource = a} :: DatasetImportJobSummary)
+
+-- | The Amazon Resource Name (ARN) of the dataset import job.
+datasetImportJobSummary_datasetImportJobArn :: Lens.Lens' DatasetImportJobSummary (Prelude.Maybe Prelude.Text)
+datasetImportJobSummary_datasetImportJobArn = Lens.lens (\DatasetImportJobSummary' {datasetImportJobArn} -> datasetImportJobArn) (\s@DatasetImportJobSummary' {} a -> s {datasetImportJobArn = a} :: DatasetImportJobSummary)
+
+-- | The name of the dataset import job.
+datasetImportJobSummary_datasetImportJobName :: Lens.Lens' DatasetImportJobSummary (Prelude.Maybe Prelude.Text)
+datasetImportJobSummary_datasetImportJobName = Lens.lens (\DatasetImportJobSummary' {datasetImportJobName} -> datasetImportJobName) (\s@DatasetImportJobSummary' {} a -> s {datasetImportJobName = a} :: DatasetImportJobSummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+datasetImportJobSummary_lastModificationTime :: Lens.Lens' DatasetImportJobSummary (Prelude.Maybe Prelude.UTCTime)
+datasetImportJobSummary_lastModificationTime = Lens.lens (\DatasetImportJobSummary' {lastModificationTime} -> lastModificationTime) (\s@DatasetImportJobSummary' {} a -> s {lastModificationTime = a} :: DatasetImportJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+datasetImportJobSummary_message :: Lens.Lens' DatasetImportJobSummary (Prelude.Maybe Prelude.Text)
+datasetImportJobSummary_message = Lens.lens (\DatasetImportJobSummary' {message} -> message) (\s@DatasetImportJobSummary' {} a -> s {message = a} :: DatasetImportJobSummary)
+
+-- | The status of the dataset import job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+datasetImportJobSummary_status :: Lens.Lens' DatasetImportJobSummary (Prelude.Maybe Prelude.Text)
+datasetImportJobSummary_status = Lens.lens (\DatasetImportJobSummary' {status} -> status) (\s@DatasetImportJobSummary' {} a -> s {status = a} :: DatasetImportJobSummary)
+
+instance Data.FromJSON DatasetImportJobSummary where
+  parseJSON =
+    Data.withObject
+      "DatasetImportJobSummary"
+      ( \x ->
+          DatasetImportJobSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "DataSource")
+            Prelude.<*> (x Data..:? "DatasetImportJobArn")
+            Prelude.<*> (x Data..:? "DatasetImportJobName")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable DatasetImportJobSummary where
+  hashWithSalt _salt DatasetImportJobSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` datasetImportJobArn
+      `Prelude.hashWithSalt` datasetImportJobName
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData DatasetImportJobSummary where
+  rnf DatasetImportJobSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf datasetImportJobArn
+      `Prelude.seq` Prelude.rnf datasetImportJobName
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/DatasetSummary.hs b/gen/Amazonka/Forecast/Types/DatasetSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/DatasetSummary.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.DatasetSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.DatasetSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.DatasetType
+import Amazonka.Forecast.Types.Domain
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the dataset properties used in the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_ListDatasets.html ListDatasets>
+-- operation. To get the complete set of properties, call the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDataset.html DescribeDataset>
+-- operation, and provide the @DatasetArn@.
+--
+-- /See:/ 'newDatasetSummary' smart constructor.
+data DatasetSummary = DatasetSummary'
+  { -- | When the dataset was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the dataset.
+    datasetArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the dataset.
+    datasetName :: Prelude.Maybe Prelude.Text,
+    -- | The dataset type.
+    datasetType :: Prelude.Maybe DatasetType,
+    -- | The domain associated with the dataset.
+    domain :: Prelude.Maybe Domain,
+    -- | When you create a dataset, @LastModificationTime@ is the same as
+    -- @CreationTime@. While data is being imported to the dataset,
+    -- @LastModificationTime@ is the current time of the @ListDatasets@ call.
+    -- After a
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+    -- operation has finished, @LastModificationTime@ is when the import job
+    -- completed or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DatasetSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'datasetSummary_creationTime' - When the dataset was created.
+--
+-- 'datasetArn', 'datasetSummary_datasetArn' - The Amazon Resource Name (ARN) of the dataset.
+--
+-- 'datasetName', 'datasetSummary_datasetName' - The name of the dataset.
+--
+-- 'datasetType', 'datasetSummary_datasetType' - The dataset type.
+--
+-- 'domain', 'datasetSummary_domain' - The domain associated with the dataset.
+--
+-- 'lastModificationTime', 'datasetSummary_lastModificationTime' - When you create a dataset, @LastModificationTime@ is the same as
+-- @CreationTime@. While data is being imported to the dataset,
+-- @LastModificationTime@ is the current time of the @ListDatasets@ call.
+-- After a
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation has finished, @LastModificationTime@ is when the import job
+-- completed or failed.
+newDatasetSummary ::
+  DatasetSummary
+newDatasetSummary =
+  DatasetSummary'
+    { creationTime = Prelude.Nothing,
+      datasetArn = Prelude.Nothing,
+      datasetName = Prelude.Nothing,
+      datasetType = Prelude.Nothing,
+      domain = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing
+    }
+
+-- | When the dataset was created.
+datasetSummary_creationTime :: Lens.Lens' DatasetSummary (Prelude.Maybe Prelude.UTCTime)
+datasetSummary_creationTime = Lens.lens (\DatasetSummary' {creationTime} -> creationTime) (\s@DatasetSummary' {} a -> s {creationTime = a} :: DatasetSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the dataset.
+datasetSummary_datasetArn :: Lens.Lens' DatasetSummary (Prelude.Maybe Prelude.Text)
+datasetSummary_datasetArn = Lens.lens (\DatasetSummary' {datasetArn} -> datasetArn) (\s@DatasetSummary' {} a -> s {datasetArn = a} :: DatasetSummary)
+
+-- | The name of the dataset.
+datasetSummary_datasetName :: Lens.Lens' DatasetSummary (Prelude.Maybe Prelude.Text)
+datasetSummary_datasetName = Lens.lens (\DatasetSummary' {datasetName} -> datasetName) (\s@DatasetSummary' {} a -> s {datasetName = a} :: DatasetSummary)
+
+-- | The dataset type.
+datasetSummary_datasetType :: Lens.Lens' DatasetSummary (Prelude.Maybe DatasetType)
+datasetSummary_datasetType = Lens.lens (\DatasetSummary' {datasetType} -> datasetType) (\s@DatasetSummary' {} a -> s {datasetType = a} :: DatasetSummary)
+
+-- | The domain associated with the dataset.
+datasetSummary_domain :: Lens.Lens' DatasetSummary (Prelude.Maybe Domain)
+datasetSummary_domain = Lens.lens (\DatasetSummary' {domain} -> domain) (\s@DatasetSummary' {} a -> s {domain = a} :: DatasetSummary)
+
+-- | When you create a dataset, @LastModificationTime@ is the same as
+-- @CreationTime@. While data is being imported to the dataset,
+-- @LastModificationTime@ is the current time of the @ListDatasets@ call.
+-- After a
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation has finished, @LastModificationTime@ is when the import job
+-- completed or failed.
+datasetSummary_lastModificationTime :: Lens.Lens' DatasetSummary (Prelude.Maybe Prelude.UTCTime)
+datasetSummary_lastModificationTime = Lens.lens (\DatasetSummary' {lastModificationTime} -> lastModificationTime) (\s@DatasetSummary' {} a -> s {lastModificationTime = a} :: DatasetSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON DatasetSummary where
+  parseJSON =
+    Data.withObject
+      "DatasetSummary"
+      ( \x ->
+          DatasetSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "DatasetArn")
+            Prelude.<*> (x Data..:? "DatasetName")
+            Prelude.<*> (x Data..:? "DatasetType")
+            Prelude.<*> (x Data..:? "Domain")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+      )
+
+instance Prelude.Hashable DatasetSummary where
+  hashWithSalt _salt DatasetSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` datasetArn
+      `Prelude.hashWithSalt` datasetName
+      `Prelude.hashWithSalt` datasetType
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` lastModificationTime
+
+instance Prelude.NFData DatasetSummary where
+  rnf DatasetSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf datasetArn
+      `Prelude.seq` Prelude.rnf datasetName
+      `Prelude.seq` Prelude.rnf datasetType
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf lastModificationTime
diff --git a/gen/Amazonka/Forecast/Types/DatasetType.hs b/gen/Amazonka/Forecast/Types/DatasetType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/DatasetType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.DatasetType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.DatasetType
+  ( DatasetType
+      ( ..,
+        DatasetType_ITEM_METADATA,
+        DatasetType_RELATED_TIME_SERIES,
+        DatasetType_TARGET_TIME_SERIES
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DatasetType = DatasetType'
+  { fromDatasetType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DatasetType_ITEM_METADATA :: DatasetType
+pattern DatasetType_ITEM_METADATA = DatasetType' "ITEM_METADATA"
+
+pattern DatasetType_RELATED_TIME_SERIES :: DatasetType
+pattern DatasetType_RELATED_TIME_SERIES = DatasetType' "RELATED_TIME_SERIES"
+
+pattern DatasetType_TARGET_TIME_SERIES :: DatasetType
+pattern DatasetType_TARGET_TIME_SERIES = DatasetType' "TARGET_TIME_SERIES"
+
+{-# COMPLETE
+  DatasetType_ITEM_METADATA,
+  DatasetType_RELATED_TIME_SERIES,
+  DatasetType_TARGET_TIME_SERIES,
+  DatasetType'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/DayOfWeek.hs b/gen/Amazonka/Forecast/Types/DayOfWeek.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/DayOfWeek.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.DayOfWeek
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.DayOfWeek
+  ( DayOfWeek
+      ( ..,
+        DayOfWeek_FRIDAY,
+        DayOfWeek_MONDAY,
+        DayOfWeek_SATURDAY,
+        DayOfWeek_SUNDAY,
+        DayOfWeek_THURSDAY,
+        DayOfWeek_TUESDAY,
+        DayOfWeek_WEDNESDAY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DayOfWeek = DayOfWeek'
+  { fromDayOfWeek ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DayOfWeek_FRIDAY :: DayOfWeek
+pattern DayOfWeek_FRIDAY = DayOfWeek' "FRIDAY"
+
+pattern DayOfWeek_MONDAY :: DayOfWeek
+pattern DayOfWeek_MONDAY = DayOfWeek' "MONDAY"
+
+pattern DayOfWeek_SATURDAY :: DayOfWeek
+pattern DayOfWeek_SATURDAY = DayOfWeek' "SATURDAY"
+
+pattern DayOfWeek_SUNDAY :: DayOfWeek
+pattern DayOfWeek_SUNDAY = DayOfWeek' "SUNDAY"
+
+pattern DayOfWeek_THURSDAY :: DayOfWeek
+pattern DayOfWeek_THURSDAY = DayOfWeek' "THURSDAY"
+
+pattern DayOfWeek_TUESDAY :: DayOfWeek
+pattern DayOfWeek_TUESDAY = DayOfWeek' "TUESDAY"
+
+pattern DayOfWeek_WEDNESDAY :: DayOfWeek
+pattern DayOfWeek_WEDNESDAY = DayOfWeek' "WEDNESDAY"
+
+{-# COMPLETE
+  DayOfWeek_FRIDAY,
+  DayOfWeek_MONDAY,
+  DayOfWeek_SATURDAY,
+  DayOfWeek_SUNDAY,
+  DayOfWeek_THURSDAY,
+  DayOfWeek_TUESDAY,
+  DayOfWeek_WEDNESDAY,
+  DayOfWeek'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/Domain.hs b/gen/Amazonka/Forecast/Types/Domain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Domain.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Domain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Domain
+  ( Domain
+      ( ..,
+        Domain_CUSTOM,
+        Domain_EC2_CAPACITY,
+        Domain_INVENTORY_PLANNING,
+        Domain_METRICS,
+        Domain_RETAIL,
+        Domain_WEB_TRAFFIC,
+        Domain_WORK_FORCE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Domain = Domain' {fromDomain :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Domain_CUSTOM :: Domain
+pattern Domain_CUSTOM = Domain' "CUSTOM"
+
+pattern Domain_EC2_CAPACITY :: Domain
+pattern Domain_EC2_CAPACITY = Domain' "EC2_CAPACITY"
+
+pattern Domain_INVENTORY_PLANNING :: Domain
+pattern Domain_INVENTORY_PLANNING = Domain' "INVENTORY_PLANNING"
+
+pattern Domain_METRICS :: Domain
+pattern Domain_METRICS = Domain' "METRICS"
+
+pattern Domain_RETAIL :: Domain
+pattern Domain_RETAIL = Domain' "RETAIL"
+
+pattern Domain_WEB_TRAFFIC :: Domain
+pattern Domain_WEB_TRAFFIC = Domain' "WEB_TRAFFIC"
+
+pattern Domain_WORK_FORCE :: Domain
+pattern Domain_WORK_FORCE = Domain' "WORK_FORCE"
+
+{-# COMPLETE
+  Domain_CUSTOM,
+  Domain_EC2_CAPACITY,
+  Domain_INVENTORY_PLANNING,
+  Domain_METRICS,
+  Domain_RETAIL,
+  Domain_WEB_TRAFFIC,
+  Domain_WORK_FORCE,
+  Domain'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/EncryptionConfig.hs b/gen/Amazonka/Forecast/Types/EncryptionConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/EncryptionConfig.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.EncryptionConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.EncryptionConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An AWS Key Management Service (KMS) key and an AWS Identity and Access
+-- Management (IAM) role that Amazon Forecast can assume to access the key.
+-- You can specify this optional object in the CreateDataset and
+-- CreatePredictor requests.
+--
+-- /See:/ 'newEncryptionConfig' smart constructor.
+data EncryptionConfig = EncryptionConfig'
+  { -- | The ARN of the IAM role that Amazon Forecast can assume to access the
+    -- AWS KMS key.
+    --
+    -- Passing a role across AWS accounts is not allowed. If you pass a role
+    -- that isn\'t in your account, you get an @InvalidInputException@ error.
+    roleArn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the KMS key.
+    kmsKeyArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncryptionConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roleArn', 'encryptionConfig_roleArn' - The ARN of the IAM role that Amazon Forecast can assume to access the
+-- AWS KMS key.
+--
+-- Passing a role across AWS accounts is not allowed. If you pass a role
+-- that isn\'t in your account, you get an @InvalidInputException@ error.
+--
+-- 'kmsKeyArn', 'encryptionConfig_kmsKeyArn' - The Amazon Resource Name (ARN) of the KMS key.
+newEncryptionConfig ::
+  -- | 'roleArn'
+  Prelude.Text ->
+  -- | 'kmsKeyArn'
+  Prelude.Text ->
+  EncryptionConfig
+newEncryptionConfig pRoleArn_ pKMSKeyArn_ =
+  EncryptionConfig'
+    { roleArn = pRoleArn_,
+      kmsKeyArn = pKMSKeyArn_
+    }
+
+-- | The ARN of the IAM role that Amazon Forecast can assume to access the
+-- AWS KMS key.
+--
+-- Passing a role across AWS accounts is not allowed. If you pass a role
+-- that isn\'t in your account, you get an @InvalidInputException@ error.
+encryptionConfig_roleArn :: Lens.Lens' EncryptionConfig Prelude.Text
+encryptionConfig_roleArn = Lens.lens (\EncryptionConfig' {roleArn} -> roleArn) (\s@EncryptionConfig' {} a -> s {roleArn = a} :: EncryptionConfig)
+
+-- | The Amazon Resource Name (ARN) of the KMS key.
+encryptionConfig_kmsKeyArn :: Lens.Lens' EncryptionConfig Prelude.Text
+encryptionConfig_kmsKeyArn = Lens.lens (\EncryptionConfig' {kmsKeyArn} -> kmsKeyArn) (\s@EncryptionConfig' {} a -> s {kmsKeyArn = a} :: EncryptionConfig)
+
+instance Data.FromJSON EncryptionConfig where
+  parseJSON =
+    Data.withObject
+      "EncryptionConfig"
+      ( \x ->
+          EncryptionConfig'
+            Prelude.<$> (x Data..: "RoleArn")
+            Prelude.<*> (x Data..: "KMSKeyArn")
+      )
+
+instance Prelude.Hashable EncryptionConfig where
+  hashWithSalt _salt EncryptionConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` roleArn
+      `Prelude.hashWithSalt` kmsKeyArn
+
+instance Prelude.NFData EncryptionConfig where
+  rnf EncryptionConfig' {..} =
+    Prelude.rnf roleArn
+      `Prelude.seq` Prelude.rnf kmsKeyArn
+
+instance Data.ToJSON EncryptionConfig where
+  toJSON EncryptionConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("RoleArn" Data..= roleArn),
+            Prelude.Just ("KMSKeyArn" Data..= kmsKeyArn)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/ErrorMetric.hs b/gen/Amazonka/Forecast/Types/ErrorMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ErrorMetric.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ErrorMetric
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ErrorMetric where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides detailed error metrics to evaluate the performance of a
+-- predictor. This object is part of the Metrics object.
+--
+-- /See:/ 'newErrorMetric' smart constructor.
+data ErrorMetric = ErrorMetric'
+  { -- | The Forecast type used to compute WAPE, MAPE, MASE, and RMSE.
+    forecastType :: Prelude.Maybe Prelude.Text,
+    -- | The Mean Absolute Percentage Error (MAPE)
+    mape :: Prelude.Maybe Prelude.Double,
+    -- | The Mean Absolute Scaled Error (MASE)
+    mase :: Prelude.Maybe Prelude.Double,
+    -- | The root-mean-square error (RMSE).
+    rmse :: Prelude.Maybe Prelude.Double,
+    -- | The weighted absolute percentage error (WAPE).
+    wape :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ErrorMetric' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'forecastType', 'errorMetric_forecastType' - The Forecast type used to compute WAPE, MAPE, MASE, and RMSE.
+--
+-- 'mape', 'errorMetric_mape' - The Mean Absolute Percentage Error (MAPE)
+--
+-- 'mase', 'errorMetric_mase' - The Mean Absolute Scaled Error (MASE)
+--
+-- 'rmse', 'errorMetric_rmse' - The root-mean-square error (RMSE).
+--
+-- 'wape', 'errorMetric_wape' - The weighted absolute percentage error (WAPE).
+newErrorMetric ::
+  ErrorMetric
+newErrorMetric =
+  ErrorMetric'
+    { forecastType = Prelude.Nothing,
+      mape = Prelude.Nothing,
+      mase = Prelude.Nothing,
+      rmse = Prelude.Nothing,
+      wape = Prelude.Nothing
+    }
+
+-- | The Forecast type used to compute WAPE, MAPE, MASE, and RMSE.
+errorMetric_forecastType :: Lens.Lens' ErrorMetric (Prelude.Maybe Prelude.Text)
+errorMetric_forecastType = Lens.lens (\ErrorMetric' {forecastType} -> forecastType) (\s@ErrorMetric' {} a -> s {forecastType = a} :: ErrorMetric)
+
+-- | The Mean Absolute Percentage Error (MAPE)
+errorMetric_mape :: Lens.Lens' ErrorMetric (Prelude.Maybe Prelude.Double)
+errorMetric_mape = Lens.lens (\ErrorMetric' {mape} -> mape) (\s@ErrorMetric' {} a -> s {mape = a} :: ErrorMetric)
+
+-- | The Mean Absolute Scaled Error (MASE)
+errorMetric_mase :: Lens.Lens' ErrorMetric (Prelude.Maybe Prelude.Double)
+errorMetric_mase = Lens.lens (\ErrorMetric' {mase} -> mase) (\s@ErrorMetric' {} a -> s {mase = a} :: ErrorMetric)
+
+-- | The root-mean-square error (RMSE).
+errorMetric_rmse :: Lens.Lens' ErrorMetric (Prelude.Maybe Prelude.Double)
+errorMetric_rmse = Lens.lens (\ErrorMetric' {rmse} -> rmse) (\s@ErrorMetric' {} a -> s {rmse = a} :: ErrorMetric)
+
+-- | The weighted absolute percentage error (WAPE).
+errorMetric_wape :: Lens.Lens' ErrorMetric (Prelude.Maybe Prelude.Double)
+errorMetric_wape = Lens.lens (\ErrorMetric' {wape} -> wape) (\s@ErrorMetric' {} a -> s {wape = a} :: ErrorMetric)
+
+instance Data.FromJSON ErrorMetric where
+  parseJSON =
+    Data.withObject
+      "ErrorMetric"
+      ( \x ->
+          ErrorMetric'
+            Prelude.<$> (x Data..:? "ForecastType")
+            Prelude.<*> (x Data..:? "MAPE")
+            Prelude.<*> (x Data..:? "MASE")
+            Prelude.<*> (x Data..:? "RMSE")
+            Prelude.<*> (x Data..:? "WAPE")
+      )
+
+instance Prelude.Hashable ErrorMetric where
+  hashWithSalt _salt ErrorMetric' {..} =
+    _salt
+      `Prelude.hashWithSalt` forecastType
+      `Prelude.hashWithSalt` mape
+      `Prelude.hashWithSalt` mase
+      `Prelude.hashWithSalt` rmse
+      `Prelude.hashWithSalt` wape
+
+instance Prelude.NFData ErrorMetric where
+  rnf ErrorMetric' {..} =
+    Prelude.rnf forecastType
+      `Prelude.seq` Prelude.rnf mape
+      `Prelude.seq` Prelude.rnf mase
+      `Prelude.seq` Prelude.rnf rmse
+      `Prelude.seq` Prelude.rnf wape
diff --git a/gen/Amazonka/Forecast/Types/EvaluationParameters.hs b/gen/Amazonka/Forecast/Types/EvaluationParameters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/EvaluationParameters.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.EvaluationParameters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.EvaluationParameters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Parameters that define how to split a dataset into training data and
+-- testing data, and the number of iterations to perform. These parameters
+-- are specified in the predefined algorithms but you can override them in
+-- the CreatePredictor request.
+--
+-- /See:/ 'newEvaluationParameters' smart constructor.
+data EvaluationParameters = EvaluationParameters'
+  { -- | The point from the end of the dataset where you want to split the data
+    -- for model training and testing (evaluation). Specify the value as the
+    -- number of data points. The default is the value of the forecast horizon.
+    -- @BackTestWindowOffset@ can be used to mimic a past virtual forecast
+    -- start date. This value must be greater than or equal to the forecast
+    -- horizon and less than half of the TARGET_TIME_SERIES dataset length.
+    --
+    -- @ForecastHorizon@ \<= @BackTestWindowOffset@ \< 1\/2 *
+    -- TARGET_TIME_SERIES dataset length
+    backTestWindowOffset :: Prelude.Maybe Prelude.Int,
+    -- | The number of times to split the input data. The default is 1. Valid
+    -- values are 1 through 5.
+    numberOfBacktestWindows :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EvaluationParameters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'backTestWindowOffset', 'evaluationParameters_backTestWindowOffset' - The point from the end of the dataset where you want to split the data
+-- for model training and testing (evaluation). Specify the value as the
+-- number of data points. The default is the value of the forecast horizon.
+-- @BackTestWindowOffset@ can be used to mimic a past virtual forecast
+-- start date. This value must be greater than or equal to the forecast
+-- horizon and less than half of the TARGET_TIME_SERIES dataset length.
+--
+-- @ForecastHorizon@ \<= @BackTestWindowOffset@ \< 1\/2 *
+-- TARGET_TIME_SERIES dataset length
+--
+-- 'numberOfBacktestWindows', 'evaluationParameters_numberOfBacktestWindows' - The number of times to split the input data. The default is 1. Valid
+-- values are 1 through 5.
+newEvaluationParameters ::
+  EvaluationParameters
+newEvaluationParameters =
+  EvaluationParameters'
+    { backTestWindowOffset =
+        Prelude.Nothing,
+      numberOfBacktestWindows = Prelude.Nothing
+    }
+
+-- | The point from the end of the dataset where you want to split the data
+-- for model training and testing (evaluation). Specify the value as the
+-- number of data points. The default is the value of the forecast horizon.
+-- @BackTestWindowOffset@ can be used to mimic a past virtual forecast
+-- start date. This value must be greater than or equal to the forecast
+-- horizon and less than half of the TARGET_TIME_SERIES dataset length.
+--
+-- @ForecastHorizon@ \<= @BackTestWindowOffset@ \< 1\/2 *
+-- TARGET_TIME_SERIES dataset length
+evaluationParameters_backTestWindowOffset :: Lens.Lens' EvaluationParameters (Prelude.Maybe Prelude.Int)
+evaluationParameters_backTestWindowOffset = Lens.lens (\EvaluationParameters' {backTestWindowOffset} -> backTestWindowOffset) (\s@EvaluationParameters' {} a -> s {backTestWindowOffset = a} :: EvaluationParameters)
+
+-- | The number of times to split the input data. The default is 1. Valid
+-- values are 1 through 5.
+evaluationParameters_numberOfBacktestWindows :: Lens.Lens' EvaluationParameters (Prelude.Maybe Prelude.Int)
+evaluationParameters_numberOfBacktestWindows = Lens.lens (\EvaluationParameters' {numberOfBacktestWindows} -> numberOfBacktestWindows) (\s@EvaluationParameters' {} a -> s {numberOfBacktestWindows = a} :: EvaluationParameters)
+
+instance Data.FromJSON EvaluationParameters where
+  parseJSON =
+    Data.withObject
+      "EvaluationParameters"
+      ( \x ->
+          EvaluationParameters'
+            Prelude.<$> (x Data..:? "BackTestWindowOffset")
+            Prelude.<*> (x Data..:? "NumberOfBacktestWindows")
+      )
+
+instance Prelude.Hashable EvaluationParameters where
+  hashWithSalt _salt EvaluationParameters' {..} =
+    _salt
+      `Prelude.hashWithSalt` backTestWindowOffset
+      `Prelude.hashWithSalt` numberOfBacktestWindows
+
+instance Prelude.NFData EvaluationParameters where
+  rnf EvaluationParameters' {..} =
+    Prelude.rnf backTestWindowOffset
+      `Prelude.seq` Prelude.rnf numberOfBacktestWindows
+
+instance Data.ToJSON EvaluationParameters where
+  toJSON EvaluationParameters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BackTestWindowOffset" Data..=)
+              Prelude.<$> backTestWindowOffset,
+            ("NumberOfBacktestWindows" Data..=)
+              Prelude.<$> numberOfBacktestWindows
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/EvaluationResult.hs b/gen/Amazonka/Forecast/Types/EvaluationResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/EvaluationResult.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.EvaluationResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.EvaluationResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.WindowSummary
+import qualified Amazonka.Prelude as Prelude
+
+-- | The results of evaluating an algorithm. Returned as part of the
+-- GetAccuracyMetrics response.
+--
+-- /See:/ 'newEvaluationResult' smart constructor.
+data EvaluationResult = EvaluationResult'
+  { -- | The Amazon Resource Name (ARN) of the algorithm that was evaluated.
+    algorithmArn :: Prelude.Maybe Prelude.Text,
+    -- | The array of test windows used for evaluating the algorithm. The
+    -- @NumberOfBacktestWindows@ from the EvaluationParameters object
+    -- determines the number of windows in the array.
+    testWindows :: Prelude.Maybe [WindowSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EvaluationResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'algorithmArn', 'evaluationResult_algorithmArn' - The Amazon Resource Name (ARN) of the algorithm that was evaluated.
+--
+-- 'testWindows', 'evaluationResult_testWindows' - The array of test windows used for evaluating the algorithm. The
+-- @NumberOfBacktestWindows@ from the EvaluationParameters object
+-- determines the number of windows in the array.
+newEvaluationResult ::
+  EvaluationResult
+newEvaluationResult =
+  EvaluationResult'
+    { algorithmArn = Prelude.Nothing,
+      testWindows = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the algorithm that was evaluated.
+evaluationResult_algorithmArn :: Lens.Lens' EvaluationResult (Prelude.Maybe Prelude.Text)
+evaluationResult_algorithmArn = Lens.lens (\EvaluationResult' {algorithmArn} -> algorithmArn) (\s@EvaluationResult' {} a -> s {algorithmArn = a} :: EvaluationResult)
+
+-- | The array of test windows used for evaluating the algorithm. The
+-- @NumberOfBacktestWindows@ from the EvaluationParameters object
+-- determines the number of windows in the array.
+evaluationResult_testWindows :: Lens.Lens' EvaluationResult (Prelude.Maybe [WindowSummary])
+evaluationResult_testWindows = Lens.lens (\EvaluationResult' {testWindows} -> testWindows) (\s@EvaluationResult' {} a -> s {testWindows = a} :: EvaluationResult) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON EvaluationResult where
+  parseJSON =
+    Data.withObject
+      "EvaluationResult"
+      ( \x ->
+          EvaluationResult'
+            Prelude.<$> (x Data..:? "AlgorithmArn")
+            Prelude.<*> (x Data..:? "TestWindows" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable EvaluationResult where
+  hashWithSalt _salt EvaluationResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` algorithmArn
+      `Prelude.hashWithSalt` testWindows
+
+instance Prelude.NFData EvaluationResult where
+  rnf EvaluationResult' {..} =
+    Prelude.rnf algorithmArn
+      `Prelude.seq` Prelude.rnf testWindows
diff --git a/gen/Amazonka/Forecast/Types/EvaluationType.hs b/gen/Amazonka/Forecast/Types/EvaluationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/EvaluationType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.EvaluationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.EvaluationType
+  ( EvaluationType
+      ( ..,
+        EvaluationType_COMPUTED,
+        EvaluationType_SUMMARY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EvaluationType = EvaluationType'
+  { fromEvaluationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EvaluationType_COMPUTED :: EvaluationType
+pattern EvaluationType_COMPUTED = EvaluationType' "COMPUTED"
+
+pattern EvaluationType_SUMMARY :: EvaluationType
+pattern EvaluationType_SUMMARY = EvaluationType' "SUMMARY"
+
+{-# COMPLETE
+  EvaluationType_COMPUTED,
+  EvaluationType_SUMMARY,
+  EvaluationType'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/ExplainabilityConfig.hs b/gen/Amazonka/Forecast/Types/ExplainabilityConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ExplainabilityConfig.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ExplainabilityConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ExplainabilityConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.TimePointGranularity
+import Amazonka.Forecast.Types.TimeSeriesGranularity
+import qualified Amazonka.Prelude as Prelude
+
+-- | The ExplainabilityConfig data type defines the number of time series and
+-- time points included in CreateExplainability.
+--
+-- If you provide a predictor ARN for @ResourceArn@, you must set both
+-- @TimePointGranularity@ and @TimeSeriesGranularity@ to “ALL”. When
+-- creating Predictor Explainability, Amazon Forecast considers all time
+-- series and time points.
+--
+-- If you provide a forecast ARN for @ResourceArn@, you can set
+-- @TimePointGranularity@ and @TimeSeriesGranularity@ to either “ALL” or
+-- “Specific”.
+--
+-- /See:/ 'newExplainabilityConfig' smart constructor.
+data ExplainabilityConfig = ExplainabilityConfig'
+  { -- | To create an Explainability for all time series in your datasets, use
+    -- @ALL@. To create an Explainability for specific time series in your
+    -- datasets, use @SPECIFIC@.
+    --
+    -- Specify time series by uploading a CSV or Parquet file to an Amazon S3
+    -- bucket and set the location within the DataDestination data type.
+    timeSeriesGranularity :: TimeSeriesGranularity,
+    -- | To create an Explainability for all time points in your forecast
+    -- horizon, use @ALL@. To create an Explainability for specific time points
+    -- in your forecast horizon, use @SPECIFIC@.
+    --
+    -- Specify time points with the @StartDateTime@ and @EndDateTime@
+    -- parameters within the CreateExplainability operation.
+    timePointGranularity :: TimePointGranularity
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExplainabilityConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timeSeriesGranularity', 'explainabilityConfig_timeSeriesGranularity' - To create an Explainability for all time series in your datasets, use
+-- @ALL@. To create an Explainability for specific time series in your
+-- datasets, use @SPECIFIC@.
+--
+-- Specify time series by uploading a CSV or Parquet file to an Amazon S3
+-- bucket and set the location within the DataDestination data type.
+--
+-- 'timePointGranularity', 'explainabilityConfig_timePointGranularity' - To create an Explainability for all time points in your forecast
+-- horizon, use @ALL@. To create an Explainability for specific time points
+-- in your forecast horizon, use @SPECIFIC@.
+--
+-- Specify time points with the @StartDateTime@ and @EndDateTime@
+-- parameters within the CreateExplainability operation.
+newExplainabilityConfig ::
+  -- | 'timeSeriesGranularity'
+  TimeSeriesGranularity ->
+  -- | 'timePointGranularity'
+  TimePointGranularity ->
+  ExplainabilityConfig
+newExplainabilityConfig
+  pTimeSeriesGranularity_
+  pTimePointGranularity_ =
+    ExplainabilityConfig'
+      { timeSeriesGranularity =
+          pTimeSeriesGranularity_,
+        timePointGranularity = pTimePointGranularity_
+      }
+
+-- | To create an Explainability for all time series in your datasets, use
+-- @ALL@. To create an Explainability for specific time series in your
+-- datasets, use @SPECIFIC@.
+--
+-- Specify time series by uploading a CSV or Parquet file to an Amazon S3
+-- bucket and set the location within the DataDestination data type.
+explainabilityConfig_timeSeriesGranularity :: Lens.Lens' ExplainabilityConfig TimeSeriesGranularity
+explainabilityConfig_timeSeriesGranularity = Lens.lens (\ExplainabilityConfig' {timeSeriesGranularity} -> timeSeriesGranularity) (\s@ExplainabilityConfig' {} a -> s {timeSeriesGranularity = a} :: ExplainabilityConfig)
+
+-- | To create an Explainability for all time points in your forecast
+-- horizon, use @ALL@. To create an Explainability for specific time points
+-- in your forecast horizon, use @SPECIFIC@.
+--
+-- Specify time points with the @StartDateTime@ and @EndDateTime@
+-- parameters within the CreateExplainability operation.
+explainabilityConfig_timePointGranularity :: Lens.Lens' ExplainabilityConfig TimePointGranularity
+explainabilityConfig_timePointGranularity = Lens.lens (\ExplainabilityConfig' {timePointGranularity} -> timePointGranularity) (\s@ExplainabilityConfig' {} a -> s {timePointGranularity = a} :: ExplainabilityConfig)
+
+instance Data.FromJSON ExplainabilityConfig where
+  parseJSON =
+    Data.withObject
+      "ExplainabilityConfig"
+      ( \x ->
+          ExplainabilityConfig'
+            Prelude.<$> (x Data..: "TimeSeriesGranularity")
+            Prelude.<*> (x Data..: "TimePointGranularity")
+      )
+
+instance Prelude.Hashable ExplainabilityConfig where
+  hashWithSalt _salt ExplainabilityConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` timeSeriesGranularity
+      `Prelude.hashWithSalt` timePointGranularity
+
+instance Prelude.NFData ExplainabilityConfig where
+  rnf ExplainabilityConfig' {..} =
+    Prelude.rnf timeSeriesGranularity
+      `Prelude.seq` Prelude.rnf timePointGranularity
+
+instance Data.ToJSON ExplainabilityConfig where
+  toJSON ExplainabilityConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "TimeSeriesGranularity"
+                  Data..= timeSeriesGranularity
+              ),
+            Prelude.Just
+              ( "TimePointGranularity"
+                  Data..= timePointGranularity
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/ExplainabilityExportSummary.hs b/gen/Amazonka/Forecast/Types/ExplainabilityExportSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ExplainabilityExportSummary.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ExplainabilityExportSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ExplainabilityExportSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.DataDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the Explainability export properties used in the
+-- ListExplainabilityExports operation. To get a complete set of
+-- properties, call the DescribeExplainabilityExport operation, and provide
+-- the @ExplainabilityExportArn@.
+--
+-- /See:/ 'newExplainabilityExportSummary' smart constructor.
+data ExplainabilityExportSummary = ExplainabilityExportSummary'
+  { -- | When the Explainability was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    destination :: Prelude.Maybe DataDestination,
+    -- | The Amazon Resource Name (ARN) of the Explainability export.
+    explainabilityExportArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Explainability export
+    explainabilityExportName :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | Information about any errors that may have occurred during the
+    -- Explainability export.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Explainability export. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExplainabilityExportSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'explainabilityExportSummary_creationTime' - When the Explainability was created.
+--
+-- 'destination', 'explainabilityExportSummary_destination' - Undocumented member.
+--
+-- 'explainabilityExportArn', 'explainabilityExportSummary_explainabilityExportArn' - The Amazon Resource Name (ARN) of the Explainability export.
+--
+-- 'explainabilityExportName', 'explainabilityExportSummary_explainabilityExportName' - The name of the Explainability export
+--
+-- 'lastModificationTime', 'explainabilityExportSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'explainabilityExportSummary_message' - Information about any errors that may have occurred during the
+-- Explainability export.
+--
+-- 'status', 'explainabilityExportSummary_status' - The status of the Explainability export. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+newExplainabilityExportSummary ::
+  ExplainabilityExportSummary
+newExplainabilityExportSummary =
+  ExplainabilityExportSummary'
+    { creationTime =
+        Prelude.Nothing,
+      destination = Prelude.Nothing,
+      explainabilityExportArn = Prelude.Nothing,
+      explainabilityExportName = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | When the Explainability was created.
+explainabilityExportSummary_creationTime :: Lens.Lens' ExplainabilityExportSummary (Prelude.Maybe Prelude.UTCTime)
+explainabilityExportSummary_creationTime = Lens.lens (\ExplainabilityExportSummary' {creationTime} -> creationTime) (\s@ExplainabilityExportSummary' {} a -> s {creationTime = a} :: ExplainabilityExportSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+explainabilityExportSummary_destination :: Lens.Lens' ExplainabilityExportSummary (Prelude.Maybe DataDestination)
+explainabilityExportSummary_destination = Lens.lens (\ExplainabilityExportSummary' {destination} -> destination) (\s@ExplainabilityExportSummary' {} a -> s {destination = a} :: ExplainabilityExportSummary)
+
+-- | The Amazon Resource Name (ARN) of the Explainability export.
+explainabilityExportSummary_explainabilityExportArn :: Lens.Lens' ExplainabilityExportSummary (Prelude.Maybe Prelude.Text)
+explainabilityExportSummary_explainabilityExportArn = Lens.lens (\ExplainabilityExportSummary' {explainabilityExportArn} -> explainabilityExportArn) (\s@ExplainabilityExportSummary' {} a -> s {explainabilityExportArn = a} :: ExplainabilityExportSummary)
+
+-- | The name of the Explainability export
+explainabilityExportSummary_explainabilityExportName :: Lens.Lens' ExplainabilityExportSummary (Prelude.Maybe Prelude.Text)
+explainabilityExportSummary_explainabilityExportName = Lens.lens (\ExplainabilityExportSummary' {explainabilityExportName} -> explainabilityExportName) (\s@ExplainabilityExportSummary' {} a -> s {explainabilityExportName = a} :: ExplainabilityExportSummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+explainabilityExportSummary_lastModificationTime :: Lens.Lens' ExplainabilityExportSummary (Prelude.Maybe Prelude.UTCTime)
+explainabilityExportSummary_lastModificationTime = Lens.lens (\ExplainabilityExportSummary' {lastModificationTime} -> lastModificationTime) (\s@ExplainabilityExportSummary' {} a -> s {lastModificationTime = a} :: ExplainabilityExportSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Information about any errors that may have occurred during the
+-- Explainability export.
+explainabilityExportSummary_message :: Lens.Lens' ExplainabilityExportSummary (Prelude.Maybe Prelude.Text)
+explainabilityExportSummary_message = Lens.lens (\ExplainabilityExportSummary' {message} -> message) (\s@ExplainabilityExportSummary' {} a -> s {message = a} :: ExplainabilityExportSummary)
+
+-- | The status of the Explainability export. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+explainabilityExportSummary_status :: Lens.Lens' ExplainabilityExportSummary (Prelude.Maybe Prelude.Text)
+explainabilityExportSummary_status = Lens.lens (\ExplainabilityExportSummary' {status} -> status) (\s@ExplainabilityExportSummary' {} a -> s {status = a} :: ExplainabilityExportSummary)
+
+instance Data.FromJSON ExplainabilityExportSummary where
+  parseJSON =
+    Data.withObject
+      "ExplainabilityExportSummary"
+      ( \x ->
+          ExplainabilityExportSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "Destination")
+            Prelude.<*> (x Data..:? "ExplainabilityExportArn")
+            Prelude.<*> (x Data..:? "ExplainabilityExportName")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ExplainabilityExportSummary where
+  hashWithSalt _salt ExplainabilityExportSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` explainabilityExportArn
+      `Prelude.hashWithSalt` explainabilityExportName
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ExplainabilityExportSummary where
+  rnf ExplainabilityExportSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf explainabilityExportArn
+      `Prelude.seq` Prelude.rnf explainabilityExportName
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/ExplainabilityInfo.hs b/gen/Amazonka/Forecast/Types/ExplainabilityInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ExplainabilityInfo.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ExplainabilityInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ExplainabilityInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the Explainability resource.
+--
+-- /See:/ 'newExplainabilityInfo' smart constructor.
+data ExplainabilityInfo = ExplainabilityInfo'
+  { -- | The Amazon Resource Name (ARN) of the Explainability.
+    explainabilityArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Explainability. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExplainabilityInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'explainabilityArn', 'explainabilityInfo_explainabilityArn' - The Amazon Resource Name (ARN) of the Explainability.
+--
+-- 'status', 'explainabilityInfo_status' - The status of the Explainability. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+newExplainabilityInfo ::
+  ExplainabilityInfo
+newExplainabilityInfo =
+  ExplainabilityInfo'
+    { explainabilityArn =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the Explainability.
+explainabilityInfo_explainabilityArn :: Lens.Lens' ExplainabilityInfo (Prelude.Maybe Prelude.Text)
+explainabilityInfo_explainabilityArn = Lens.lens (\ExplainabilityInfo' {explainabilityArn} -> explainabilityArn) (\s@ExplainabilityInfo' {} a -> s {explainabilityArn = a} :: ExplainabilityInfo)
+
+-- | The status of the Explainability. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+explainabilityInfo_status :: Lens.Lens' ExplainabilityInfo (Prelude.Maybe Prelude.Text)
+explainabilityInfo_status = Lens.lens (\ExplainabilityInfo' {status} -> status) (\s@ExplainabilityInfo' {} a -> s {status = a} :: ExplainabilityInfo)
+
+instance Data.FromJSON ExplainabilityInfo where
+  parseJSON =
+    Data.withObject
+      "ExplainabilityInfo"
+      ( \x ->
+          ExplainabilityInfo'
+            Prelude.<$> (x Data..:? "ExplainabilityArn")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ExplainabilityInfo where
+  hashWithSalt _salt ExplainabilityInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` explainabilityArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ExplainabilityInfo where
+  rnf ExplainabilityInfo' {..} =
+    Prelude.rnf explainabilityArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/ExplainabilitySummary.hs b/gen/Amazonka/Forecast/Types/ExplainabilitySummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ExplainabilitySummary.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ExplainabilitySummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ExplainabilitySummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.ExplainabilityConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the Explainability properties used in the
+-- ListExplainabilities operation. To get a complete set of properties,
+-- call the DescribeExplainability operation, and provide the listed
+-- @ExplainabilityArn@.
+--
+-- /See:/ 'newExplainabilitySummary' smart constructor.
+data ExplainabilitySummary = ExplainabilitySummary'
+  { -- | When the Explainability was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the Explainability.
+    explainabilityArn :: Prelude.Maybe Prelude.Text,
+    -- | The configuration settings that define the granularity of time series
+    -- and time points for the Explainability.
+    explainabilityConfig :: Prelude.Maybe ExplainabilityConfig,
+    -- | The name of the Explainability.
+    explainabilityName :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | Information about any errors that may have occurred during the
+    -- Explainability creation process.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+    -- create the Explainability.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Explainability. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExplainabilitySummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'explainabilitySummary_creationTime' - When the Explainability was created.
+--
+-- 'explainabilityArn', 'explainabilitySummary_explainabilityArn' - The Amazon Resource Name (ARN) of the Explainability.
+--
+-- 'explainabilityConfig', 'explainabilitySummary_explainabilityConfig' - The configuration settings that define the granularity of time series
+-- and time points for the Explainability.
+--
+-- 'explainabilityName', 'explainabilitySummary_explainabilityName' - The name of the Explainability.
+--
+-- 'lastModificationTime', 'explainabilitySummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'explainabilitySummary_message' - Information about any errors that may have occurred during the
+-- Explainability creation process.
+--
+-- 'resourceArn', 'explainabilitySummary_resourceArn' - The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+-- create the Explainability.
+--
+-- 'status', 'explainabilitySummary_status' - The status of the Explainability. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+newExplainabilitySummary ::
+  ExplainabilitySummary
+newExplainabilitySummary =
+  ExplainabilitySummary'
+    { creationTime =
+        Prelude.Nothing,
+      explainabilityArn = Prelude.Nothing,
+      explainabilityConfig = Prelude.Nothing,
+      explainabilityName = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | When the Explainability was created.
+explainabilitySummary_creationTime :: Lens.Lens' ExplainabilitySummary (Prelude.Maybe Prelude.UTCTime)
+explainabilitySummary_creationTime = Lens.lens (\ExplainabilitySummary' {creationTime} -> creationTime) (\s@ExplainabilitySummary' {} a -> s {creationTime = a} :: ExplainabilitySummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the Explainability.
+explainabilitySummary_explainabilityArn :: Lens.Lens' ExplainabilitySummary (Prelude.Maybe Prelude.Text)
+explainabilitySummary_explainabilityArn = Lens.lens (\ExplainabilitySummary' {explainabilityArn} -> explainabilityArn) (\s@ExplainabilitySummary' {} a -> s {explainabilityArn = a} :: ExplainabilitySummary)
+
+-- | The configuration settings that define the granularity of time series
+-- and time points for the Explainability.
+explainabilitySummary_explainabilityConfig :: Lens.Lens' ExplainabilitySummary (Prelude.Maybe ExplainabilityConfig)
+explainabilitySummary_explainabilityConfig = Lens.lens (\ExplainabilitySummary' {explainabilityConfig} -> explainabilityConfig) (\s@ExplainabilitySummary' {} a -> s {explainabilityConfig = a} :: ExplainabilitySummary)
+
+-- | The name of the Explainability.
+explainabilitySummary_explainabilityName :: Lens.Lens' ExplainabilitySummary (Prelude.Maybe Prelude.Text)
+explainabilitySummary_explainabilityName = Lens.lens (\ExplainabilitySummary' {explainabilityName} -> explainabilityName) (\s@ExplainabilitySummary' {} a -> s {explainabilityName = a} :: ExplainabilitySummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+explainabilitySummary_lastModificationTime :: Lens.Lens' ExplainabilitySummary (Prelude.Maybe Prelude.UTCTime)
+explainabilitySummary_lastModificationTime = Lens.lens (\ExplainabilitySummary' {lastModificationTime} -> lastModificationTime) (\s@ExplainabilitySummary' {} a -> s {lastModificationTime = a} :: ExplainabilitySummary) Prelude.. Lens.mapping Data._Time
+
+-- | Information about any errors that may have occurred during the
+-- Explainability creation process.
+explainabilitySummary_message :: Lens.Lens' ExplainabilitySummary (Prelude.Maybe Prelude.Text)
+explainabilitySummary_message = Lens.lens (\ExplainabilitySummary' {message} -> message) (\s@ExplainabilitySummary' {} a -> s {message = a} :: ExplainabilitySummary)
+
+-- | The Amazon Resource Name (ARN) of the Predictor or Forecast used to
+-- create the Explainability.
+explainabilitySummary_resourceArn :: Lens.Lens' ExplainabilitySummary (Prelude.Maybe Prelude.Text)
+explainabilitySummary_resourceArn = Lens.lens (\ExplainabilitySummary' {resourceArn} -> resourceArn) (\s@ExplainabilitySummary' {} a -> s {resourceArn = a} :: ExplainabilitySummary)
+
+-- | The status of the Explainability. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+explainabilitySummary_status :: Lens.Lens' ExplainabilitySummary (Prelude.Maybe Prelude.Text)
+explainabilitySummary_status = Lens.lens (\ExplainabilitySummary' {status} -> status) (\s@ExplainabilitySummary' {} a -> s {status = a} :: ExplainabilitySummary)
+
+instance Data.FromJSON ExplainabilitySummary where
+  parseJSON =
+    Data.withObject
+      "ExplainabilitySummary"
+      ( \x ->
+          ExplainabilitySummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "ExplainabilityArn")
+            Prelude.<*> (x Data..:? "ExplainabilityConfig")
+            Prelude.<*> (x Data..:? "ExplainabilityName")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ExplainabilitySummary where
+  hashWithSalt _salt ExplainabilitySummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` explainabilityArn
+      `Prelude.hashWithSalt` explainabilityConfig
+      `Prelude.hashWithSalt` explainabilityName
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ExplainabilitySummary where
+  rnf ExplainabilitySummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf explainabilityArn
+      `Prelude.seq` Prelude.rnf explainabilityConfig
+      `Prelude.seq` Prelude.rnf explainabilityName
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/Featurization.hs b/gen/Amazonka/Forecast/Types/Featurization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Featurization.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Featurization
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Featurization where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.FeaturizationMethod
+import qualified Amazonka.Prelude as Prelude
+
+-- | This object belongs to the CreatePredictor operation. If you created
+-- your predictor with CreateAutoPredictor, see AttributeConfig.
+--
+-- Provides featurization (transformation) information for a dataset field.
+-- This object is part of the FeaturizationConfig object.
+--
+-- For example:
+--
+-- @{@
+--
+-- @\"AttributeName\": \"demand\",@
+--
+-- @FeaturizationPipeline [ {@
+--
+-- @\"FeaturizationMethodName\": \"filling\",@
+--
+-- @\"FeaturizationMethodParameters\": {\"aggregation\": \"avg\", \"backfill\": \"nan\"}@
+--
+-- @} ]@
+--
+-- @}@
+--
+-- /See:/ 'newFeaturization' smart constructor.
+data Featurization = Featurization'
+  { -- | An array of one @FeaturizationMethod@ object that specifies the feature
+    -- transformation method.
+    featurizationPipeline :: Prelude.Maybe (Prelude.NonEmpty FeaturizationMethod),
+    -- | The name of the schema attribute that specifies the data field to be
+    -- featurized. Amazon Forecast supports the target field of the
+    -- @TARGET_TIME_SERIES@ and the @RELATED_TIME_SERIES@ datasets. For
+    -- example, for the @RETAIL@ domain, the target is @demand@, and for the
+    -- @CUSTOM@ domain, the target is @target_value@. For more information, see
+    -- howitworks-missing-values.
+    attributeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Featurization' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'featurizationPipeline', 'featurization_featurizationPipeline' - An array of one @FeaturizationMethod@ object that specifies the feature
+-- transformation method.
+--
+-- 'attributeName', 'featurization_attributeName' - The name of the schema attribute that specifies the data field to be
+-- featurized. Amazon Forecast supports the target field of the
+-- @TARGET_TIME_SERIES@ and the @RELATED_TIME_SERIES@ datasets. For
+-- example, for the @RETAIL@ domain, the target is @demand@, and for the
+-- @CUSTOM@ domain, the target is @target_value@. For more information, see
+-- howitworks-missing-values.
+newFeaturization ::
+  -- | 'attributeName'
+  Prelude.Text ->
+  Featurization
+newFeaturization pAttributeName_ =
+  Featurization'
+    { featurizationPipeline =
+        Prelude.Nothing,
+      attributeName = pAttributeName_
+    }
+
+-- | An array of one @FeaturizationMethod@ object that specifies the feature
+-- transformation method.
+featurization_featurizationPipeline :: Lens.Lens' Featurization (Prelude.Maybe (Prelude.NonEmpty FeaturizationMethod))
+featurization_featurizationPipeline = Lens.lens (\Featurization' {featurizationPipeline} -> featurizationPipeline) (\s@Featurization' {} a -> s {featurizationPipeline = a} :: Featurization) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the schema attribute that specifies the data field to be
+-- featurized. Amazon Forecast supports the target field of the
+-- @TARGET_TIME_SERIES@ and the @RELATED_TIME_SERIES@ datasets. For
+-- example, for the @RETAIL@ domain, the target is @demand@, and for the
+-- @CUSTOM@ domain, the target is @target_value@. For more information, see
+-- howitworks-missing-values.
+featurization_attributeName :: Lens.Lens' Featurization Prelude.Text
+featurization_attributeName = Lens.lens (\Featurization' {attributeName} -> attributeName) (\s@Featurization' {} a -> s {attributeName = a} :: Featurization)
+
+instance Data.FromJSON Featurization where
+  parseJSON =
+    Data.withObject
+      "Featurization"
+      ( \x ->
+          Featurization'
+            Prelude.<$> (x Data..:? "FeaturizationPipeline")
+            Prelude.<*> (x Data..: "AttributeName")
+      )
+
+instance Prelude.Hashable Featurization where
+  hashWithSalt _salt Featurization' {..} =
+    _salt
+      `Prelude.hashWithSalt` featurizationPipeline
+      `Prelude.hashWithSalt` attributeName
+
+instance Prelude.NFData Featurization where
+  rnf Featurization' {..} =
+    Prelude.rnf featurizationPipeline
+      `Prelude.seq` Prelude.rnf attributeName
+
+instance Data.ToJSON Featurization where
+  toJSON Featurization' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FeaturizationPipeline" Data..=)
+              Prelude.<$> featurizationPipeline,
+            Prelude.Just
+              ("AttributeName" Data..= attributeName)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/FeaturizationConfig.hs b/gen/Amazonka/Forecast/Types/FeaturizationConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/FeaturizationConfig.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.FeaturizationConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.FeaturizationConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.Featurization
+import qualified Amazonka.Prelude as Prelude
+
+-- | This object belongs to the CreatePredictor operation. If you created
+-- your predictor with CreateAutoPredictor, see AttributeConfig.
+--
+-- In a CreatePredictor operation, the specified algorithm trains a model
+-- using the specified dataset group. You can optionally tell the operation
+-- to modify data fields prior to training a model. These modifications are
+-- referred to as /featurization/.
+--
+-- You define featurization using the @FeaturizationConfig@ object. You
+-- specify an array of transformations, one for each field that you want to
+-- featurize. You then include the @FeaturizationConfig@ object in your
+-- @CreatePredictor@ request. Amazon Forecast applies the featurization to
+-- the @TARGET_TIME_SERIES@ and @RELATED_TIME_SERIES@ datasets before model
+-- training.
+--
+-- You can create multiple featurization configurations. For example, you
+-- might call the @CreatePredictor@ operation twice by specifying different
+-- featurization configurations.
+--
+-- /See:/ 'newFeaturizationConfig' smart constructor.
+data FeaturizationConfig = FeaturizationConfig'
+  { -- | An array of featurization (transformation) information for the fields of
+    -- a dataset.
+    featurizations :: Prelude.Maybe (Prelude.NonEmpty Featurization),
+    -- | An array of dimension (field) names that specify how to group the
+    -- generated forecast.
+    --
+    -- For example, suppose that you are generating a forecast for item sales
+    -- across all of your stores, and your dataset contains a @store_id@ field.
+    -- If you want the sales forecast for each item by store, you would specify
+    -- @store_id@ as the dimension.
+    --
+    -- All forecast dimensions specified in the @TARGET_TIME_SERIES@ dataset
+    -- don\'t need to be specified in the @CreatePredictor@ request. All
+    -- forecast dimensions specified in the @RELATED_TIME_SERIES@ dataset must
+    -- be specified in the @CreatePredictor@ request.
+    forecastDimensions :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The frequency of predictions in a forecast.
+    --
+    -- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+    -- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+    -- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+    -- and \"5min\" indicates every five minutes.
+    --
+    -- The frequency must be greater than or equal to the TARGET_TIME_SERIES
+    -- dataset frequency.
+    --
+    -- When a RELATED_TIME_SERIES dataset is provided, the frequency must be
+    -- equal to the RELATED_TIME_SERIES dataset frequency.
+    forecastFrequency :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FeaturizationConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'featurizations', 'featurizationConfig_featurizations' - An array of featurization (transformation) information for the fields of
+-- a dataset.
+--
+-- 'forecastDimensions', 'featurizationConfig_forecastDimensions' - An array of dimension (field) names that specify how to group the
+-- generated forecast.
+--
+-- For example, suppose that you are generating a forecast for item sales
+-- across all of your stores, and your dataset contains a @store_id@ field.
+-- If you want the sales forecast for each item by store, you would specify
+-- @store_id@ as the dimension.
+--
+-- All forecast dimensions specified in the @TARGET_TIME_SERIES@ dataset
+-- don\'t need to be specified in the @CreatePredictor@ request. All
+-- forecast dimensions specified in the @RELATED_TIME_SERIES@ dataset must
+-- be specified in the @CreatePredictor@ request.
+--
+-- 'forecastFrequency', 'featurizationConfig_forecastFrequency' - The frequency of predictions in a forecast.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+-- and \"5min\" indicates every five minutes.
+--
+-- The frequency must be greater than or equal to the TARGET_TIME_SERIES
+-- dataset frequency.
+--
+-- When a RELATED_TIME_SERIES dataset is provided, the frequency must be
+-- equal to the RELATED_TIME_SERIES dataset frequency.
+newFeaturizationConfig ::
+  -- | 'forecastFrequency'
+  Prelude.Text ->
+  FeaturizationConfig
+newFeaturizationConfig pForecastFrequency_ =
+  FeaturizationConfig'
+    { featurizations =
+        Prelude.Nothing,
+      forecastDimensions = Prelude.Nothing,
+      forecastFrequency = pForecastFrequency_
+    }
+
+-- | An array of featurization (transformation) information for the fields of
+-- a dataset.
+featurizationConfig_featurizations :: Lens.Lens' FeaturizationConfig (Prelude.Maybe (Prelude.NonEmpty Featurization))
+featurizationConfig_featurizations = Lens.lens (\FeaturizationConfig' {featurizations} -> featurizations) (\s@FeaturizationConfig' {} a -> s {featurizations = a} :: FeaturizationConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of dimension (field) names that specify how to group the
+-- generated forecast.
+--
+-- For example, suppose that you are generating a forecast for item sales
+-- across all of your stores, and your dataset contains a @store_id@ field.
+-- If you want the sales forecast for each item by store, you would specify
+-- @store_id@ as the dimension.
+--
+-- All forecast dimensions specified in the @TARGET_TIME_SERIES@ dataset
+-- don\'t need to be specified in the @CreatePredictor@ request. All
+-- forecast dimensions specified in the @RELATED_TIME_SERIES@ dataset must
+-- be specified in the @CreatePredictor@ request.
+featurizationConfig_forecastDimensions :: Lens.Lens' FeaturizationConfig (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+featurizationConfig_forecastDimensions = Lens.lens (\FeaturizationConfig' {forecastDimensions} -> forecastDimensions) (\s@FeaturizationConfig' {} a -> s {forecastDimensions = a} :: FeaturizationConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The frequency of predictions in a forecast.
+--
+-- Valid intervals are Y (Year), M (Month), W (Week), D (Day), H (Hour),
+-- 30min (30 minutes), 15min (15 minutes), 10min (10 minutes), 5min (5
+-- minutes), and 1min (1 minute). For example, \"Y\" indicates every year
+-- and \"5min\" indicates every five minutes.
+--
+-- The frequency must be greater than or equal to the TARGET_TIME_SERIES
+-- dataset frequency.
+--
+-- When a RELATED_TIME_SERIES dataset is provided, the frequency must be
+-- equal to the RELATED_TIME_SERIES dataset frequency.
+featurizationConfig_forecastFrequency :: Lens.Lens' FeaturizationConfig Prelude.Text
+featurizationConfig_forecastFrequency = Lens.lens (\FeaturizationConfig' {forecastFrequency} -> forecastFrequency) (\s@FeaturizationConfig' {} a -> s {forecastFrequency = a} :: FeaturizationConfig)
+
+instance Data.FromJSON FeaturizationConfig where
+  parseJSON =
+    Data.withObject
+      "FeaturizationConfig"
+      ( \x ->
+          FeaturizationConfig'
+            Prelude.<$> (x Data..:? "Featurizations")
+            Prelude.<*> (x Data..:? "ForecastDimensions")
+            Prelude.<*> (x Data..: "ForecastFrequency")
+      )
+
+instance Prelude.Hashable FeaturizationConfig where
+  hashWithSalt _salt FeaturizationConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` featurizations
+      `Prelude.hashWithSalt` forecastDimensions
+      `Prelude.hashWithSalt` forecastFrequency
+
+instance Prelude.NFData FeaturizationConfig where
+  rnf FeaturizationConfig' {..} =
+    Prelude.rnf featurizations
+      `Prelude.seq` Prelude.rnf forecastDimensions
+      `Prelude.seq` Prelude.rnf forecastFrequency
+
+instance Data.ToJSON FeaturizationConfig where
+  toJSON FeaturizationConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Featurizations" Data..=)
+              Prelude.<$> featurizations,
+            ("ForecastDimensions" Data..=)
+              Prelude.<$> forecastDimensions,
+            Prelude.Just
+              ("ForecastFrequency" Data..= forecastFrequency)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/FeaturizationMethod.hs b/gen/Amazonka/Forecast/Types/FeaturizationMethod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/FeaturizationMethod.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.FeaturizationMethod
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.FeaturizationMethod where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.FeaturizationMethodName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the method that featurizes (transforms) a
+-- dataset field. The method is part of the @FeaturizationPipeline@ of the
+-- Featurization object.
+--
+-- The following is an example of how you specify a @FeaturizationMethod@
+-- object.
+--
+-- @{@
+--
+-- @\"FeaturizationMethodName\": \"filling\",@
+--
+-- @\"FeaturizationMethodParameters\": {\"aggregation\": \"sum\", \"middlefill\": \"zero\", \"backfill\": \"zero\"}@
+--
+-- @}@
+--
+-- /See:/ 'newFeaturizationMethod' smart constructor.
+data FeaturizationMethod = FeaturizationMethod'
+  { -- | The method parameters (key-value pairs), which are a map of override
+    -- parameters. Specify these parameters to override the default values.
+    -- Related Time Series attributes do not accept aggregation parameters.
+    --
+    -- The following list shows the parameters and their valid values for the
+    -- \"filling\" featurization method for a __Target Time Series__ dataset.
+    -- Bold signifies the default value.
+    --
+    -- -   @aggregation@: __sum__, @avg@, @first@, @min@, @max@
+    --
+    -- -   @frontfill@: __none__
+    --
+    -- -   @middlefill@: __zero__, @nan@ (not a number), @value@, @median@,
+    --     @mean@, @min@, @max@
+    --
+    -- -   @backfill@: __zero__, @nan@, @value@, @median@, @mean@, @min@, @max@
+    --
+    -- The following list shows the parameters and their valid values for a
+    -- __Related Time Series__ featurization method (there are no defaults):
+    --
+    -- -   @middlefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+    --
+    -- -   @backfill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+    --
+    -- -   @futurefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+    --
+    -- To set a filling method to a specific value, set the fill parameter to
+    -- @value@ and define the value in a corresponding @_value@ parameter. For
+    -- example, to set backfilling to a value of 2, include the following:
+    -- @\"backfill\": \"value\"@ and @\"backfill_value\":\"2\"@.
+    featurizationMethodParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the method. The \"filling\" method is the only supported
+    -- method.
+    featurizationMethodName :: FeaturizationMethodName
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FeaturizationMethod' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'featurizationMethodParameters', 'featurizationMethod_featurizationMethodParameters' - The method parameters (key-value pairs), which are a map of override
+-- parameters. Specify these parameters to override the default values.
+-- Related Time Series attributes do not accept aggregation parameters.
+--
+-- The following list shows the parameters and their valid values for the
+-- \"filling\" featurization method for a __Target Time Series__ dataset.
+-- Bold signifies the default value.
+--
+-- -   @aggregation@: __sum__, @avg@, @first@, @min@, @max@
+--
+-- -   @frontfill@: __none__
+--
+-- -   @middlefill@: __zero__, @nan@ (not a number), @value@, @median@,
+--     @mean@, @min@, @max@
+--
+-- -   @backfill@: __zero__, @nan@, @value@, @median@, @mean@, @min@, @max@
+--
+-- The following list shows the parameters and their valid values for a
+-- __Related Time Series__ featurization method (there are no defaults):
+--
+-- -   @middlefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- -   @backfill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- -   @futurefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- To set a filling method to a specific value, set the fill parameter to
+-- @value@ and define the value in a corresponding @_value@ parameter. For
+-- example, to set backfilling to a value of 2, include the following:
+-- @\"backfill\": \"value\"@ and @\"backfill_value\":\"2\"@.
+--
+-- 'featurizationMethodName', 'featurizationMethod_featurizationMethodName' - The name of the method. The \"filling\" method is the only supported
+-- method.
+newFeaturizationMethod ::
+  -- | 'featurizationMethodName'
+  FeaturizationMethodName ->
+  FeaturizationMethod
+newFeaturizationMethod pFeaturizationMethodName_ =
+  FeaturizationMethod'
+    { featurizationMethodParameters =
+        Prelude.Nothing,
+      featurizationMethodName = pFeaturizationMethodName_
+    }
+
+-- | The method parameters (key-value pairs), which are a map of override
+-- parameters. Specify these parameters to override the default values.
+-- Related Time Series attributes do not accept aggregation parameters.
+--
+-- The following list shows the parameters and their valid values for the
+-- \"filling\" featurization method for a __Target Time Series__ dataset.
+-- Bold signifies the default value.
+--
+-- -   @aggregation@: __sum__, @avg@, @first@, @min@, @max@
+--
+-- -   @frontfill@: __none__
+--
+-- -   @middlefill@: __zero__, @nan@ (not a number), @value@, @median@,
+--     @mean@, @min@, @max@
+--
+-- -   @backfill@: __zero__, @nan@, @value@, @median@, @mean@, @min@, @max@
+--
+-- The following list shows the parameters and their valid values for a
+-- __Related Time Series__ featurization method (there are no defaults):
+--
+-- -   @middlefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- -   @backfill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- -   @futurefill@: @zero@, @value@, @median@, @mean@, @min@, @max@
+--
+-- To set a filling method to a specific value, set the fill parameter to
+-- @value@ and define the value in a corresponding @_value@ parameter. For
+-- example, to set backfilling to a value of 2, include the following:
+-- @\"backfill\": \"value\"@ and @\"backfill_value\":\"2\"@.
+featurizationMethod_featurizationMethodParameters :: Lens.Lens' FeaturizationMethod (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+featurizationMethod_featurizationMethodParameters = Lens.lens (\FeaturizationMethod' {featurizationMethodParameters} -> featurizationMethodParameters) (\s@FeaturizationMethod' {} a -> s {featurizationMethodParameters = a} :: FeaturizationMethod) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the method. The \"filling\" method is the only supported
+-- method.
+featurizationMethod_featurizationMethodName :: Lens.Lens' FeaturizationMethod FeaturizationMethodName
+featurizationMethod_featurizationMethodName = Lens.lens (\FeaturizationMethod' {featurizationMethodName} -> featurizationMethodName) (\s@FeaturizationMethod' {} a -> s {featurizationMethodName = a} :: FeaturizationMethod)
+
+instance Data.FromJSON FeaturizationMethod where
+  parseJSON =
+    Data.withObject
+      "FeaturizationMethod"
+      ( \x ->
+          FeaturizationMethod'
+            Prelude.<$> ( x
+                            Data..:? "FeaturizationMethodParameters"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "FeaturizationMethodName")
+      )
+
+instance Prelude.Hashable FeaturizationMethod where
+  hashWithSalt _salt FeaturizationMethod' {..} =
+    _salt
+      `Prelude.hashWithSalt` featurizationMethodParameters
+      `Prelude.hashWithSalt` featurizationMethodName
+
+instance Prelude.NFData FeaturizationMethod where
+  rnf FeaturizationMethod' {..} =
+    Prelude.rnf featurizationMethodParameters
+      `Prelude.seq` Prelude.rnf featurizationMethodName
+
+instance Data.ToJSON FeaturizationMethod where
+  toJSON FeaturizationMethod' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FeaturizationMethodParameters" Data..=)
+              Prelude.<$> featurizationMethodParameters,
+            Prelude.Just
+              ( "FeaturizationMethodName"
+                  Data..= featurizationMethodName
+              )
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/FeaturizationMethodName.hs b/gen/Amazonka/Forecast/Types/FeaturizationMethodName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/FeaturizationMethodName.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.FeaturizationMethodName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.FeaturizationMethodName
+  ( FeaturizationMethodName
+      ( ..,
+        FeaturizationMethodName_Filling
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FeaturizationMethodName = FeaturizationMethodName'
+  { fromFeaturizationMethodName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FeaturizationMethodName_Filling :: FeaturizationMethodName
+pattern FeaturizationMethodName_Filling = FeaturizationMethodName' "filling"
+
+{-# COMPLETE
+  FeaturizationMethodName_Filling,
+  FeaturizationMethodName'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/Filter.hs b/gen/Amazonka/Forecast/Types/Filter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Filter.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Filter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Filter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.FilterConditionString
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a filter for choosing a subset of objects. Each filter
+-- consists of a condition and a match statement. The condition is either
+-- @IS@ or @IS_NOT@, which specifies whether to include or exclude the
+-- objects that match the statement, respectively. The match statement
+-- consists of a key and a value.
+--
+-- /See:/ 'newFilter' smart constructor.
+data Filter = Filter'
+  { -- | The name of the parameter to filter on.
+    key :: Prelude.Text,
+    -- | The value to match.
+    value :: Prelude.Text,
+    -- | The condition to apply. To include the objects that match the statement,
+    -- specify @IS@. To exclude matching objects, specify @IS_NOT@.
+    condition :: FilterConditionString
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Filter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'filter_key' - The name of the parameter to filter on.
+--
+-- 'value', 'filter_value' - The value to match.
+--
+-- 'condition', 'filter_condition' - The condition to apply. To include the objects that match the statement,
+-- specify @IS@. To exclude matching objects, specify @IS_NOT@.
+newFilter ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  -- | 'condition'
+  FilterConditionString ->
+  Filter
+newFilter pKey_ pValue_ pCondition_ =
+  Filter'
+    { key = pKey_,
+      value = pValue_,
+      condition = pCondition_
+    }
+
+-- | The name of the parameter to filter on.
+filter_key :: Lens.Lens' Filter Prelude.Text
+filter_key = Lens.lens (\Filter' {key} -> key) (\s@Filter' {} a -> s {key = a} :: Filter)
+
+-- | The value to match.
+filter_value :: Lens.Lens' Filter Prelude.Text
+filter_value = Lens.lens (\Filter' {value} -> value) (\s@Filter' {} a -> s {value = a} :: Filter)
+
+-- | The condition to apply. To include the objects that match the statement,
+-- specify @IS@. To exclude matching objects, specify @IS_NOT@.
+filter_condition :: Lens.Lens' Filter FilterConditionString
+filter_condition = Lens.lens (\Filter' {condition} -> condition) (\s@Filter' {} a -> s {condition = a} :: Filter)
+
+instance Prelude.Hashable Filter where
+  hashWithSalt _salt Filter' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` condition
+
+instance Prelude.NFData Filter where
+  rnf Filter' {..} =
+    Prelude.rnf key
+      `Prelude.seq` Prelude.rnf value
+      `Prelude.seq` Prelude.rnf condition
+
+instance Data.ToJSON Filter where
+  toJSON Filter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value),
+            Prelude.Just ("Condition" Data..= condition)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/FilterConditionString.hs b/gen/Amazonka/Forecast/Types/FilterConditionString.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/FilterConditionString.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.FilterConditionString
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.FilterConditionString
+  ( FilterConditionString
+      ( ..,
+        FilterConditionString_IS,
+        FilterConditionString_IS_NOT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FilterConditionString = FilterConditionString'
+  { fromFilterConditionString ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FilterConditionString_IS :: FilterConditionString
+pattern FilterConditionString_IS = FilterConditionString' "IS"
+
+pattern FilterConditionString_IS_NOT :: FilterConditionString
+pattern FilterConditionString_IS_NOT = FilterConditionString' "IS_NOT"
+
+{-# COMPLETE
+  FilterConditionString_IS,
+  FilterConditionString_IS_NOT,
+  FilterConditionString'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/ForecastExportJobSummary.hs b/gen/Amazonka/Forecast/Types/ForecastExportJobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ForecastExportJobSummary.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ForecastExportJobSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ForecastExportJobSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.DataDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the forecast export job properties used in the
+-- ListForecastExportJobs operation. To get the complete set of properties,
+-- call the DescribeForecastExportJob operation, and provide the listed
+-- @ForecastExportJobArn@.
+--
+-- /See:/ 'newForecastExportJobSummary' smart constructor.
+data ForecastExportJobSummary = ForecastExportJobSummary'
+  { -- | When the forecast export job was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+    -- the forecast is exported.
+    destination :: Prelude.Maybe DataDestination,
+    -- | The Amazon Resource Name (ARN) of the forecast export job.
+    forecastExportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the forecast export job.
+    forecastExportJobName :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the forecast export job. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the forecast export job must be @ACTIVE@ before you can
+    -- access the forecast in your S3 bucket.
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ForecastExportJobSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'forecastExportJobSummary_creationTime' - When the forecast export job was created.
+--
+-- 'destination', 'forecastExportJobSummary_destination' - The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+-- the forecast is exported.
+--
+-- 'forecastExportJobArn', 'forecastExportJobSummary_forecastExportJobArn' - The Amazon Resource Name (ARN) of the forecast export job.
+--
+-- 'forecastExportJobName', 'forecastExportJobSummary_forecastExportJobName' - The name of the forecast export job.
+--
+-- 'lastModificationTime', 'forecastExportJobSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'forecastExportJobSummary_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'forecastExportJobSummary_status' - The status of the forecast export job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the forecast export job must be @ACTIVE@ before you can
+-- access the forecast in your S3 bucket.
+newForecastExportJobSummary ::
+  ForecastExportJobSummary
+newForecastExportJobSummary =
+  ForecastExportJobSummary'
+    { creationTime =
+        Prelude.Nothing,
+      destination = Prelude.Nothing,
+      forecastExportJobArn = Prelude.Nothing,
+      forecastExportJobName = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | When the forecast export job was created.
+forecastExportJobSummary_creationTime :: Lens.Lens' ForecastExportJobSummary (Prelude.Maybe Prelude.UTCTime)
+forecastExportJobSummary_creationTime = Lens.lens (\ForecastExportJobSummary' {creationTime} -> creationTime) (\s@ForecastExportJobSummary' {} a -> s {creationTime = a} :: ForecastExportJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+-- the forecast is exported.
+forecastExportJobSummary_destination :: Lens.Lens' ForecastExportJobSummary (Prelude.Maybe DataDestination)
+forecastExportJobSummary_destination = Lens.lens (\ForecastExportJobSummary' {destination} -> destination) (\s@ForecastExportJobSummary' {} a -> s {destination = a} :: ForecastExportJobSummary)
+
+-- | The Amazon Resource Name (ARN) of the forecast export job.
+forecastExportJobSummary_forecastExportJobArn :: Lens.Lens' ForecastExportJobSummary (Prelude.Maybe Prelude.Text)
+forecastExportJobSummary_forecastExportJobArn = Lens.lens (\ForecastExportJobSummary' {forecastExportJobArn} -> forecastExportJobArn) (\s@ForecastExportJobSummary' {} a -> s {forecastExportJobArn = a} :: ForecastExportJobSummary)
+
+-- | The name of the forecast export job.
+forecastExportJobSummary_forecastExportJobName :: Lens.Lens' ForecastExportJobSummary (Prelude.Maybe Prelude.Text)
+forecastExportJobSummary_forecastExportJobName = Lens.lens (\ForecastExportJobSummary' {forecastExportJobName} -> forecastExportJobName) (\s@ForecastExportJobSummary' {} a -> s {forecastExportJobName = a} :: ForecastExportJobSummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+forecastExportJobSummary_lastModificationTime :: Lens.Lens' ForecastExportJobSummary (Prelude.Maybe Prelude.UTCTime)
+forecastExportJobSummary_lastModificationTime = Lens.lens (\ForecastExportJobSummary' {lastModificationTime} -> lastModificationTime) (\s@ForecastExportJobSummary' {} a -> s {lastModificationTime = a} :: ForecastExportJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+forecastExportJobSummary_message :: Lens.Lens' ForecastExportJobSummary (Prelude.Maybe Prelude.Text)
+forecastExportJobSummary_message = Lens.lens (\ForecastExportJobSummary' {message} -> message) (\s@ForecastExportJobSummary' {} a -> s {message = a} :: ForecastExportJobSummary)
+
+-- | The status of the forecast export job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the forecast export job must be @ACTIVE@ before you can
+-- access the forecast in your S3 bucket.
+forecastExportJobSummary_status :: Lens.Lens' ForecastExportJobSummary (Prelude.Maybe Prelude.Text)
+forecastExportJobSummary_status = Lens.lens (\ForecastExportJobSummary' {status} -> status) (\s@ForecastExportJobSummary' {} a -> s {status = a} :: ForecastExportJobSummary)
+
+instance Data.FromJSON ForecastExportJobSummary where
+  parseJSON =
+    Data.withObject
+      "ForecastExportJobSummary"
+      ( \x ->
+          ForecastExportJobSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "Destination")
+            Prelude.<*> (x Data..:? "ForecastExportJobArn")
+            Prelude.<*> (x Data..:? "ForecastExportJobName")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ForecastExportJobSummary where
+  hashWithSalt _salt ForecastExportJobSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` forecastExportJobArn
+      `Prelude.hashWithSalt` forecastExportJobName
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ForecastExportJobSummary where
+  rnf ForecastExportJobSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf forecastExportJobArn
+      `Prelude.seq` Prelude.rnf forecastExportJobName
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/ForecastSummary.hs b/gen/Amazonka/Forecast/Types/ForecastSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ForecastSummary.hs
@@ -0,0 +1,241 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ForecastSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ForecastSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the forecast properties used in the ListForecasts
+-- operation. To get the complete set of properties, call the
+-- DescribeForecast operation, and provide the @ForecastArn@ that is listed
+-- in the summary.
+--
+-- /See:/ 'newForecastSummary' smart constructor.
+data ForecastSummary = ForecastSummary'
+  { -- | Whether the Forecast was created from an AutoPredictor.
+    createdUsingAutoPredictor :: Prelude.Maybe Prelude.Bool,
+    -- | When the forecast creation task was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the dataset group that provided the
+    -- data used to train the predictor.
+    datasetGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the forecast.
+    forecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the forecast.
+    forecastName :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the predictor used to generate the forecast.
+    predictorArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the forecast. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the forecast must be @ACTIVE@ before you can query or
+    -- export the forecast.
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ForecastSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdUsingAutoPredictor', 'forecastSummary_createdUsingAutoPredictor' - Whether the Forecast was created from an AutoPredictor.
+--
+-- 'creationTime', 'forecastSummary_creationTime' - When the forecast creation task was created.
+--
+-- 'datasetGroupArn', 'forecastSummary_datasetGroupArn' - The Amazon Resource Name (ARN) of the dataset group that provided the
+-- data used to train the predictor.
+--
+-- 'forecastArn', 'forecastSummary_forecastArn' - The ARN of the forecast.
+--
+-- 'forecastName', 'forecastSummary_forecastName' - The name of the forecast.
+--
+-- 'lastModificationTime', 'forecastSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'forecastSummary_message' - If an error occurred, an informational message about the error.
+--
+-- 'predictorArn', 'forecastSummary_predictorArn' - The ARN of the predictor used to generate the forecast.
+--
+-- 'status', 'forecastSummary_status' - The status of the forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the forecast must be @ACTIVE@ before you can query or
+-- export the forecast.
+newForecastSummary ::
+  ForecastSummary
+newForecastSummary =
+  ForecastSummary'
+    { createdUsingAutoPredictor =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      datasetGroupArn = Prelude.Nothing,
+      forecastArn = Prelude.Nothing,
+      forecastName = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      predictorArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Whether the Forecast was created from an AutoPredictor.
+forecastSummary_createdUsingAutoPredictor :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.Bool)
+forecastSummary_createdUsingAutoPredictor = Lens.lens (\ForecastSummary' {createdUsingAutoPredictor} -> createdUsingAutoPredictor) (\s@ForecastSummary' {} a -> s {createdUsingAutoPredictor = a} :: ForecastSummary)
+
+-- | When the forecast creation task was created.
+forecastSummary_creationTime :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.UTCTime)
+forecastSummary_creationTime = Lens.lens (\ForecastSummary' {creationTime} -> creationTime) (\s@ForecastSummary' {} a -> s {creationTime = a} :: ForecastSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the dataset group that provided the
+-- data used to train the predictor.
+forecastSummary_datasetGroupArn :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.Text)
+forecastSummary_datasetGroupArn = Lens.lens (\ForecastSummary' {datasetGroupArn} -> datasetGroupArn) (\s@ForecastSummary' {} a -> s {datasetGroupArn = a} :: ForecastSummary)
+
+-- | The ARN of the forecast.
+forecastSummary_forecastArn :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.Text)
+forecastSummary_forecastArn = Lens.lens (\ForecastSummary' {forecastArn} -> forecastArn) (\s@ForecastSummary' {} a -> s {forecastArn = a} :: ForecastSummary)
+
+-- | The name of the forecast.
+forecastSummary_forecastName :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.Text)
+forecastSummary_forecastName = Lens.lens (\ForecastSummary' {forecastName} -> forecastName) (\s@ForecastSummary' {} a -> s {forecastName = a} :: ForecastSummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+forecastSummary_lastModificationTime :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.UTCTime)
+forecastSummary_lastModificationTime = Lens.lens (\ForecastSummary' {lastModificationTime} -> lastModificationTime) (\s@ForecastSummary' {} a -> s {lastModificationTime = a} :: ForecastSummary) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+forecastSummary_message :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.Text)
+forecastSummary_message = Lens.lens (\ForecastSummary' {message} -> message) (\s@ForecastSummary' {} a -> s {message = a} :: ForecastSummary)
+
+-- | The ARN of the predictor used to generate the forecast.
+forecastSummary_predictorArn :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.Text)
+forecastSummary_predictorArn = Lens.lens (\ForecastSummary' {predictorArn} -> predictorArn) (\s@ForecastSummary' {} a -> s {predictorArn = a} :: ForecastSummary)
+
+-- | The status of the forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the forecast must be @ACTIVE@ before you can query or
+-- export the forecast.
+forecastSummary_status :: Lens.Lens' ForecastSummary (Prelude.Maybe Prelude.Text)
+forecastSummary_status = Lens.lens (\ForecastSummary' {status} -> status) (\s@ForecastSummary' {} a -> s {status = a} :: ForecastSummary)
+
+instance Data.FromJSON ForecastSummary where
+  parseJSON =
+    Data.withObject
+      "ForecastSummary"
+      ( \x ->
+          ForecastSummary'
+            Prelude.<$> (x Data..:? "CreatedUsingAutoPredictor")
+            Prelude.<*> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "DatasetGroupArn")
+            Prelude.<*> (x Data..:? "ForecastArn")
+            Prelude.<*> (x Data..:? "ForecastName")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "PredictorArn")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable ForecastSummary where
+  hashWithSalt _salt ForecastSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdUsingAutoPredictor
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` datasetGroupArn
+      `Prelude.hashWithSalt` forecastArn
+      `Prelude.hashWithSalt` forecastName
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` predictorArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ForecastSummary where
+  rnf ForecastSummary' {..} =
+    Prelude.rnf createdUsingAutoPredictor
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf datasetGroupArn
+      `Prelude.seq` Prelude.rnf forecastArn
+      `Prelude.seq` Prelude.rnf forecastName
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/HyperParameterTuningJobConfig.hs b/gen/Amazonka/Forecast/Types/HyperParameterTuningJobConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/HyperParameterTuningJobConfig.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.HyperParameterTuningJobConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.HyperParameterTuningJobConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.ParameterRanges
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration information for a hyperparameter tuning job. You specify
+-- this object in the CreatePredictor request.
+--
+-- A /hyperparameter/ is a parameter that governs the model training
+-- process. You set hyperparameters before training starts, unlike model
+-- parameters, which are determined during training. The values of the
+-- hyperparameters effect which values are chosen for the model parameters.
+--
+-- In a /hyperparameter tuning job/, Amazon Forecast chooses the set of
+-- hyperparameter values that optimize a specified metric. Forecast
+-- accomplishes this by running many training jobs over a range of
+-- hyperparameter values. The optimum set of values depends on the
+-- algorithm, the training data, and the specified metric objective.
+--
+-- /See:/ 'newHyperParameterTuningJobConfig' smart constructor.
+data HyperParameterTuningJobConfig = HyperParameterTuningJobConfig'
+  { -- | Specifies the ranges of valid values for the hyperparameters.
+    parameterRanges :: Prelude.Maybe ParameterRanges
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HyperParameterTuningJobConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'parameterRanges', 'hyperParameterTuningJobConfig_parameterRanges' - Specifies the ranges of valid values for the hyperparameters.
+newHyperParameterTuningJobConfig ::
+  HyperParameterTuningJobConfig
+newHyperParameterTuningJobConfig =
+  HyperParameterTuningJobConfig'
+    { parameterRanges =
+        Prelude.Nothing
+    }
+
+-- | Specifies the ranges of valid values for the hyperparameters.
+hyperParameterTuningJobConfig_parameterRanges :: Lens.Lens' HyperParameterTuningJobConfig (Prelude.Maybe ParameterRanges)
+hyperParameterTuningJobConfig_parameterRanges = Lens.lens (\HyperParameterTuningJobConfig' {parameterRanges} -> parameterRanges) (\s@HyperParameterTuningJobConfig' {} a -> s {parameterRanges = a} :: HyperParameterTuningJobConfig)
+
+instance Data.FromJSON HyperParameterTuningJobConfig where
+  parseJSON =
+    Data.withObject
+      "HyperParameterTuningJobConfig"
+      ( \x ->
+          HyperParameterTuningJobConfig'
+            Prelude.<$> (x Data..:? "ParameterRanges")
+      )
+
+instance
+  Prelude.Hashable
+    HyperParameterTuningJobConfig
+  where
+  hashWithSalt _salt HyperParameterTuningJobConfig' {..} =
+    _salt `Prelude.hashWithSalt` parameterRanges
+
+instance Prelude.NFData HyperParameterTuningJobConfig where
+  rnf HyperParameterTuningJobConfig' {..} =
+    Prelude.rnf parameterRanges
+
+instance Data.ToJSON HyperParameterTuningJobConfig where
+  toJSON HyperParameterTuningJobConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ParameterRanges" Data..=)
+              Prelude.<$> parameterRanges
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/InputDataConfig.hs b/gen/Amazonka/Forecast/Types/InputDataConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/InputDataConfig.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.InputDataConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.InputDataConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.SupplementaryFeature
+import qualified Amazonka.Prelude as Prelude
+
+-- | This object belongs to the CreatePredictor operation. If you created
+-- your predictor with CreateAutoPredictor, see DataConfig.
+--
+-- The data used to train a predictor. The data includes a dataset group
+-- and any supplementary features. You specify this object in the
+-- CreatePredictor request.
+--
+-- /See:/ 'newInputDataConfig' smart constructor.
+data InputDataConfig = InputDataConfig'
+  { -- | An array of supplementary features. The only supported feature is a
+    -- holiday calendar.
+    supplementaryFeatures :: Prelude.Maybe (Prelude.NonEmpty SupplementaryFeature),
+    -- | The Amazon Resource Name (ARN) of the dataset group.
+    datasetGroupArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InputDataConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'supplementaryFeatures', 'inputDataConfig_supplementaryFeatures' - An array of supplementary features. The only supported feature is a
+-- holiday calendar.
+--
+-- 'datasetGroupArn', 'inputDataConfig_datasetGroupArn' - The Amazon Resource Name (ARN) of the dataset group.
+newInputDataConfig ::
+  -- | 'datasetGroupArn'
+  Prelude.Text ->
+  InputDataConfig
+newInputDataConfig pDatasetGroupArn_ =
+  InputDataConfig'
+    { supplementaryFeatures =
+        Prelude.Nothing,
+      datasetGroupArn = pDatasetGroupArn_
+    }
+
+-- | An array of supplementary features. The only supported feature is a
+-- holiday calendar.
+inputDataConfig_supplementaryFeatures :: Lens.Lens' InputDataConfig (Prelude.Maybe (Prelude.NonEmpty SupplementaryFeature))
+inputDataConfig_supplementaryFeatures = Lens.lens (\InputDataConfig' {supplementaryFeatures} -> supplementaryFeatures) (\s@InputDataConfig' {} a -> s {supplementaryFeatures = a} :: InputDataConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the dataset group.
+inputDataConfig_datasetGroupArn :: Lens.Lens' InputDataConfig Prelude.Text
+inputDataConfig_datasetGroupArn = Lens.lens (\InputDataConfig' {datasetGroupArn} -> datasetGroupArn) (\s@InputDataConfig' {} a -> s {datasetGroupArn = a} :: InputDataConfig)
+
+instance Data.FromJSON InputDataConfig where
+  parseJSON =
+    Data.withObject
+      "InputDataConfig"
+      ( \x ->
+          InputDataConfig'
+            Prelude.<$> (x Data..:? "SupplementaryFeatures")
+            Prelude.<*> (x Data..: "DatasetGroupArn")
+      )
+
+instance Prelude.Hashable InputDataConfig where
+  hashWithSalt _salt InputDataConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` supplementaryFeatures
+      `Prelude.hashWithSalt` datasetGroupArn
+
+instance Prelude.NFData InputDataConfig where
+  rnf InputDataConfig' {..} =
+    Prelude.rnf supplementaryFeatures
+      `Prelude.seq` Prelude.rnf datasetGroupArn
+
+instance Data.ToJSON InputDataConfig where
+  toJSON InputDataConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SupplementaryFeatures" Data..=)
+              Prelude.<$> supplementaryFeatures,
+            Prelude.Just
+              ("DatasetGroupArn" Data..= datasetGroupArn)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/IntegerParameterRange.hs b/gen/Amazonka/Forecast/Types/IntegerParameterRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/IntegerParameterRange.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.IntegerParameterRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.IntegerParameterRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.ScalingType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies an integer hyperparameter and it\'s range of tunable values.
+-- This object is part of the ParameterRanges object.
+--
+-- /See:/ 'newIntegerParameterRange' smart constructor.
+data IntegerParameterRange = IntegerParameterRange'
+  { -- | The scale that hyperparameter tuning uses to search the hyperparameter
+    -- range. Valid values:
+    --
+    -- [Auto]
+    --     Amazon Forecast hyperparameter tuning chooses the best scale for the
+    --     hyperparameter.
+    --
+    -- [Linear]
+    --     Hyperparameter tuning searches the values in the hyperparameter
+    --     range by using a linear scale.
+    --
+    -- [Logarithmic]
+    --     Hyperparameter tuning searches the values in the hyperparameter
+    --     range by using a logarithmic scale.
+    --
+    --     Logarithmic scaling works only for ranges that have values greater
+    --     than 0.
+    --
+    -- [ReverseLogarithmic]
+    --     Not supported for @IntegerParameterRange@.
+    --
+    --     Reverse logarithmic scaling works only for ranges that are entirely
+    --     within the range 0 \<= x \< 1.0.
+    --
+    -- For information about choosing a hyperparameter scale, see
+    -- <http://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html#scaling-type Hyperparameter Scaling>.
+    -- One of the following values:
+    scalingType :: Prelude.Maybe ScalingType,
+    -- | The name of the hyperparameter to tune.
+    name :: Prelude.Text,
+    -- | The maximum tunable value of the hyperparameter.
+    maxValue :: Prelude.Int,
+    -- | The minimum tunable value of the hyperparameter.
+    minValue :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntegerParameterRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scalingType', 'integerParameterRange_scalingType' - The scale that hyperparameter tuning uses to search the hyperparameter
+-- range. Valid values:
+--
+-- [Auto]
+--     Amazon Forecast hyperparameter tuning chooses the best scale for the
+--     hyperparameter.
+--
+-- [Linear]
+--     Hyperparameter tuning searches the values in the hyperparameter
+--     range by using a linear scale.
+--
+-- [Logarithmic]
+--     Hyperparameter tuning searches the values in the hyperparameter
+--     range by using a logarithmic scale.
+--
+--     Logarithmic scaling works only for ranges that have values greater
+--     than 0.
+--
+-- [ReverseLogarithmic]
+--     Not supported for @IntegerParameterRange@.
+--
+--     Reverse logarithmic scaling works only for ranges that are entirely
+--     within the range 0 \<= x \< 1.0.
+--
+-- For information about choosing a hyperparameter scale, see
+-- <http://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html#scaling-type Hyperparameter Scaling>.
+-- One of the following values:
+--
+-- 'name', 'integerParameterRange_name' - The name of the hyperparameter to tune.
+--
+-- 'maxValue', 'integerParameterRange_maxValue' - The maximum tunable value of the hyperparameter.
+--
+-- 'minValue', 'integerParameterRange_minValue' - The minimum tunable value of the hyperparameter.
+newIntegerParameterRange ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'maxValue'
+  Prelude.Int ->
+  -- | 'minValue'
+  Prelude.Int ->
+  IntegerParameterRange
+newIntegerParameterRange pName_ pMaxValue_ pMinValue_ =
+  IntegerParameterRange'
+    { scalingType =
+        Prelude.Nothing,
+      name = pName_,
+      maxValue = pMaxValue_,
+      minValue = pMinValue_
+    }
+
+-- | The scale that hyperparameter tuning uses to search the hyperparameter
+-- range. Valid values:
+--
+-- [Auto]
+--     Amazon Forecast hyperparameter tuning chooses the best scale for the
+--     hyperparameter.
+--
+-- [Linear]
+--     Hyperparameter tuning searches the values in the hyperparameter
+--     range by using a linear scale.
+--
+-- [Logarithmic]
+--     Hyperparameter tuning searches the values in the hyperparameter
+--     range by using a logarithmic scale.
+--
+--     Logarithmic scaling works only for ranges that have values greater
+--     than 0.
+--
+-- [ReverseLogarithmic]
+--     Not supported for @IntegerParameterRange@.
+--
+--     Reverse logarithmic scaling works only for ranges that are entirely
+--     within the range 0 \<= x \< 1.0.
+--
+-- For information about choosing a hyperparameter scale, see
+-- <http://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html#scaling-type Hyperparameter Scaling>.
+-- One of the following values:
+integerParameterRange_scalingType :: Lens.Lens' IntegerParameterRange (Prelude.Maybe ScalingType)
+integerParameterRange_scalingType = Lens.lens (\IntegerParameterRange' {scalingType} -> scalingType) (\s@IntegerParameterRange' {} a -> s {scalingType = a} :: IntegerParameterRange)
+
+-- | The name of the hyperparameter to tune.
+integerParameterRange_name :: Lens.Lens' IntegerParameterRange Prelude.Text
+integerParameterRange_name = Lens.lens (\IntegerParameterRange' {name} -> name) (\s@IntegerParameterRange' {} a -> s {name = a} :: IntegerParameterRange)
+
+-- | The maximum tunable value of the hyperparameter.
+integerParameterRange_maxValue :: Lens.Lens' IntegerParameterRange Prelude.Int
+integerParameterRange_maxValue = Lens.lens (\IntegerParameterRange' {maxValue} -> maxValue) (\s@IntegerParameterRange' {} a -> s {maxValue = a} :: IntegerParameterRange)
+
+-- | The minimum tunable value of the hyperparameter.
+integerParameterRange_minValue :: Lens.Lens' IntegerParameterRange Prelude.Int
+integerParameterRange_minValue = Lens.lens (\IntegerParameterRange' {minValue} -> minValue) (\s@IntegerParameterRange' {} a -> s {minValue = a} :: IntegerParameterRange)
+
+instance Data.FromJSON IntegerParameterRange where
+  parseJSON =
+    Data.withObject
+      "IntegerParameterRange"
+      ( \x ->
+          IntegerParameterRange'
+            Prelude.<$> (x Data..:? "ScalingType")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "MaxValue")
+            Prelude.<*> (x Data..: "MinValue")
+      )
+
+instance Prelude.Hashable IntegerParameterRange where
+  hashWithSalt _salt IntegerParameterRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` scalingType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` maxValue
+      `Prelude.hashWithSalt` minValue
+
+instance Prelude.NFData IntegerParameterRange where
+  rnf IntegerParameterRange' {..} =
+    Prelude.rnf scalingType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf maxValue
+      `Prelude.seq` Prelude.rnf minValue
+
+instance Data.ToJSON IntegerParameterRange where
+  toJSON IntegerParameterRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ScalingType" Data..=) Prelude.<$> scalingType,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("MaxValue" Data..= maxValue),
+            Prelude.Just ("MinValue" Data..= minValue)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/MetricResult.hs b/gen/Amazonka/Forecast/Types/MetricResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/MetricResult.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.MetricResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.MetricResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | An individual metric Forecast calculated when monitoring predictor
+-- usage. You can compare the value for this metric to the metric\'s value
+-- in the Baseline to see how your predictor\'s performance is changing.
+--
+-- For more information about metrics generated by Forecast see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/metrics.html Evaluating Predictor Accuracy>
+--
+-- /See:/ 'newMetricResult' smart constructor.
+data MetricResult = MetricResult'
+  { -- | The name of the metric.
+    metricName :: Prelude.Maybe Prelude.Text,
+    -- | The value for the metric.
+    metricValue :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metricName', 'metricResult_metricName' - The name of the metric.
+--
+-- 'metricValue', 'metricResult_metricValue' - The value for the metric.
+newMetricResult ::
+  MetricResult
+newMetricResult =
+  MetricResult'
+    { metricName = Prelude.Nothing,
+      metricValue = Prelude.Nothing
+    }
+
+-- | The name of the metric.
+metricResult_metricName :: Lens.Lens' MetricResult (Prelude.Maybe Prelude.Text)
+metricResult_metricName = Lens.lens (\MetricResult' {metricName} -> metricName) (\s@MetricResult' {} a -> s {metricName = a} :: MetricResult)
+
+-- | The value for the metric.
+metricResult_metricValue :: Lens.Lens' MetricResult (Prelude.Maybe Prelude.Double)
+metricResult_metricValue = Lens.lens (\MetricResult' {metricValue} -> metricValue) (\s@MetricResult' {} a -> s {metricValue = a} :: MetricResult)
+
+instance Data.FromJSON MetricResult where
+  parseJSON =
+    Data.withObject
+      "MetricResult"
+      ( \x ->
+          MetricResult'
+            Prelude.<$> (x Data..:? "MetricName")
+            Prelude.<*> (x Data..:? "MetricValue")
+      )
+
+instance Prelude.Hashable MetricResult where
+  hashWithSalt _salt MetricResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` metricName
+      `Prelude.hashWithSalt` metricValue
+
+instance Prelude.NFData MetricResult where
+  rnf MetricResult' {..} =
+    Prelude.rnf metricName
+      `Prelude.seq` Prelude.rnf metricValue
diff --git a/gen/Amazonka/Forecast/Types/Metrics.hs b/gen/Amazonka/Forecast/Types/Metrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Metrics.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Metrics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Metrics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.ErrorMetric
+import Amazonka.Forecast.Types.WeightedQuantileLoss
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides metrics that are used to evaluate the performance of a
+-- predictor. This object is part of the WindowSummary object.
+--
+-- /See:/ 'newMetrics' smart constructor.
+data Metrics = Metrics'
+  { -- | The average value of all weighted quantile losses.
+    averageWeightedQuantileLoss :: Prelude.Maybe Prelude.Double,
+    -- | Provides detailed error metrics for each forecast type. Metrics include
+    -- root-mean square-error (RMSE), mean absolute percentage error (MAPE),
+    -- mean absolute scaled error (MASE), and weighted average percentage error
+    -- (WAPE).
+    errorMetrics :: Prelude.Maybe [ErrorMetric],
+    -- | The root-mean-square error (RMSE).
+    rmse :: Prelude.Maybe Prelude.Double,
+    -- | An array of weighted quantile losses. Quantiles divide a probability
+    -- distribution into regions of equal probability. The distribution in this
+    -- case is the loss function.
+    weightedQuantileLosses :: Prelude.Maybe [WeightedQuantileLoss]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Metrics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'averageWeightedQuantileLoss', 'metrics_averageWeightedQuantileLoss' - The average value of all weighted quantile losses.
+--
+-- 'errorMetrics', 'metrics_errorMetrics' - Provides detailed error metrics for each forecast type. Metrics include
+-- root-mean square-error (RMSE), mean absolute percentage error (MAPE),
+-- mean absolute scaled error (MASE), and weighted average percentage error
+-- (WAPE).
+--
+-- 'rmse', 'metrics_rmse' - The root-mean-square error (RMSE).
+--
+-- 'weightedQuantileLosses', 'metrics_weightedQuantileLosses' - An array of weighted quantile losses. Quantiles divide a probability
+-- distribution into regions of equal probability. The distribution in this
+-- case is the loss function.
+newMetrics ::
+  Metrics
+newMetrics =
+  Metrics'
+    { averageWeightedQuantileLoss =
+        Prelude.Nothing,
+      errorMetrics = Prelude.Nothing,
+      rmse = Prelude.Nothing,
+      weightedQuantileLosses = Prelude.Nothing
+    }
+
+-- | The average value of all weighted quantile losses.
+metrics_averageWeightedQuantileLoss :: Lens.Lens' Metrics (Prelude.Maybe Prelude.Double)
+metrics_averageWeightedQuantileLoss = Lens.lens (\Metrics' {averageWeightedQuantileLoss} -> averageWeightedQuantileLoss) (\s@Metrics' {} a -> s {averageWeightedQuantileLoss = a} :: Metrics)
+
+-- | Provides detailed error metrics for each forecast type. Metrics include
+-- root-mean square-error (RMSE), mean absolute percentage error (MAPE),
+-- mean absolute scaled error (MASE), and weighted average percentage error
+-- (WAPE).
+metrics_errorMetrics :: Lens.Lens' Metrics (Prelude.Maybe [ErrorMetric])
+metrics_errorMetrics = Lens.lens (\Metrics' {errorMetrics} -> errorMetrics) (\s@Metrics' {} a -> s {errorMetrics = a} :: Metrics) Prelude.. Lens.mapping Lens.coerced
+
+-- | The root-mean-square error (RMSE).
+metrics_rmse :: Lens.Lens' Metrics (Prelude.Maybe Prelude.Double)
+metrics_rmse = Lens.lens (\Metrics' {rmse} -> rmse) (\s@Metrics' {} a -> s {rmse = a} :: Metrics)
+
+-- | An array of weighted quantile losses. Quantiles divide a probability
+-- distribution into regions of equal probability. The distribution in this
+-- case is the loss function.
+metrics_weightedQuantileLosses :: Lens.Lens' Metrics (Prelude.Maybe [WeightedQuantileLoss])
+metrics_weightedQuantileLosses = Lens.lens (\Metrics' {weightedQuantileLosses} -> weightedQuantileLosses) (\s@Metrics' {} a -> s {weightedQuantileLosses = a} :: Metrics) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Metrics where
+  parseJSON =
+    Data.withObject
+      "Metrics"
+      ( \x ->
+          Metrics'
+            Prelude.<$> (x Data..:? "AverageWeightedQuantileLoss")
+            Prelude.<*> (x Data..:? "ErrorMetrics" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "RMSE")
+            Prelude.<*> ( x
+                            Data..:? "WeightedQuantileLosses"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable Metrics where
+  hashWithSalt _salt Metrics' {..} =
+    _salt
+      `Prelude.hashWithSalt` averageWeightedQuantileLoss
+      `Prelude.hashWithSalt` errorMetrics
+      `Prelude.hashWithSalt` rmse
+      `Prelude.hashWithSalt` weightedQuantileLosses
+
+instance Prelude.NFData Metrics where
+  rnf Metrics' {..} =
+    Prelude.rnf averageWeightedQuantileLoss
+      `Prelude.seq` Prelude.rnf errorMetrics
+      `Prelude.seq` Prelude.rnf rmse
+      `Prelude.seq` Prelude.rnf weightedQuantileLosses
diff --git a/gen/Amazonka/Forecast/Types/MonitorConfig.hs b/gen/Amazonka/Forecast/Types/MonitorConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/MonitorConfig.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.MonitorConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.MonitorConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The configuration details for the predictor monitor.
+--
+-- /See:/ 'newMonitorConfig' smart constructor.
+data MonitorConfig = MonitorConfig'
+  { -- | The name of the monitor resource.
+    monitorName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonitorConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'monitorName', 'monitorConfig_monitorName' - The name of the monitor resource.
+newMonitorConfig ::
+  -- | 'monitorName'
+  Prelude.Text ->
+  MonitorConfig
+newMonitorConfig pMonitorName_ =
+  MonitorConfig' {monitorName = pMonitorName_}
+
+-- | The name of the monitor resource.
+monitorConfig_monitorName :: Lens.Lens' MonitorConfig Prelude.Text
+monitorConfig_monitorName = Lens.lens (\MonitorConfig' {monitorName} -> monitorName) (\s@MonitorConfig' {} a -> s {monitorName = a} :: MonitorConfig)
+
+instance Prelude.Hashable MonitorConfig where
+  hashWithSalt _salt MonitorConfig' {..} =
+    _salt `Prelude.hashWithSalt` monitorName
+
+instance Prelude.NFData MonitorConfig where
+  rnf MonitorConfig' {..} = Prelude.rnf monitorName
+
+instance Data.ToJSON MonitorConfig where
+  toJSON MonitorConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("MonitorName" Data..= monitorName)]
+      )
diff --git a/gen/Amazonka/Forecast/Types/MonitorDataSource.hs b/gen/Amazonka/Forecast/Types/MonitorDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/MonitorDataSource.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.MonitorDataSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.MonitorDataSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The source of the data the monitor used during the evaluation.
+--
+-- /See:/ 'newMonitorDataSource' smart constructor.
+data MonitorDataSource = MonitorDataSource'
+  { -- | The Amazon Resource Name (ARN) of the dataset import job used to import
+    -- the data that initiated the monitor evaluation.
+    datasetImportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the forecast the monitor used during
+    -- the evaluation.
+    forecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the predictor resource you are
+    -- monitoring.
+    predictorArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonitorDataSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetImportJobArn', 'monitorDataSource_datasetImportJobArn' - The Amazon Resource Name (ARN) of the dataset import job used to import
+-- the data that initiated the monitor evaluation.
+--
+-- 'forecastArn', 'monitorDataSource_forecastArn' - The Amazon Resource Name (ARN) of the forecast the monitor used during
+-- the evaluation.
+--
+-- 'predictorArn', 'monitorDataSource_predictorArn' - The Amazon Resource Name (ARN) of the predictor resource you are
+-- monitoring.
+newMonitorDataSource ::
+  MonitorDataSource
+newMonitorDataSource =
+  MonitorDataSource'
+    { datasetImportJobArn =
+        Prelude.Nothing,
+      forecastArn = Prelude.Nothing,
+      predictorArn = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the dataset import job used to import
+-- the data that initiated the monitor evaluation.
+monitorDataSource_datasetImportJobArn :: Lens.Lens' MonitorDataSource (Prelude.Maybe Prelude.Text)
+monitorDataSource_datasetImportJobArn = Lens.lens (\MonitorDataSource' {datasetImportJobArn} -> datasetImportJobArn) (\s@MonitorDataSource' {} a -> s {datasetImportJobArn = a} :: MonitorDataSource)
+
+-- | The Amazon Resource Name (ARN) of the forecast the monitor used during
+-- the evaluation.
+monitorDataSource_forecastArn :: Lens.Lens' MonitorDataSource (Prelude.Maybe Prelude.Text)
+monitorDataSource_forecastArn = Lens.lens (\MonitorDataSource' {forecastArn} -> forecastArn) (\s@MonitorDataSource' {} a -> s {forecastArn = a} :: MonitorDataSource)
+
+-- | The Amazon Resource Name (ARN) of the predictor resource you are
+-- monitoring.
+monitorDataSource_predictorArn :: Lens.Lens' MonitorDataSource (Prelude.Maybe Prelude.Text)
+monitorDataSource_predictorArn = Lens.lens (\MonitorDataSource' {predictorArn} -> predictorArn) (\s@MonitorDataSource' {} a -> s {predictorArn = a} :: MonitorDataSource)
+
+instance Data.FromJSON MonitorDataSource where
+  parseJSON =
+    Data.withObject
+      "MonitorDataSource"
+      ( \x ->
+          MonitorDataSource'
+            Prelude.<$> (x Data..:? "DatasetImportJobArn")
+            Prelude.<*> (x Data..:? "ForecastArn")
+            Prelude.<*> (x Data..:? "PredictorArn")
+      )
+
+instance Prelude.Hashable MonitorDataSource where
+  hashWithSalt _salt MonitorDataSource' {..} =
+    _salt
+      `Prelude.hashWithSalt` datasetImportJobArn
+      `Prelude.hashWithSalt` forecastArn
+      `Prelude.hashWithSalt` predictorArn
+
+instance Prelude.NFData MonitorDataSource where
+  rnf MonitorDataSource' {..} =
+    Prelude.rnf datasetImportJobArn
+      `Prelude.seq` Prelude.rnf forecastArn
+      `Prelude.seq` Prelude.rnf predictorArn
diff --git a/gen/Amazonka/Forecast/Types/MonitorInfo.hs b/gen/Amazonka/Forecast/Types/MonitorInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/MonitorInfo.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.MonitorInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.MonitorInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about the monitor resource.
+--
+-- /See:/ 'newMonitorInfo' smart constructor.
+data MonitorInfo = MonitorInfo'
+  { -- | The Amazon Resource Name (ARN) of the monitor resource.
+    monitorArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the monitor. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @ACTIVE_STOPPING@, @ACTIVE_STOPPED@
+    --
+    -- -   @UPDATE_IN_PROGRESS@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonitorInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'monitorArn', 'monitorInfo_monitorArn' - The Amazon Resource Name (ARN) of the monitor resource.
+--
+-- 'status', 'monitorInfo_status' - The status of the monitor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @ACTIVE_STOPPING@, @ACTIVE_STOPPED@
+--
+-- -   @UPDATE_IN_PROGRESS@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+newMonitorInfo ::
+  MonitorInfo
+newMonitorInfo =
+  MonitorInfo'
+    { monitorArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the monitor resource.
+monitorInfo_monitorArn :: Lens.Lens' MonitorInfo (Prelude.Maybe Prelude.Text)
+monitorInfo_monitorArn = Lens.lens (\MonitorInfo' {monitorArn} -> monitorArn) (\s@MonitorInfo' {} a -> s {monitorArn = a} :: MonitorInfo)
+
+-- | The status of the monitor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @ACTIVE_STOPPING@, @ACTIVE_STOPPED@
+--
+-- -   @UPDATE_IN_PROGRESS@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+monitorInfo_status :: Lens.Lens' MonitorInfo (Prelude.Maybe Prelude.Text)
+monitorInfo_status = Lens.lens (\MonitorInfo' {status} -> status) (\s@MonitorInfo' {} a -> s {status = a} :: MonitorInfo)
+
+instance Data.FromJSON MonitorInfo where
+  parseJSON =
+    Data.withObject
+      "MonitorInfo"
+      ( \x ->
+          MonitorInfo'
+            Prelude.<$> (x Data..:? "MonitorArn")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable MonitorInfo where
+  hashWithSalt _salt MonitorInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` monitorArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData MonitorInfo where
+  rnf MonitorInfo' {..} =
+    Prelude.rnf monitorArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/MonitorSummary.hs b/gen/Amazonka/Forecast/Types/MonitorSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/MonitorSummary.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.MonitorSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.MonitorSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the monitor properties used in the ListMonitors
+-- operation. To get a complete set of properties, call the DescribeMonitor
+-- operation, and provide the listed @MonitorArn@.
+--
+-- /See:/ 'newMonitorSummary' smart constructor.
+data MonitorSummary = MonitorSummary'
+  { -- | When the monitor resource was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The last time the monitor resource was modified. The timestamp depends
+    -- on the status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @STOPPED@ - When the resource stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the monitor creation finished or
+    --     failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the monitor resource.
+    monitorArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the monitor resource.
+    monitorName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the predictor being monitored.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the monitor. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @ACTIVE_STOPPING@, @ACTIVE_STOPPED@
+    --
+    -- -   @UPDATE_IN_PROGRESS@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonitorSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'monitorSummary_creationTime' - When the monitor resource was created.
+--
+-- 'lastModificationTime', 'monitorSummary_lastModificationTime' - The last time the monitor resource was modified. The timestamp depends
+-- on the status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @STOPPED@ - When the resource stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the monitor creation finished or
+--     failed.
+--
+-- 'monitorArn', 'monitorSummary_monitorArn' - The Amazon Resource Name (ARN) of the monitor resource.
+--
+-- 'monitorName', 'monitorSummary_monitorName' - The name of the monitor resource.
+--
+-- 'resourceArn', 'monitorSummary_resourceArn' - The Amazon Resource Name (ARN) of the predictor being monitored.
+--
+-- 'status', 'monitorSummary_status' - The status of the monitor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @ACTIVE_STOPPING@, @ACTIVE_STOPPED@
+--
+-- -   @UPDATE_IN_PROGRESS@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+newMonitorSummary ::
+  MonitorSummary
+newMonitorSummary =
+  MonitorSummary'
+    { creationTime = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      monitorArn = Prelude.Nothing,
+      monitorName = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | When the monitor resource was created.
+monitorSummary_creationTime :: Lens.Lens' MonitorSummary (Prelude.Maybe Prelude.UTCTime)
+monitorSummary_creationTime = Lens.lens (\MonitorSummary' {creationTime} -> creationTime) (\s@MonitorSummary' {} a -> s {creationTime = a} :: MonitorSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The last time the monitor resource was modified. The timestamp depends
+-- on the status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @STOPPED@ - When the resource stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the monitor creation finished or
+--     failed.
+monitorSummary_lastModificationTime :: Lens.Lens' MonitorSummary (Prelude.Maybe Prelude.UTCTime)
+monitorSummary_lastModificationTime = Lens.lens (\MonitorSummary' {lastModificationTime} -> lastModificationTime) (\s@MonitorSummary' {} a -> s {lastModificationTime = a} :: MonitorSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the monitor resource.
+monitorSummary_monitorArn :: Lens.Lens' MonitorSummary (Prelude.Maybe Prelude.Text)
+monitorSummary_monitorArn = Lens.lens (\MonitorSummary' {monitorArn} -> monitorArn) (\s@MonitorSummary' {} a -> s {monitorArn = a} :: MonitorSummary)
+
+-- | The name of the monitor resource.
+monitorSummary_monitorName :: Lens.Lens' MonitorSummary (Prelude.Maybe Prelude.Text)
+monitorSummary_monitorName = Lens.lens (\MonitorSummary' {monitorName} -> monitorName) (\s@MonitorSummary' {} a -> s {monitorName = a} :: MonitorSummary)
+
+-- | The Amazon Resource Name (ARN) of the predictor being monitored.
+monitorSummary_resourceArn :: Lens.Lens' MonitorSummary (Prelude.Maybe Prelude.Text)
+monitorSummary_resourceArn = Lens.lens (\MonitorSummary' {resourceArn} -> resourceArn) (\s@MonitorSummary' {} a -> s {resourceArn = a} :: MonitorSummary)
+
+-- | The status of the monitor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @ACTIVE_STOPPING@, @ACTIVE_STOPPED@
+--
+-- -   @UPDATE_IN_PROGRESS@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+monitorSummary_status :: Lens.Lens' MonitorSummary (Prelude.Maybe Prelude.Text)
+monitorSummary_status = Lens.lens (\MonitorSummary' {status} -> status) (\s@MonitorSummary' {} a -> s {status = a} :: MonitorSummary)
+
+instance Data.FromJSON MonitorSummary where
+  parseJSON =
+    Data.withObject
+      "MonitorSummary"
+      ( \x ->
+          MonitorSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "MonitorArn")
+            Prelude.<*> (x Data..:? "MonitorName")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable MonitorSummary where
+  hashWithSalt _salt MonitorSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` monitorArn
+      `Prelude.hashWithSalt` monitorName
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData MonitorSummary where
+  rnf MonitorSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf monitorArn
+      `Prelude.seq` Prelude.rnf monitorName
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/Month.hs b/gen/Amazonka/Forecast/Types/Month.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Month.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Month
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Month
+  ( Month
+      ( ..,
+        Month_APRIL,
+        Month_AUGUST,
+        Month_DECEMBER,
+        Month_FEBRUARY,
+        Month_JANUARY,
+        Month_JULY,
+        Month_JUNE,
+        Month_MARCH,
+        Month_MAY,
+        Month_NOVEMBER,
+        Month_OCTOBER,
+        Month_SEPTEMBER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Month = Month' {fromMonth :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Month_APRIL :: Month
+pattern Month_APRIL = Month' "APRIL"
+
+pattern Month_AUGUST :: Month
+pattern Month_AUGUST = Month' "AUGUST"
+
+pattern Month_DECEMBER :: Month
+pattern Month_DECEMBER = Month' "DECEMBER"
+
+pattern Month_FEBRUARY :: Month
+pattern Month_FEBRUARY = Month' "FEBRUARY"
+
+pattern Month_JANUARY :: Month
+pattern Month_JANUARY = Month' "JANUARY"
+
+pattern Month_JULY :: Month
+pattern Month_JULY = Month' "JULY"
+
+pattern Month_JUNE :: Month
+pattern Month_JUNE = Month' "JUNE"
+
+pattern Month_MARCH :: Month
+pattern Month_MARCH = Month' "MARCH"
+
+pattern Month_MAY :: Month
+pattern Month_MAY = Month' "MAY"
+
+pattern Month_NOVEMBER :: Month
+pattern Month_NOVEMBER = Month' "NOVEMBER"
+
+pattern Month_OCTOBER :: Month
+pattern Month_OCTOBER = Month' "OCTOBER"
+
+pattern Month_SEPTEMBER :: Month
+pattern Month_SEPTEMBER = Month' "SEPTEMBER"
+
+{-# COMPLETE
+  Month_APRIL,
+  Month_AUGUST,
+  Month_DECEMBER,
+  Month_FEBRUARY,
+  Month_JANUARY,
+  Month_JULY,
+  Month_JUNE,
+  Month_MARCH,
+  Month_MAY,
+  Month_NOVEMBER,
+  Month_OCTOBER,
+  Month_SEPTEMBER,
+  Month'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/Operation.hs b/gen/Amazonka/Forecast/Types/Operation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Operation.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Operation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Operation
+  ( Operation
+      ( ..,
+        Operation_ADD,
+        Operation_DIVIDE,
+        Operation_MULTIPLY,
+        Operation_SUBTRACT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Operation = Operation'
+  { fromOperation ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Operation_ADD :: Operation
+pattern Operation_ADD = Operation' "ADD"
+
+pattern Operation_DIVIDE :: Operation
+pattern Operation_DIVIDE = Operation' "DIVIDE"
+
+pattern Operation_MULTIPLY :: Operation
+pattern Operation_MULTIPLY = Operation' "MULTIPLY"
+
+pattern Operation_SUBTRACT :: Operation
+pattern Operation_SUBTRACT = Operation' "SUBTRACT"
+
+{-# COMPLETE
+  Operation_ADD,
+  Operation_DIVIDE,
+  Operation_MULTIPLY,
+  Operation_SUBTRACT,
+  Operation'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/OptimizationMetric.hs b/gen/Amazonka/Forecast/Types/OptimizationMetric.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/OptimizationMetric.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.OptimizationMetric
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.OptimizationMetric
+  ( OptimizationMetric
+      ( ..,
+        OptimizationMetric_AverageWeightedQuantileLoss,
+        OptimizationMetric_MAPE,
+        OptimizationMetric_MASE,
+        OptimizationMetric_RMSE,
+        OptimizationMetric_WAPE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OptimizationMetric = OptimizationMetric'
+  { fromOptimizationMetric ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OptimizationMetric_AverageWeightedQuantileLoss :: OptimizationMetric
+pattern OptimizationMetric_AverageWeightedQuantileLoss = OptimizationMetric' "AverageWeightedQuantileLoss"
+
+pattern OptimizationMetric_MAPE :: OptimizationMetric
+pattern OptimizationMetric_MAPE = OptimizationMetric' "MAPE"
+
+pattern OptimizationMetric_MASE :: OptimizationMetric
+pattern OptimizationMetric_MASE = OptimizationMetric' "MASE"
+
+pattern OptimizationMetric_RMSE :: OptimizationMetric
+pattern OptimizationMetric_RMSE = OptimizationMetric' "RMSE"
+
+pattern OptimizationMetric_WAPE :: OptimizationMetric
+pattern OptimizationMetric_WAPE = OptimizationMetric' "WAPE"
+
+{-# COMPLETE
+  OptimizationMetric_AverageWeightedQuantileLoss,
+  OptimizationMetric_MAPE,
+  OptimizationMetric_MASE,
+  OptimizationMetric_RMSE,
+  OptimizationMetric_WAPE,
+  OptimizationMetric'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/ParameterRanges.hs b/gen/Amazonka/Forecast/Types/ParameterRanges.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ParameterRanges.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ParameterRanges
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ParameterRanges where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.CategoricalParameterRange
+import Amazonka.Forecast.Types.ContinuousParameterRange
+import Amazonka.Forecast.Types.IntegerParameterRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the categorical, continuous, and integer hyperparameters, and
+-- their ranges of tunable values. The range of tunable values determines
+-- which values that a hyperparameter tuning job can choose for the
+-- specified hyperparameter. This object is part of the
+-- HyperParameterTuningJobConfig object.
+--
+-- /See:/ 'newParameterRanges' smart constructor.
+data ParameterRanges = ParameterRanges'
+  { -- | Specifies the tunable range for each categorical hyperparameter.
+    categoricalParameterRanges :: Prelude.Maybe (Prelude.NonEmpty CategoricalParameterRange),
+    -- | Specifies the tunable range for each continuous hyperparameter.
+    continuousParameterRanges :: Prelude.Maybe (Prelude.NonEmpty ContinuousParameterRange),
+    -- | Specifies the tunable range for each integer hyperparameter.
+    integerParameterRanges :: Prelude.Maybe (Prelude.NonEmpty IntegerParameterRange)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ParameterRanges' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'categoricalParameterRanges', 'parameterRanges_categoricalParameterRanges' - Specifies the tunable range for each categorical hyperparameter.
+--
+-- 'continuousParameterRanges', 'parameterRanges_continuousParameterRanges' - Specifies the tunable range for each continuous hyperparameter.
+--
+-- 'integerParameterRanges', 'parameterRanges_integerParameterRanges' - Specifies the tunable range for each integer hyperparameter.
+newParameterRanges ::
+  ParameterRanges
+newParameterRanges =
+  ParameterRanges'
+    { categoricalParameterRanges =
+        Prelude.Nothing,
+      continuousParameterRanges = Prelude.Nothing,
+      integerParameterRanges = Prelude.Nothing
+    }
+
+-- | Specifies the tunable range for each categorical hyperparameter.
+parameterRanges_categoricalParameterRanges :: Lens.Lens' ParameterRanges (Prelude.Maybe (Prelude.NonEmpty CategoricalParameterRange))
+parameterRanges_categoricalParameterRanges = Lens.lens (\ParameterRanges' {categoricalParameterRanges} -> categoricalParameterRanges) (\s@ParameterRanges' {} a -> s {categoricalParameterRanges = a} :: ParameterRanges) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the tunable range for each continuous hyperparameter.
+parameterRanges_continuousParameterRanges :: Lens.Lens' ParameterRanges (Prelude.Maybe (Prelude.NonEmpty ContinuousParameterRange))
+parameterRanges_continuousParameterRanges = Lens.lens (\ParameterRanges' {continuousParameterRanges} -> continuousParameterRanges) (\s@ParameterRanges' {} a -> s {continuousParameterRanges = a} :: ParameterRanges) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies the tunable range for each integer hyperparameter.
+parameterRanges_integerParameterRanges :: Lens.Lens' ParameterRanges (Prelude.Maybe (Prelude.NonEmpty IntegerParameterRange))
+parameterRanges_integerParameterRanges = Lens.lens (\ParameterRanges' {integerParameterRanges} -> integerParameterRanges) (\s@ParameterRanges' {} a -> s {integerParameterRanges = a} :: ParameterRanges) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ParameterRanges where
+  parseJSON =
+    Data.withObject
+      "ParameterRanges"
+      ( \x ->
+          ParameterRanges'
+            Prelude.<$> (x Data..:? "CategoricalParameterRanges")
+            Prelude.<*> (x Data..:? "ContinuousParameterRanges")
+            Prelude.<*> (x Data..:? "IntegerParameterRanges")
+      )
+
+instance Prelude.Hashable ParameterRanges where
+  hashWithSalt _salt ParameterRanges' {..} =
+    _salt
+      `Prelude.hashWithSalt` categoricalParameterRanges
+      `Prelude.hashWithSalt` continuousParameterRanges
+      `Prelude.hashWithSalt` integerParameterRanges
+
+instance Prelude.NFData ParameterRanges where
+  rnf ParameterRanges' {..} =
+    Prelude.rnf categoricalParameterRanges
+      `Prelude.seq` Prelude.rnf continuousParameterRanges
+      `Prelude.seq` Prelude.rnf integerParameterRanges
+
+instance Data.ToJSON ParameterRanges where
+  toJSON ParameterRanges' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CategoricalParameterRanges" Data..=)
+              Prelude.<$> categoricalParameterRanges,
+            ("ContinuousParameterRanges" Data..=)
+              Prelude.<$> continuousParameterRanges,
+            ("IntegerParameterRanges" Data..=)
+              Prelude.<$> integerParameterRanges
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/PredictorBacktestExportJobSummary.hs b/gen/Amazonka/Forecast/Types/PredictorBacktestExportJobSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/PredictorBacktestExportJobSummary.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.PredictorBacktestExportJobSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.PredictorBacktestExportJobSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.DataDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the predictor backtest export job properties used
+-- in the ListPredictorBacktestExportJobs operation. To get a complete set
+-- of properties, call the DescribePredictorBacktestExportJob operation,
+-- and provide the listed @PredictorBacktestExportJobArn@.
+--
+-- /See:/ 'newPredictorBacktestExportJobSummary' smart constructor.
+data PredictorBacktestExportJobSummary = PredictorBacktestExportJobSummary'
+  { -- | When the predictor backtest export job was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    destination :: Prelude.Maybe DataDestination,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | Information about any errors that may have occurred during the backtest
+    -- export.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the predictor backtest export job.
+    predictorBacktestExportJobArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the predictor backtest export job.
+    predictorBacktestExportJobName :: Prelude.Maybe Prelude.Text,
+    -- | The status of the predictor backtest export job. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictorBacktestExportJobSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'predictorBacktestExportJobSummary_creationTime' - When the predictor backtest export job was created.
+--
+-- 'destination', 'predictorBacktestExportJobSummary_destination' - Undocumented member.
+--
+-- 'lastModificationTime', 'predictorBacktestExportJobSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'predictorBacktestExportJobSummary_message' - Information about any errors that may have occurred during the backtest
+-- export.
+--
+-- 'predictorBacktestExportJobArn', 'predictorBacktestExportJobSummary_predictorBacktestExportJobArn' - The Amazon Resource Name (ARN) of the predictor backtest export job.
+--
+-- 'predictorBacktestExportJobName', 'predictorBacktestExportJobSummary_predictorBacktestExportJobName' - The name of the predictor backtest export job.
+--
+-- 'status', 'predictorBacktestExportJobSummary_status' - The status of the predictor backtest export job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+newPredictorBacktestExportJobSummary ::
+  PredictorBacktestExportJobSummary
+newPredictorBacktestExportJobSummary =
+  PredictorBacktestExportJobSummary'
+    { creationTime =
+        Prelude.Nothing,
+      destination = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      predictorBacktestExportJobArn =
+        Prelude.Nothing,
+      predictorBacktestExportJobName =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | When the predictor backtest export job was created.
+predictorBacktestExportJobSummary_creationTime :: Lens.Lens' PredictorBacktestExportJobSummary (Prelude.Maybe Prelude.UTCTime)
+predictorBacktestExportJobSummary_creationTime = Lens.lens (\PredictorBacktestExportJobSummary' {creationTime} -> creationTime) (\s@PredictorBacktestExportJobSummary' {} a -> s {creationTime = a} :: PredictorBacktestExportJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Undocumented member.
+predictorBacktestExportJobSummary_destination :: Lens.Lens' PredictorBacktestExportJobSummary (Prelude.Maybe DataDestination)
+predictorBacktestExportJobSummary_destination = Lens.lens (\PredictorBacktestExportJobSummary' {destination} -> destination) (\s@PredictorBacktestExportJobSummary' {} a -> s {destination = a} :: PredictorBacktestExportJobSummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+predictorBacktestExportJobSummary_lastModificationTime :: Lens.Lens' PredictorBacktestExportJobSummary (Prelude.Maybe Prelude.UTCTime)
+predictorBacktestExportJobSummary_lastModificationTime = Lens.lens (\PredictorBacktestExportJobSummary' {lastModificationTime} -> lastModificationTime) (\s@PredictorBacktestExportJobSummary' {} a -> s {lastModificationTime = a} :: PredictorBacktestExportJobSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Information about any errors that may have occurred during the backtest
+-- export.
+predictorBacktestExportJobSummary_message :: Lens.Lens' PredictorBacktestExportJobSummary (Prelude.Maybe Prelude.Text)
+predictorBacktestExportJobSummary_message = Lens.lens (\PredictorBacktestExportJobSummary' {message} -> message) (\s@PredictorBacktestExportJobSummary' {} a -> s {message = a} :: PredictorBacktestExportJobSummary)
+
+-- | The Amazon Resource Name (ARN) of the predictor backtest export job.
+predictorBacktestExportJobSummary_predictorBacktestExportJobArn :: Lens.Lens' PredictorBacktestExportJobSummary (Prelude.Maybe Prelude.Text)
+predictorBacktestExportJobSummary_predictorBacktestExportJobArn = Lens.lens (\PredictorBacktestExportJobSummary' {predictorBacktestExportJobArn} -> predictorBacktestExportJobArn) (\s@PredictorBacktestExportJobSummary' {} a -> s {predictorBacktestExportJobArn = a} :: PredictorBacktestExportJobSummary)
+
+-- | The name of the predictor backtest export job.
+predictorBacktestExportJobSummary_predictorBacktestExportJobName :: Lens.Lens' PredictorBacktestExportJobSummary (Prelude.Maybe Prelude.Text)
+predictorBacktestExportJobSummary_predictorBacktestExportJobName = Lens.lens (\PredictorBacktestExportJobSummary' {predictorBacktestExportJobName} -> predictorBacktestExportJobName) (\s@PredictorBacktestExportJobSummary' {} a -> s {predictorBacktestExportJobName = a} :: PredictorBacktestExportJobSummary)
+
+-- | The status of the predictor backtest export job. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+predictorBacktestExportJobSummary_status :: Lens.Lens' PredictorBacktestExportJobSummary (Prelude.Maybe Prelude.Text)
+predictorBacktestExportJobSummary_status = Lens.lens (\PredictorBacktestExportJobSummary' {status} -> status) (\s@PredictorBacktestExportJobSummary' {} a -> s {status = a} :: PredictorBacktestExportJobSummary)
+
+instance
+  Data.FromJSON
+    PredictorBacktestExportJobSummary
+  where
+  parseJSON =
+    Data.withObject
+      "PredictorBacktestExportJobSummary"
+      ( \x ->
+          PredictorBacktestExportJobSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "Destination")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "PredictorBacktestExportJobArn")
+            Prelude.<*> (x Data..:? "PredictorBacktestExportJobName")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance
+  Prelude.Hashable
+    PredictorBacktestExportJobSummary
+  where
+  hashWithSalt
+    _salt
+    PredictorBacktestExportJobSummary' {..} =
+      _salt
+        `Prelude.hashWithSalt` creationTime
+        `Prelude.hashWithSalt` destination
+        `Prelude.hashWithSalt` lastModificationTime
+        `Prelude.hashWithSalt` message
+        `Prelude.hashWithSalt` predictorBacktestExportJobArn
+        `Prelude.hashWithSalt` predictorBacktestExportJobName
+        `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    PredictorBacktestExportJobSummary
+  where
+  rnf PredictorBacktestExportJobSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf predictorBacktestExportJobArn
+      `Prelude.seq` Prelude.rnf predictorBacktestExportJobName
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/PredictorBaseline.hs b/gen/Amazonka/Forecast/Types/PredictorBaseline.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/PredictorBaseline.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.PredictorBaseline
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.PredictorBaseline where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.BaselineMetric
+import qualified Amazonka.Prelude as Prelude
+
+-- | Metrics you can use as a baseline for comparison purposes. Use these
+-- metrics when you interpret monitoring results for an auto predictor.
+--
+-- /See:/ 'newPredictorBaseline' smart constructor.
+data PredictorBaseline = PredictorBaseline'
+  { -- | The initial
+    -- <https://docs.aws.amazon.com/forecast/latest/dg/metrics.html accuracy metrics>
+    -- for the predictor. Use these metrics as a baseline for comparison
+    -- purposes as you use your predictor and the metrics change.
+    baselineMetrics :: Prelude.Maybe [BaselineMetric]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictorBaseline' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'baselineMetrics', 'predictorBaseline_baselineMetrics' - The initial
+-- <https://docs.aws.amazon.com/forecast/latest/dg/metrics.html accuracy metrics>
+-- for the predictor. Use these metrics as a baseline for comparison
+-- purposes as you use your predictor and the metrics change.
+newPredictorBaseline ::
+  PredictorBaseline
+newPredictorBaseline =
+  PredictorBaseline'
+    { baselineMetrics =
+        Prelude.Nothing
+    }
+
+-- | The initial
+-- <https://docs.aws.amazon.com/forecast/latest/dg/metrics.html accuracy metrics>
+-- for the predictor. Use these metrics as a baseline for comparison
+-- purposes as you use your predictor and the metrics change.
+predictorBaseline_baselineMetrics :: Lens.Lens' PredictorBaseline (Prelude.Maybe [BaselineMetric])
+predictorBaseline_baselineMetrics = Lens.lens (\PredictorBaseline' {baselineMetrics} -> baselineMetrics) (\s@PredictorBaseline' {} a -> s {baselineMetrics = a} :: PredictorBaseline) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PredictorBaseline where
+  parseJSON =
+    Data.withObject
+      "PredictorBaseline"
+      ( \x ->
+          PredictorBaseline'
+            Prelude.<$> ( x
+                            Data..:? "BaselineMetrics"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable PredictorBaseline where
+  hashWithSalt _salt PredictorBaseline' {..} =
+    _salt `Prelude.hashWithSalt` baselineMetrics
+
+instance Prelude.NFData PredictorBaseline where
+  rnf PredictorBaseline' {..} =
+    Prelude.rnf baselineMetrics
diff --git a/gen/Amazonka/Forecast/Types/PredictorEvent.hs b/gen/Amazonka/Forecast/Types/PredictorEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/PredictorEvent.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.PredictorEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.PredictorEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides details about a predictor event, such as a retraining.
+--
+-- /See:/ 'newPredictorEvent' smart constructor.
+data PredictorEvent = PredictorEvent'
+  { -- | The timestamp for when the event occurred.
+    datetime :: Prelude.Maybe Data.POSIX,
+    -- | The type of event. For example, @Retrain@. A retraining event denotes
+    -- the timepoint when a predictor was retrained. Any monitor results from
+    -- before the @Datetime@ are from the previous predictor. Any new metrics
+    -- are for the newly retrained predictor.
+    detail :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictorEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datetime', 'predictorEvent_datetime' - The timestamp for when the event occurred.
+--
+-- 'detail', 'predictorEvent_detail' - The type of event. For example, @Retrain@. A retraining event denotes
+-- the timepoint when a predictor was retrained. Any monitor results from
+-- before the @Datetime@ are from the previous predictor. Any new metrics
+-- are for the newly retrained predictor.
+newPredictorEvent ::
+  PredictorEvent
+newPredictorEvent =
+  PredictorEvent'
+    { datetime = Prelude.Nothing,
+      detail = Prelude.Nothing
+    }
+
+-- | The timestamp for when the event occurred.
+predictorEvent_datetime :: Lens.Lens' PredictorEvent (Prelude.Maybe Prelude.UTCTime)
+predictorEvent_datetime = Lens.lens (\PredictorEvent' {datetime} -> datetime) (\s@PredictorEvent' {} a -> s {datetime = a} :: PredictorEvent) Prelude.. Lens.mapping Data._Time
+
+-- | The type of event. For example, @Retrain@. A retraining event denotes
+-- the timepoint when a predictor was retrained. Any monitor results from
+-- before the @Datetime@ are from the previous predictor. Any new metrics
+-- are for the newly retrained predictor.
+predictorEvent_detail :: Lens.Lens' PredictorEvent (Prelude.Maybe Prelude.Text)
+predictorEvent_detail = Lens.lens (\PredictorEvent' {detail} -> detail) (\s@PredictorEvent' {} a -> s {detail = a} :: PredictorEvent)
+
+instance Data.FromJSON PredictorEvent where
+  parseJSON =
+    Data.withObject
+      "PredictorEvent"
+      ( \x ->
+          PredictorEvent'
+            Prelude.<$> (x Data..:? "Datetime")
+            Prelude.<*> (x Data..:? "Detail")
+      )
+
+instance Prelude.Hashable PredictorEvent where
+  hashWithSalt _salt PredictorEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` datetime
+      `Prelude.hashWithSalt` detail
+
+instance Prelude.NFData PredictorEvent where
+  rnf PredictorEvent' {..} =
+    Prelude.rnf datetime
+      `Prelude.seq` Prelude.rnf detail
diff --git a/gen/Amazonka/Forecast/Types/PredictorExecution.hs b/gen/Amazonka/Forecast/Types/PredictorExecution.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/PredictorExecution.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.PredictorExecution
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.PredictorExecution where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.TestWindowSummary
+import qualified Amazonka.Prelude as Prelude
+
+-- | The algorithm used to perform a backtest and the status of those tests.
+--
+-- /See:/ 'newPredictorExecution' smart constructor.
+data PredictorExecution = PredictorExecution'
+  { -- | The ARN of the algorithm used to test the predictor.
+    algorithmArn :: Prelude.Maybe Prelude.Text,
+    -- | An array of test windows used to evaluate the algorithm. The
+    -- @NumberOfBacktestWindows@ from the object determines the number of
+    -- windows in the array.
+    testWindows :: Prelude.Maybe [TestWindowSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictorExecution' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'algorithmArn', 'predictorExecution_algorithmArn' - The ARN of the algorithm used to test the predictor.
+--
+-- 'testWindows', 'predictorExecution_testWindows' - An array of test windows used to evaluate the algorithm. The
+-- @NumberOfBacktestWindows@ from the object determines the number of
+-- windows in the array.
+newPredictorExecution ::
+  PredictorExecution
+newPredictorExecution =
+  PredictorExecution'
+    { algorithmArn = Prelude.Nothing,
+      testWindows = Prelude.Nothing
+    }
+
+-- | The ARN of the algorithm used to test the predictor.
+predictorExecution_algorithmArn :: Lens.Lens' PredictorExecution (Prelude.Maybe Prelude.Text)
+predictorExecution_algorithmArn = Lens.lens (\PredictorExecution' {algorithmArn} -> algorithmArn) (\s@PredictorExecution' {} a -> s {algorithmArn = a} :: PredictorExecution)
+
+-- | An array of test windows used to evaluate the algorithm. The
+-- @NumberOfBacktestWindows@ from the object determines the number of
+-- windows in the array.
+predictorExecution_testWindows :: Lens.Lens' PredictorExecution (Prelude.Maybe [TestWindowSummary])
+predictorExecution_testWindows = Lens.lens (\PredictorExecution' {testWindows} -> testWindows) (\s@PredictorExecution' {} a -> s {testWindows = a} :: PredictorExecution) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PredictorExecution where
+  parseJSON =
+    Data.withObject
+      "PredictorExecution"
+      ( \x ->
+          PredictorExecution'
+            Prelude.<$> (x Data..:? "AlgorithmArn")
+            Prelude.<*> (x Data..:? "TestWindows" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable PredictorExecution where
+  hashWithSalt _salt PredictorExecution' {..} =
+    _salt
+      `Prelude.hashWithSalt` algorithmArn
+      `Prelude.hashWithSalt` testWindows
+
+instance Prelude.NFData PredictorExecution where
+  rnf PredictorExecution' {..} =
+    Prelude.rnf algorithmArn
+      `Prelude.seq` Prelude.rnf testWindows
diff --git a/gen/Amazonka/Forecast/Types/PredictorExecutionDetails.hs b/gen/Amazonka/Forecast/Types/PredictorExecutionDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/PredictorExecutionDetails.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.PredictorExecutionDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.PredictorExecutionDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.PredictorExecution
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains details on the backtests performed to evaluate the accuracy of
+-- the predictor. The tests are returned in descending order of accuracy,
+-- with the most accurate backtest appearing first. You specify the number
+-- of backtests to perform when you call the operation.
+--
+-- /See:/ 'newPredictorExecutionDetails' smart constructor.
+data PredictorExecutionDetails = PredictorExecutionDetails'
+  { -- | An array of the backtests performed to evaluate the accuracy of the
+    -- predictor against a particular algorithm. The @NumberOfBacktestWindows@
+    -- from the object determines the number of windows in the array.
+    predictorExecutions :: Prelude.Maybe (Prelude.NonEmpty PredictorExecution)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictorExecutionDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'predictorExecutions', 'predictorExecutionDetails_predictorExecutions' - An array of the backtests performed to evaluate the accuracy of the
+-- predictor against a particular algorithm. The @NumberOfBacktestWindows@
+-- from the object determines the number of windows in the array.
+newPredictorExecutionDetails ::
+  PredictorExecutionDetails
+newPredictorExecutionDetails =
+  PredictorExecutionDetails'
+    { predictorExecutions =
+        Prelude.Nothing
+    }
+
+-- | An array of the backtests performed to evaluate the accuracy of the
+-- predictor against a particular algorithm. The @NumberOfBacktestWindows@
+-- from the object determines the number of windows in the array.
+predictorExecutionDetails_predictorExecutions :: Lens.Lens' PredictorExecutionDetails (Prelude.Maybe (Prelude.NonEmpty PredictorExecution))
+predictorExecutionDetails_predictorExecutions = Lens.lens (\PredictorExecutionDetails' {predictorExecutions} -> predictorExecutions) (\s@PredictorExecutionDetails' {} a -> s {predictorExecutions = a} :: PredictorExecutionDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON PredictorExecutionDetails where
+  parseJSON =
+    Data.withObject
+      "PredictorExecutionDetails"
+      ( \x ->
+          PredictorExecutionDetails'
+            Prelude.<$> (x Data..:? "PredictorExecutions")
+      )
+
+instance Prelude.Hashable PredictorExecutionDetails where
+  hashWithSalt _salt PredictorExecutionDetails' {..} =
+    _salt `Prelude.hashWithSalt` predictorExecutions
+
+instance Prelude.NFData PredictorExecutionDetails where
+  rnf PredictorExecutionDetails' {..} =
+    Prelude.rnf predictorExecutions
diff --git a/gen/Amazonka/Forecast/Types/PredictorMonitorEvaluation.hs b/gen/Amazonka/Forecast/Types/PredictorMonitorEvaluation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/PredictorMonitorEvaluation.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.PredictorMonitorEvaluation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.PredictorMonitorEvaluation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.MetricResult
+import Amazonka.Forecast.Types.MonitorDataSource
+import Amazonka.Forecast.Types.PredictorEvent
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the results of a monitor evaluation.
+--
+-- /See:/ 'newPredictorMonitorEvaluation' smart constructor.
+data PredictorMonitorEvaluation = PredictorMonitorEvaluation'
+  { -- | The status of the monitor evaluation. The state can be @SUCCESS@ or
+    -- @FAILURE@.
+    evaluationState :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that indicates when the monitor evaluation was started.
+    evaluationTime :: Prelude.Maybe Data.POSIX,
+    -- | Information about any errors that may have occurred during the monitor
+    -- evaluation.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | A list of metrics Forecast calculated when monitoring a predictor. You
+    -- can compare the value for each metric in the list to the metric\'s value
+    -- in the Baseline to see how your predictor\'s performance is changing.
+    metricResults :: Prelude.Maybe [MetricResult],
+    -- | The Amazon Resource Name (ARN) of the monitor resource.
+    monitorArn :: Prelude.Maybe Prelude.Text,
+    -- | The source of the data the monitor resource used during the evaluation.
+    monitorDataSource :: Prelude.Maybe MonitorDataSource,
+    -- | The number of items considered during the evaluation.
+    numItemsEvaluated :: Prelude.Maybe Prelude.Integer,
+    -- | Provides details about a predictor event, such as a retraining.
+    predictorEvent :: Prelude.Maybe PredictorEvent,
+    -- | The Amazon Resource Name (ARN) of the resource to monitor.
+    resourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp that indicates the end of the window that is used for
+    -- monitor evaluation.
+    windowEndDatetime :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp that indicates the start of the window that is used for
+    -- monitor evaluation.
+    windowStartDatetime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictorMonitorEvaluation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'evaluationState', 'predictorMonitorEvaluation_evaluationState' - The status of the monitor evaluation. The state can be @SUCCESS@ or
+-- @FAILURE@.
+--
+-- 'evaluationTime', 'predictorMonitorEvaluation_evaluationTime' - The timestamp that indicates when the monitor evaluation was started.
+--
+-- 'message', 'predictorMonitorEvaluation_message' - Information about any errors that may have occurred during the monitor
+-- evaluation.
+--
+-- 'metricResults', 'predictorMonitorEvaluation_metricResults' - A list of metrics Forecast calculated when monitoring a predictor. You
+-- can compare the value for each metric in the list to the metric\'s value
+-- in the Baseline to see how your predictor\'s performance is changing.
+--
+-- 'monitorArn', 'predictorMonitorEvaluation_monitorArn' - The Amazon Resource Name (ARN) of the monitor resource.
+--
+-- 'monitorDataSource', 'predictorMonitorEvaluation_monitorDataSource' - The source of the data the monitor resource used during the evaluation.
+--
+-- 'numItemsEvaluated', 'predictorMonitorEvaluation_numItemsEvaluated' - The number of items considered during the evaluation.
+--
+-- 'predictorEvent', 'predictorMonitorEvaluation_predictorEvent' - Provides details about a predictor event, such as a retraining.
+--
+-- 'resourceArn', 'predictorMonitorEvaluation_resourceArn' - The Amazon Resource Name (ARN) of the resource to monitor.
+--
+-- 'windowEndDatetime', 'predictorMonitorEvaluation_windowEndDatetime' - The timestamp that indicates the end of the window that is used for
+-- monitor evaluation.
+--
+-- 'windowStartDatetime', 'predictorMonitorEvaluation_windowStartDatetime' - The timestamp that indicates the start of the window that is used for
+-- monitor evaluation.
+newPredictorMonitorEvaluation ::
+  PredictorMonitorEvaluation
+newPredictorMonitorEvaluation =
+  PredictorMonitorEvaluation'
+    { evaluationState =
+        Prelude.Nothing,
+      evaluationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      metricResults = Prelude.Nothing,
+      monitorArn = Prelude.Nothing,
+      monitorDataSource = Prelude.Nothing,
+      numItemsEvaluated = Prelude.Nothing,
+      predictorEvent = Prelude.Nothing,
+      resourceArn = Prelude.Nothing,
+      windowEndDatetime = Prelude.Nothing,
+      windowStartDatetime = Prelude.Nothing
+    }
+
+-- | The status of the monitor evaluation. The state can be @SUCCESS@ or
+-- @FAILURE@.
+predictorMonitorEvaluation_evaluationState :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe Prelude.Text)
+predictorMonitorEvaluation_evaluationState = Lens.lens (\PredictorMonitorEvaluation' {evaluationState} -> evaluationState) (\s@PredictorMonitorEvaluation' {} a -> s {evaluationState = a} :: PredictorMonitorEvaluation)
+
+-- | The timestamp that indicates when the monitor evaluation was started.
+predictorMonitorEvaluation_evaluationTime :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe Prelude.UTCTime)
+predictorMonitorEvaluation_evaluationTime = Lens.lens (\PredictorMonitorEvaluation' {evaluationTime} -> evaluationTime) (\s@PredictorMonitorEvaluation' {} a -> s {evaluationTime = a} :: PredictorMonitorEvaluation) Prelude.. Lens.mapping Data._Time
+
+-- | Information about any errors that may have occurred during the monitor
+-- evaluation.
+predictorMonitorEvaluation_message :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe Prelude.Text)
+predictorMonitorEvaluation_message = Lens.lens (\PredictorMonitorEvaluation' {message} -> message) (\s@PredictorMonitorEvaluation' {} a -> s {message = a} :: PredictorMonitorEvaluation)
+
+-- | A list of metrics Forecast calculated when monitoring a predictor. You
+-- can compare the value for each metric in the list to the metric\'s value
+-- in the Baseline to see how your predictor\'s performance is changing.
+predictorMonitorEvaluation_metricResults :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe [MetricResult])
+predictorMonitorEvaluation_metricResults = Lens.lens (\PredictorMonitorEvaluation' {metricResults} -> metricResults) (\s@PredictorMonitorEvaluation' {} a -> s {metricResults = a} :: PredictorMonitorEvaluation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the monitor resource.
+predictorMonitorEvaluation_monitorArn :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe Prelude.Text)
+predictorMonitorEvaluation_monitorArn = Lens.lens (\PredictorMonitorEvaluation' {monitorArn} -> monitorArn) (\s@PredictorMonitorEvaluation' {} a -> s {monitorArn = a} :: PredictorMonitorEvaluation)
+
+-- | The source of the data the monitor resource used during the evaluation.
+predictorMonitorEvaluation_monitorDataSource :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe MonitorDataSource)
+predictorMonitorEvaluation_monitorDataSource = Lens.lens (\PredictorMonitorEvaluation' {monitorDataSource} -> monitorDataSource) (\s@PredictorMonitorEvaluation' {} a -> s {monitorDataSource = a} :: PredictorMonitorEvaluation)
+
+-- | The number of items considered during the evaluation.
+predictorMonitorEvaluation_numItemsEvaluated :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe Prelude.Integer)
+predictorMonitorEvaluation_numItemsEvaluated = Lens.lens (\PredictorMonitorEvaluation' {numItemsEvaluated} -> numItemsEvaluated) (\s@PredictorMonitorEvaluation' {} a -> s {numItemsEvaluated = a} :: PredictorMonitorEvaluation)
+
+-- | Provides details about a predictor event, such as a retraining.
+predictorMonitorEvaluation_predictorEvent :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe PredictorEvent)
+predictorMonitorEvaluation_predictorEvent = Lens.lens (\PredictorMonitorEvaluation' {predictorEvent} -> predictorEvent) (\s@PredictorMonitorEvaluation' {} a -> s {predictorEvent = a} :: PredictorMonitorEvaluation)
+
+-- | The Amazon Resource Name (ARN) of the resource to monitor.
+predictorMonitorEvaluation_resourceArn :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe Prelude.Text)
+predictorMonitorEvaluation_resourceArn = Lens.lens (\PredictorMonitorEvaluation' {resourceArn} -> resourceArn) (\s@PredictorMonitorEvaluation' {} a -> s {resourceArn = a} :: PredictorMonitorEvaluation)
+
+-- | The timestamp that indicates the end of the window that is used for
+-- monitor evaluation.
+predictorMonitorEvaluation_windowEndDatetime :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe Prelude.UTCTime)
+predictorMonitorEvaluation_windowEndDatetime = Lens.lens (\PredictorMonitorEvaluation' {windowEndDatetime} -> windowEndDatetime) (\s@PredictorMonitorEvaluation' {} a -> s {windowEndDatetime = a} :: PredictorMonitorEvaluation) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp that indicates the start of the window that is used for
+-- monitor evaluation.
+predictorMonitorEvaluation_windowStartDatetime :: Lens.Lens' PredictorMonitorEvaluation (Prelude.Maybe Prelude.UTCTime)
+predictorMonitorEvaluation_windowStartDatetime = Lens.lens (\PredictorMonitorEvaluation' {windowStartDatetime} -> windowStartDatetime) (\s@PredictorMonitorEvaluation' {} a -> s {windowStartDatetime = a} :: PredictorMonitorEvaluation) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON PredictorMonitorEvaluation where
+  parseJSON =
+    Data.withObject
+      "PredictorMonitorEvaluation"
+      ( \x ->
+          PredictorMonitorEvaluation'
+            Prelude.<$> (x Data..:? "EvaluationState")
+            Prelude.<*> (x Data..:? "EvaluationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "MetricResults" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "MonitorArn")
+            Prelude.<*> (x Data..:? "MonitorDataSource")
+            Prelude.<*> (x Data..:? "NumItemsEvaluated")
+            Prelude.<*> (x Data..:? "PredictorEvent")
+            Prelude.<*> (x Data..:? "ResourceArn")
+            Prelude.<*> (x Data..:? "WindowEndDatetime")
+            Prelude.<*> (x Data..:? "WindowStartDatetime")
+      )
+
+instance Prelude.Hashable PredictorMonitorEvaluation where
+  hashWithSalt _salt PredictorMonitorEvaluation' {..} =
+    _salt
+      `Prelude.hashWithSalt` evaluationState
+      `Prelude.hashWithSalt` evaluationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` metricResults
+      `Prelude.hashWithSalt` monitorArn
+      `Prelude.hashWithSalt` monitorDataSource
+      `Prelude.hashWithSalt` numItemsEvaluated
+      `Prelude.hashWithSalt` predictorEvent
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` windowEndDatetime
+      `Prelude.hashWithSalt` windowStartDatetime
+
+instance Prelude.NFData PredictorMonitorEvaluation where
+  rnf PredictorMonitorEvaluation' {..} =
+    Prelude.rnf evaluationState
+      `Prelude.seq` Prelude.rnf evaluationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf metricResults
+      `Prelude.seq` Prelude.rnf monitorArn
+      `Prelude.seq` Prelude.rnf monitorDataSource
+      `Prelude.seq` Prelude.rnf numItemsEvaluated
+      `Prelude.seq` Prelude.rnf predictorEvent
+      `Prelude.seq` Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf windowEndDatetime
+      `Prelude.seq` Prelude.rnf windowStartDatetime
diff --git a/gen/Amazonka/Forecast/Types/PredictorSummary.hs b/gen/Amazonka/Forecast/Types/PredictorSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/PredictorSummary.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.PredictorSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.PredictorSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.ReferencePredictorSummary
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the predictor properties that are used in the
+-- ListPredictors operation. To get the complete set of properties, call
+-- the DescribePredictor operation, and provide the listed @PredictorArn@.
+--
+-- /See:/ 'newPredictorSummary' smart constructor.
+data PredictorSummary = PredictorSummary'
+  { -- | When the model training task was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the dataset group that contains the
+    -- data used to train the predictor.
+    datasetGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | Whether AutoPredictor was used to create the predictor.
+    isAutoPredictor :: Prelude.Maybe Prelude.Bool,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the predictor.
+    predictorArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the predictor.
+    predictorName :: Prelude.Maybe Prelude.Text,
+    -- | A summary of the reference predictor used if the predictor was retrained
+    -- or upgraded.
+    referencePredictorSummary :: Prelude.Maybe ReferencePredictorSummary,
+    -- | The status of the predictor. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- The @Status@ of the predictor must be @ACTIVE@ before you can use the
+    -- predictor to create a forecast.
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PredictorSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'predictorSummary_creationTime' - When the model training task was created.
+--
+-- 'datasetGroupArn', 'predictorSummary_datasetGroupArn' - The Amazon Resource Name (ARN) of the dataset group that contains the
+-- data used to train the predictor.
+--
+-- 'isAutoPredictor', 'predictorSummary_isAutoPredictor' - Whether AutoPredictor was used to create the predictor.
+--
+-- 'lastModificationTime', 'predictorSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'predictorSummary_message' - If an error occurred, an informational message about the error.
+--
+-- 'predictorArn', 'predictorSummary_predictorArn' - The ARN of the predictor.
+--
+-- 'predictorName', 'predictorSummary_predictorName' - The name of the predictor.
+--
+-- 'referencePredictorSummary', 'predictorSummary_referencePredictorSummary' - A summary of the reference predictor used if the predictor was retrained
+-- or upgraded.
+--
+-- 'status', 'predictorSummary_status' - The status of the predictor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- The @Status@ of the predictor must be @ACTIVE@ before you can use the
+-- predictor to create a forecast.
+newPredictorSummary ::
+  PredictorSummary
+newPredictorSummary =
+  PredictorSummary'
+    { creationTime = Prelude.Nothing,
+      datasetGroupArn = Prelude.Nothing,
+      isAutoPredictor = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      predictorArn = Prelude.Nothing,
+      predictorName = Prelude.Nothing,
+      referencePredictorSummary = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | When the model training task was created.
+predictorSummary_creationTime :: Lens.Lens' PredictorSummary (Prelude.Maybe Prelude.UTCTime)
+predictorSummary_creationTime = Lens.lens (\PredictorSummary' {creationTime} -> creationTime) (\s@PredictorSummary' {} a -> s {creationTime = a} :: PredictorSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the dataset group that contains the
+-- data used to train the predictor.
+predictorSummary_datasetGroupArn :: Lens.Lens' PredictorSummary (Prelude.Maybe Prelude.Text)
+predictorSummary_datasetGroupArn = Lens.lens (\PredictorSummary' {datasetGroupArn} -> datasetGroupArn) (\s@PredictorSummary' {} a -> s {datasetGroupArn = a} :: PredictorSummary)
+
+-- | Whether AutoPredictor was used to create the predictor.
+predictorSummary_isAutoPredictor :: Lens.Lens' PredictorSummary (Prelude.Maybe Prelude.Bool)
+predictorSummary_isAutoPredictor = Lens.lens (\PredictorSummary' {isAutoPredictor} -> isAutoPredictor) (\s@PredictorSummary' {} a -> s {isAutoPredictor = a} :: PredictorSummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+predictorSummary_lastModificationTime :: Lens.Lens' PredictorSummary (Prelude.Maybe Prelude.UTCTime)
+predictorSummary_lastModificationTime = Lens.lens (\PredictorSummary' {lastModificationTime} -> lastModificationTime) (\s@PredictorSummary' {} a -> s {lastModificationTime = a} :: PredictorSummary) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+predictorSummary_message :: Lens.Lens' PredictorSummary (Prelude.Maybe Prelude.Text)
+predictorSummary_message = Lens.lens (\PredictorSummary' {message} -> message) (\s@PredictorSummary' {} a -> s {message = a} :: PredictorSummary)
+
+-- | The ARN of the predictor.
+predictorSummary_predictorArn :: Lens.Lens' PredictorSummary (Prelude.Maybe Prelude.Text)
+predictorSummary_predictorArn = Lens.lens (\PredictorSummary' {predictorArn} -> predictorArn) (\s@PredictorSummary' {} a -> s {predictorArn = a} :: PredictorSummary)
+
+-- | The name of the predictor.
+predictorSummary_predictorName :: Lens.Lens' PredictorSummary (Prelude.Maybe Prelude.Text)
+predictorSummary_predictorName = Lens.lens (\PredictorSummary' {predictorName} -> predictorName) (\s@PredictorSummary' {} a -> s {predictorName = a} :: PredictorSummary)
+
+-- | A summary of the reference predictor used if the predictor was retrained
+-- or upgraded.
+predictorSummary_referencePredictorSummary :: Lens.Lens' PredictorSummary (Prelude.Maybe ReferencePredictorSummary)
+predictorSummary_referencePredictorSummary = Lens.lens (\PredictorSummary' {referencePredictorSummary} -> referencePredictorSummary) (\s@PredictorSummary' {} a -> s {referencePredictorSummary = a} :: PredictorSummary)
+
+-- | The status of the predictor. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- The @Status@ of the predictor must be @ACTIVE@ before you can use the
+-- predictor to create a forecast.
+predictorSummary_status :: Lens.Lens' PredictorSummary (Prelude.Maybe Prelude.Text)
+predictorSummary_status = Lens.lens (\PredictorSummary' {status} -> status) (\s@PredictorSummary' {} a -> s {status = a} :: PredictorSummary)
+
+instance Data.FromJSON PredictorSummary where
+  parseJSON =
+    Data.withObject
+      "PredictorSummary"
+      ( \x ->
+          PredictorSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "DatasetGroupArn")
+            Prelude.<*> (x Data..:? "IsAutoPredictor")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "PredictorArn")
+            Prelude.<*> (x Data..:? "PredictorName")
+            Prelude.<*> (x Data..:? "ReferencePredictorSummary")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance Prelude.Hashable PredictorSummary where
+  hashWithSalt _salt PredictorSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` datasetGroupArn
+      `Prelude.hashWithSalt` isAutoPredictor
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` predictorArn
+      `Prelude.hashWithSalt` predictorName
+      `Prelude.hashWithSalt` referencePredictorSummary
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData PredictorSummary where
+  rnf PredictorSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf datasetGroupArn
+      `Prelude.seq` Prelude.rnf isAutoPredictor
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf predictorArn
+      `Prelude.seq` Prelude.rnf predictorName
+      `Prelude.seq` Prelude.rnf referencePredictorSummary
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Forecast/Types/ReferencePredictorSummary.hs b/gen/Amazonka/Forecast/Types/ReferencePredictorSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ReferencePredictorSummary.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ReferencePredictorSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ReferencePredictorSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.State
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the reference predictor used when retraining or
+-- upgrading a predictor.
+--
+-- /See:/ 'newReferencePredictorSummary' smart constructor.
+data ReferencePredictorSummary = ReferencePredictorSummary'
+  { -- | The ARN of the reference predictor.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | Whether the reference predictor is @Active@ or @Deleted@.
+    state :: Prelude.Maybe State
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReferencePredictorSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'referencePredictorSummary_arn' - The ARN of the reference predictor.
+--
+-- 'state', 'referencePredictorSummary_state' - Whether the reference predictor is @Active@ or @Deleted@.
+newReferencePredictorSummary ::
+  ReferencePredictorSummary
+newReferencePredictorSummary =
+  ReferencePredictorSummary'
+    { arn = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The ARN of the reference predictor.
+referencePredictorSummary_arn :: Lens.Lens' ReferencePredictorSummary (Prelude.Maybe Prelude.Text)
+referencePredictorSummary_arn = Lens.lens (\ReferencePredictorSummary' {arn} -> arn) (\s@ReferencePredictorSummary' {} a -> s {arn = a} :: ReferencePredictorSummary)
+
+-- | Whether the reference predictor is @Active@ or @Deleted@.
+referencePredictorSummary_state :: Lens.Lens' ReferencePredictorSummary (Prelude.Maybe State)
+referencePredictorSummary_state = Lens.lens (\ReferencePredictorSummary' {state} -> state) (\s@ReferencePredictorSummary' {} a -> s {state = a} :: ReferencePredictorSummary)
+
+instance Data.FromJSON ReferencePredictorSummary where
+  parseJSON =
+    Data.withObject
+      "ReferencePredictorSummary"
+      ( \x ->
+          ReferencePredictorSummary'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "State")
+      )
+
+instance Prelude.Hashable ReferencePredictorSummary where
+  hashWithSalt _salt ReferencePredictorSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData ReferencePredictorSummary where
+  rnf ReferencePredictorSummary' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/Forecast/Types/S3Config.hs b/gen/Amazonka/Forecast/Types/S3Config.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/S3Config.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.S3Config
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.S3Config where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The path to the file(s) in an Amazon Simple Storage Service (Amazon S3)
+-- bucket, and an AWS Identity and Access Management (IAM) role that Amazon
+-- Forecast can assume to access the file(s). Optionally, includes an AWS
+-- Key Management Service (KMS) key. This object is part of the DataSource
+-- object that is submitted in the CreateDatasetImportJob request, and part
+-- of the DataDestination object.
+--
+-- /See:/ 'newS3Config' smart constructor.
+data S3Config = S3Config'
+  { -- | The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS)
+    -- key.
+    kmsKeyArn :: Prelude.Maybe Prelude.Text,
+    -- | The path to an Amazon Simple Storage Service (Amazon S3) bucket or
+    -- file(s) in an Amazon S3 bucket.
+    path :: Prelude.Text,
+    -- | The ARN of the AWS Identity and Access Management (IAM) role that Amazon
+    -- Forecast can assume to access the Amazon S3 bucket or files. If you
+    -- provide a value for the @KMSKeyArn@ key, the role must allow access to
+    -- the key.
+    --
+    -- Passing a role across AWS accounts is not allowed. If you pass a role
+    -- that isn\'t in your account, you get an @InvalidInputException@ error.
+    roleArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Config' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyArn', 's3Config_kmsKeyArn' - The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS)
+-- key.
+--
+-- 'path', 's3Config_path' - The path to an Amazon Simple Storage Service (Amazon S3) bucket or
+-- file(s) in an Amazon S3 bucket.
+--
+-- 'roleArn', 's3Config_roleArn' - The ARN of the AWS Identity and Access Management (IAM) role that Amazon
+-- Forecast can assume to access the Amazon S3 bucket or files. If you
+-- provide a value for the @KMSKeyArn@ key, the role must allow access to
+-- the key.
+--
+-- Passing a role across AWS accounts is not allowed. If you pass a role
+-- that isn\'t in your account, you get an @InvalidInputException@ error.
+newS3Config ::
+  -- | 'path'
+  Prelude.Text ->
+  -- | 'roleArn'
+  Prelude.Text ->
+  S3Config
+newS3Config pPath_ pRoleArn_ =
+  S3Config'
+    { kmsKeyArn = Prelude.Nothing,
+      path = pPath_,
+      roleArn = pRoleArn_
+    }
+
+-- | The Amazon Resource Name (ARN) of an AWS Key Management Service (KMS)
+-- key.
+s3Config_kmsKeyArn :: Lens.Lens' S3Config (Prelude.Maybe Prelude.Text)
+s3Config_kmsKeyArn = Lens.lens (\S3Config' {kmsKeyArn} -> kmsKeyArn) (\s@S3Config' {} a -> s {kmsKeyArn = a} :: S3Config)
+
+-- | The path to an Amazon Simple Storage Service (Amazon S3) bucket or
+-- file(s) in an Amazon S3 bucket.
+s3Config_path :: Lens.Lens' S3Config Prelude.Text
+s3Config_path = Lens.lens (\S3Config' {path} -> path) (\s@S3Config' {} a -> s {path = a} :: S3Config)
+
+-- | The ARN of the AWS Identity and Access Management (IAM) role that Amazon
+-- Forecast can assume to access the Amazon S3 bucket or files. If you
+-- provide a value for the @KMSKeyArn@ key, the role must allow access to
+-- the key.
+--
+-- Passing a role across AWS accounts is not allowed. If you pass a role
+-- that isn\'t in your account, you get an @InvalidInputException@ error.
+s3Config_roleArn :: Lens.Lens' S3Config Prelude.Text
+s3Config_roleArn = Lens.lens (\S3Config' {roleArn} -> roleArn) (\s@S3Config' {} a -> s {roleArn = a} :: S3Config)
+
+instance Data.FromJSON S3Config where
+  parseJSON =
+    Data.withObject
+      "S3Config"
+      ( \x ->
+          S3Config'
+            Prelude.<$> (x Data..:? "KMSKeyArn")
+            Prelude.<*> (x Data..: "Path")
+            Prelude.<*> (x Data..: "RoleArn")
+      )
+
+instance Prelude.Hashable S3Config where
+  hashWithSalt _salt S3Config' {..} =
+    _salt
+      `Prelude.hashWithSalt` kmsKeyArn
+      `Prelude.hashWithSalt` path
+      `Prelude.hashWithSalt` roleArn
+
+instance Prelude.NFData S3Config where
+  rnf S3Config' {..} =
+    Prelude.rnf kmsKeyArn
+      `Prelude.seq` Prelude.rnf path
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance Data.ToJSON S3Config where
+  toJSON S3Config' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("KMSKeyArn" Data..=) Prelude.<$> kmsKeyArn,
+            Prelude.Just ("Path" Data..= path),
+            Prelude.Just ("RoleArn" Data..= roleArn)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/ScalingType.hs b/gen/Amazonka/Forecast/Types/ScalingType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/ScalingType.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.ScalingType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.ScalingType
+  ( ScalingType
+      ( ..,
+        ScalingType_Auto,
+        ScalingType_Linear,
+        ScalingType_Logarithmic,
+        ScalingType_ReverseLogarithmic
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ScalingType = ScalingType'
+  { fromScalingType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ScalingType_Auto :: ScalingType
+pattern ScalingType_Auto = ScalingType' "Auto"
+
+pattern ScalingType_Linear :: ScalingType
+pattern ScalingType_Linear = ScalingType' "Linear"
+
+pattern ScalingType_Logarithmic :: ScalingType
+pattern ScalingType_Logarithmic = ScalingType' "Logarithmic"
+
+pattern ScalingType_ReverseLogarithmic :: ScalingType
+pattern ScalingType_ReverseLogarithmic = ScalingType' "ReverseLogarithmic"
+
+{-# COMPLETE
+  ScalingType_Auto,
+  ScalingType_Linear,
+  ScalingType_Logarithmic,
+  ScalingType_ReverseLogarithmic,
+  ScalingType'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/Schema.hs b/gen/Amazonka/Forecast/Types/Schema.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Schema.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Schema
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Schema where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.SchemaAttribute
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the fields of a dataset.
+--
+-- /See:/ 'newSchema' smart constructor.
+data Schema = Schema'
+  { -- | An array of attributes specifying the name and type of each field in a
+    -- dataset.
+    attributes :: Prelude.Maybe (Prelude.NonEmpty SchemaAttribute)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Schema' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'schema_attributes' - An array of attributes specifying the name and type of each field in a
+-- dataset.
+newSchema ::
+  Schema
+newSchema = Schema' {attributes = Prelude.Nothing}
+
+-- | An array of attributes specifying the name and type of each field in a
+-- dataset.
+schema_attributes :: Lens.Lens' Schema (Prelude.Maybe (Prelude.NonEmpty SchemaAttribute))
+schema_attributes = Lens.lens (\Schema' {attributes} -> attributes) (\s@Schema' {} a -> s {attributes = a} :: Schema) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Schema where
+  parseJSON =
+    Data.withObject
+      "Schema"
+      ( \x ->
+          Schema' Prelude.<$> (x Data..:? "Attributes")
+      )
+
+instance Prelude.Hashable Schema where
+  hashWithSalt _salt Schema' {..} =
+    _salt `Prelude.hashWithSalt` attributes
+
+instance Prelude.NFData Schema where
+  rnf Schema' {..} = Prelude.rnf attributes
+
+instance Data.ToJSON Schema where
+  toJSON Schema' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("Attributes" Data..=) Prelude.<$> attributes]
+      )
diff --git a/gen/Amazonka/Forecast/Types/SchemaAttribute.hs b/gen/Amazonka/Forecast/Types/SchemaAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/SchemaAttribute.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.SchemaAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.SchemaAttribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.AttributeType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An attribute of a schema, which defines a dataset field. A schema
+-- attribute is required for every field in a dataset. The
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_Schema.html Schema>
+-- object contains an array of @SchemaAttribute@ objects.
+--
+-- /See:/ 'newSchemaAttribute' smart constructor.
+data SchemaAttribute = SchemaAttribute'
+  { -- | The name of the dataset field.
+    attributeName :: Prelude.Maybe Prelude.Text,
+    -- | The data type of the field.
+    --
+    -- For a related time series dataset, other than date, item_id, and
+    -- forecast dimensions attributes, all attributes should be of numerical
+    -- type (integer\/float).
+    attributeType :: Prelude.Maybe AttributeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SchemaAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'schemaAttribute_attributeName' - The name of the dataset field.
+--
+-- 'attributeType', 'schemaAttribute_attributeType' - The data type of the field.
+--
+-- For a related time series dataset, other than date, item_id, and
+-- forecast dimensions attributes, all attributes should be of numerical
+-- type (integer\/float).
+newSchemaAttribute ::
+  SchemaAttribute
+newSchemaAttribute =
+  SchemaAttribute'
+    { attributeName = Prelude.Nothing,
+      attributeType = Prelude.Nothing
+    }
+
+-- | The name of the dataset field.
+schemaAttribute_attributeName :: Lens.Lens' SchemaAttribute (Prelude.Maybe Prelude.Text)
+schemaAttribute_attributeName = Lens.lens (\SchemaAttribute' {attributeName} -> attributeName) (\s@SchemaAttribute' {} a -> s {attributeName = a} :: SchemaAttribute)
+
+-- | The data type of the field.
+--
+-- For a related time series dataset, other than date, item_id, and
+-- forecast dimensions attributes, all attributes should be of numerical
+-- type (integer\/float).
+schemaAttribute_attributeType :: Lens.Lens' SchemaAttribute (Prelude.Maybe AttributeType)
+schemaAttribute_attributeType = Lens.lens (\SchemaAttribute' {attributeType} -> attributeType) (\s@SchemaAttribute' {} a -> s {attributeType = a} :: SchemaAttribute)
+
+instance Data.FromJSON SchemaAttribute where
+  parseJSON =
+    Data.withObject
+      "SchemaAttribute"
+      ( \x ->
+          SchemaAttribute'
+            Prelude.<$> (x Data..:? "AttributeName")
+            Prelude.<*> (x Data..:? "AttributeType")
+      )
+
+instance Prelude.Hashable SchemaAttribute where
+  hashWithSalt _salt SchemaAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` attributeType
+
+instance Prelude.NFData SchemaAttribute where
+  rnf SchemaAttribute' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf attributeType
+
+instance Data.ToJSON SchemaAttribute where
+  toJSON SchemaAttribute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttributeName" Data..=) Prelude.<$> attributeName,
+            ("AttributeType" Data..=) Prelude.<$> attributeType
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/State.hs b/gen/Amazonka/Forecast/Types/State.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/State.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.State
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.State
+  ( State
+      ( ..,
+        State_Active,
+        State_Deleted
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype State = State' {fromState :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern State_Active :: State
+pattern State_Active = State' "Active"
+
+pattern State_Deleted :: State
+pattern State_Deleted = State' "Deleted"
+
+{-# COMPLETE
+  State_Active,
+  State_Deleted,
+  State'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/Statistics.hs b/gen/Amazonka/Forecast/Types/Statistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Statistics.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Statistics
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Statistics where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides statistics for each data field imported into to an Amazon
+-- Forecast dataset with the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_CreateDatasetImportJob.html CreateDatasetImportJob>
+-- operation.
+--
+-- /See:/ 'newStatistics' smart constructor.
+data Statistics = Statistics'
+  { -- | For a numeric field, the average value in the field.
+    avg :: Prelude.Maybe Prelude.Double,
+    -- | The number of values in the field. If the response value is -1, refer to
+    -- @CountLong@.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The number of distinct values in the field. If the response value is -1,
+    -- refer to @CountDistinctLong@.
+    countDistinct :: Prelude.Maybe Prelude.Int,
+    -- | The number of distinct values in the field. @CountDistinctLong@ is used
+    -- instead of @CountDistinct@ if the value is greater than 2,147,483,647.
+    countDistinctLong :: Prelude.Maybe Prelude.Integer,
+    -- | The number of values in the field. @CountLong@ is used instead of
+    -- @Count@ if the value is greater than 2,147,483,647.
+    countLong :: Prelude.Maybe Prelude.Integer,
+    -- | The number of NAN (not a number) values in the field. If the response
+    -- value is -1, refer to @CountNanLong@.
+    countNan :: Prelude.Maybe Prelude.Int,
+    -- | The number of NAN (not a number) values in the field. @CountNanLong@ is
+    -- used instead of @CountNan@ if the value is greater than 2,147,483,647.
+    countNanLong :: Prelude.Maybe Prelude.Integer,
+    -- | The number of null values in the field. If the response value is -1,
+    -- refer to @CountNullLong@.
+    countNull :: Prelude.Maybe Prelude.Int,
+    -- | The number of null values in the field. @CountNullLong@ is used instead
+    -- of @CountNull@ if the value is greater than 2,147,483,647.
+    countNullLong :: Prelude.Maybe Prelude.Integer,
+    -- | For a numeric field, the maximum value in the field.
+    max :: Prelude.Maybe Prelude.Text,
+    -- | For a numeric field, the minimum value in the field.
+    min :: Prelude.Maybe Prelude.Text,
+    -- | For a numeric field, the standard deviation.
+    stddev :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Statistics' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'avg', 'statistics_avg' - For a numeric field, the average value in the field.
+--
+-- 'count', 'statistics_count' - The number of values in the field. If the response value is -1, refer to
+-- @CountLong@.
+--
+-- 'countDistinct', 'statistics_countDistinct' - The number of distinct values in the field. If the response value is -1,
+-- refer to @CountDistinctLong@.
+--
+-- 'countDistinctLong', 'statistics_countDistinctLong' - The number of distinct values in the field. @CountDistinctLong@ is used
+-- instead of @CountDistinct@ if the value is greater than 2,147,483,647.
+--
+-- 'countLong', 'statistics_countLong' - The number of values in the field. @CountLong@ is used instead of
+-- @Count@ if the value is greater than 2,147,483,647.
+--
+-- 'countNan', 'statistics_countNan' - The number of NAN (not a number) values in the field. If the response
+-- value is -1, refer to @CountNanLong@.
+--
+-- 'countNanLong', 'statistics_countNanLong' - The number of NAN (not a number) values in the field. @CountNanLong@ is
+-- used instead of @CountNan@ if the value is greater than 2,147,483,647.
+--
+-- 'countNull', 'statistics_countNull' - The number of null values in the field. If the response value is -1,
+-- refer to @CountNullLong@.
+--
+-- 'countNullLong', 'statistics_countNullLong' - The number of null values in the field. @CountNullLong@ is used instead
+-- of @CountNull@ if the value is greater than 2,147,483,647.
+--
+-- 'max', 'statistics_max' - For a numeric field, the maximum value in the field.
+--
+-- 'min', 'statistics_min' - For a numeric field, the minimum value in the field.
+--
+-- 'stddev', 'statistics_stddev' - For a numeric field, the standard deviation.
+newStatistics ::
+  Statistics
+newStatistics =
+  Statistics'
+    { avg = Prelude.Nothing,
+      count = Prelude.Nothing,
+      countDistinct = Prelude.Nothing,
+      countDistinctLong = Prelude.Nothing,
+      countLong = Prelude.Nothing,
+      countNan = Prelude.Nothing,
+      countNanLong = Prelude.Nothing,
+      countNull = Prelude.Nothing,
+      countNullLong = Prelude.Nothing,
+      max = Prelude.Nothing,
+      min = Prelude.Nothing,
+      stddev = Prelude.Nothing
+    }
+
+-- | For a numeric field, the average value in the field.
+statistics_avg :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Double)
+statistics_avg = Lens.lens (\Statistics' {avg} -> avg) (\s@Statistics' {} a -> s {avg = a} :: Statistics)
+
+-- | The number of values in the field. If the response value is -1, refer to
+-- @CountLong@.
+statistics_count :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Int)
+statistics_count = Lens.lens (\Statistics' {count} -> count) (\s@Statistics' {} a -> s {count = a} :: Statistics)
+
+-- | The number of distinct values in the field. If the response value is -1,
+-- refer to @CountDistinctLong@.
+statistics_countDistinct :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Int)
+statistics_countDistinct = Lens.lens (\Statistics' {countDistinct} -> countDistinct) (\s@Statistics' {} a -> s {countDistinct = a} :: Statistics)
+
+-- | The number of distinct values in the field. @CountDistinctLong@ is used
+-- instead of @CountDistinct@ if the value is greater than 2,147,483,647.
+statistics_countDistinctLong :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Integer)
+statistics_countDistinctLong = Lens.lens (\Statistics' {countDistinctLong} -> countDistinctLong) (\s@Statistics' {} a -> s {countDistinctLong = a} :: Statistics)
+
+-- | The number of values in the field. @CountLong@ is used instead of
+-- @Count@ if the value is greater than 2,147,483,647.
+statistics_countLong :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Integer)
+statistics_countLong = Lens.lens (\Statistics' {countLong} -> countLong) (\s@Statistics' {} a -> s {countLong = a} :: Statistics)
+
+-- | The number of NAN (not a number) values in the field. If the response
+-- value is -1, refer to @CountNanLong@.
+statistics_countNan :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Int)
+statistics_countNan = Lens.lens (\Statistics' {countNan} -> countNan) (\s@Statistics' {} a -> s {countNan = a} :: Statistics)
+
+-- | The number of NAN (not a number) values in the field. @CountNanLong@ is
+-- used instead of @CountNan@ if the value is greater than 2,147,483,647.
+statistics_countNanLong :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Integer)
+statistics_countNanLong = Lens.lens (\Statistics' {countNanLong} -> countNanLong) (\s@Statistics' {} a -> s {countNanLong = a} :: Statistics)
+
+-- | The number of null values in the field. If the response value is -1,
+-- refer to @CountNullLong@.
+statistics_countNull :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Int)
+statistics_countNull = Lens.lens (\Statistics' {countNull} -> countNull) (\s@Statistics' {} a -> s {countNull = a} :: Statistics)
+
+-- | The number of null values in the field. @CountNullLong@ is used instead
+-- of @CountNull@ if the value is greater than 2,147,483,647.
+statistics_countNullLong :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Integer)
+statistics_countNullLong = Lens.lens (\Statistics' {countNullLong} -> countNullLong) (\s@Statistics' {} a -> s {countNullLong = a} :: Statistics)
+
+-- | For a numeric field, the maximum value in the field.
+statistics_max :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Text)
+statistics_max = Lens.lens (\Statistics' {max} -> max) (\s@Statistics' {} a -> s {max = a} :: Statistics)
+
+-- | For a numeric field, the minimum value in the field.
+statistics_min :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Text)
+statistics_min = Lens.lens (\Statistics' {min} -> min) (\s@Statistics' {} a -> s {min = a} :: Statistics)
+
+-- | For a numeric field, the standard deviation.
+statistics_stddev :: Lens.Lens' Statistics (Prelude.Maybe Prelude.Double)
+statistics_stddev = Lens.lens (\Statistics' {stddev} -> stddev) (\s@Statistics' {} a -> s {stddev = a} :: Statistics)
+
+instance Data.FromJSON Statistics where
+  parseJSON =
+    Data.withObject
+      "Statistics"
+      ( \x ->
+          Statistics'
+            Prelude.<$> (x Data..:? "Avg")
+            Prelude.<*> (x Data..:? "Count")
+            Prelude.<*> (x Data..:? "CountDistinct")
+            Prelude.<*> (x Data..:? "CountDistinctLong")
+            Prelude.<*> (x Data..:? "CountLong")
+            Prelude.<*> (x Data..:? "CountNan")
+            Prelude.<*> (x Data..:? "CountNanLong")
+            Prelude.<*> (x Data..:? "CountNull")
+            Prelude.<*> (x Data..:? "CountNullLong")
+            Prelude.<*> (x Data..:? "Max")
+            Prelude.<*> (x Data..:? "Min")
+            Prelude.<*> (x Data..:? "Stddev")
+      )
+
+instance Prelude.Hashable Statistics where
+  hashWithSalt _salt Statistics' {..} =
+    _salt
+      `Prelude.hashWithSalt` avg
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` countDistinct
+      `Prelude.hashWithSalt` countDistinctLong
+      `Prelude.hashWithSalt` countLong
+      `Prelude.hashWithSalt` countNan
+      `Prelude.hashWithSalt` countNanLong
+      `Prelude.hashWithSalt` countNull
+      `Prelude.hashWithSalt` countNullLong
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+      `Prelude.hashWithSalt` stddev
+
+instance Prelude.NFData Statistics where
+  rnf Statistics' {..} =
+    Prelude.rnf avg
+      `Prelude.seq` Prelude.rnf count
+      `Prelude.seq` Prelude.rnf countDistinct
+      `Prelude.seq` Prelude.rnf countDistinctLong
+      `Prelude.seq` Prelude.rnf countLong
+      `Prelude.seq` Prelude.rnf countNan
+      `Prelude.seq` Prelude.rnf countNanLong
+      `Prelude.seq` Prelude.rnf countNull
+      `Prelude.seq` Prelude.rnf countNullLong
+      `Prelude.seq` Prelude.rnf max
+      `Prelude.seq` Prelude.rnf min
+      `Prelude.seq` Prelude.rnf stddev
diff --git a/gen/Amazonka/Forecast/Types/SupplementaryFeature.hs b/gen/Amazonka/Forecast/Types/SupplementaryFeature.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/SupplementaryFeature.hs
@@ -0,0 +1,537 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.SupplementaryFeature
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.SupplementaryFeature where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | This object belongs to the CreatePredictor operation. If you created
+-- your predictor with CreateAutoPredictor, see AdditionalDataset.
+--
+-- Describes a supplementary feature of a dataset group. This object is
+-- part of the InputDataConfig object. Forecast supports the Weather Index
+-- and Holidays built-in featurizations.
+--
+-- __Weather Index__
+--
+-- The Amazon Forecast Weather Index is a built-in featurization that
+-- incorporates historical and projected weather information into your
+-- model. The Weather Index supplements your datasets with over two years
+-- of historical weather data and up to 14 days of projected weather data.
+-- For more information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/weather.html Amazon Forecast Weather Index>.
+--
+-- __Holidays__
+--
+-- Holidays is a built-in featurization that incorporates a
+-- feature-engineered dataset of national holiday information into your
+-- model. It provides native support for the holiday calendars of 66
+-- countries. To view the holiday calendars, refer to the
+-- <http://jollyday.sourceforge.net/data.html Jollyday> library. For more
+-- information, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/holidays.html Holidays Featurization>.
+--
+-- /See:/ 'newSupplementaryFeature' smart constructor.
+data SupplementaryFeature = SupplementaryFeature'
+  { -- | The name of the feature. Valid values: @\"holiday\"@ and @\"weather\"@.
+    name :: Prelude.Text,
+    -- | __Weather Index__
+    --
+    -- To enable the Weather Index, set the value to @\"true\"@
+    --
+    -- __Holidays__
+    --
+    -- To enable Holidays, specify a country with one of the following
+    -- two-letter country codes:
+    --
+    -- -   \"AL\" - ALBANIA
+    --
+    -- -   \"AR\" - ARGENTINA
+    --
+    -- -   \"AT\" - AUSTRIA
+    --
+    -- -   \"AU\" - AUSTRALIA
+    --
+    -- -   \"BA\" - BOSNIA HERZEGOVINA
+    --
+    -- -   \"BE\" - BELGIUM
+    --
+    -- -   \"BG\" - BULGARIA
+    --
+    -- -   \"BO\" - BOLIVIA
+    --
+    -- -   \"BR\" - BRAZIL
+    --
+    -- -   \"BY\" - BELARUS
+    --
+    -- -   \"CA\" - CANADA
+    --
+    -- -   \"CL\" - CHILE
+    --
+    -- -   \"CO\" - COLOMBIA
+    --
+    -- -   \"CR\" - COSTA RICA
+    --
+    -- -   \"HR\" - CROATIA
+    --
+    -- -   \"CZ\" - CZECH REPUBLIC
+    --
+    -- -   \"DK\" - DENMARK
+    --
+    -- -   \"EC\" - ECUADOR
+    --
+    -- -   \"EE\" - ESTONIA
+    --
+    -- -   \"ET\" - ETHIOPIA
+    --
+    -- -   \"FI\" - FINLAND
+    --
+    -- -   \"FR\" - FRANCE
+    --
+    -- -   \"DE\" - GERMANY
+    --
+    -- -   \"GR\" - GREECE
+    --
+    -- -   \"HU\" - HUNGARY
+    --
+    -- -   \"IS\" - ICELAND
+    --
+    -- -   \"IN\" - INDIA
+    --
+    -- -   \"IE\" - IRELAND
+    --
+    -- -   \"IT\" - ITALY
+    --
+    -- -   \"JP\" - JAPAN
+    --
+    -- -   \"KZ\" - KAZAKHSTAN
+    --
+    -- -   \"KR\" - KOREA
+    --
+    -- -   \"LV\" - LATVIA
+    --
+    -- -   \"LI\" - LIECHTENSTEIN
+    --
+    -- -   \"LT\" - LITHUANIA
+    --
+    -- -   \"LU\" - LUXEMBOURG
+    --
+    -- -   \"MK\" - MACEDONIA
+    --
+    -- -   \"MT\" - MALTA
+    --
+    -- -   \"MX\" - MEXICO
+    --
+    -- -   \"MD\" - MOLDOVA
+    --
+    -- -   \"ME\" - MONTENEGRO
+    --
+    -- -   \"NL\" - NETHERLANDS
+    --
+    -- -   \"NZ\" - NEW ZEALAND
+    --
+    -- -   \"NI\" - NICARAGUA
+    --
+    -- -   \"NG\" - NIGERIA
+    --
+    -- -   \"NO\" - NORWAY
+    --
+    -- -   \"PA\" - PANAMA
+    --
+    -- -   \"PY\" - PARAGUAY
+    --
+    -- -   \"PE\" - PERU
+    --
+    -- -   \"PL\" - POLAND
+    --
+    -- -   \"PT\" - PORTUGAL
+    --
+    -- -   \"RO\" - ROMANIA
+    --
+    -- -   \"RU\" - RUSSIA
+    --
+    -- -   \"RS\" - SERBIA
+    --
+    -- -   \"SK\" - SLOVAKIA
+    --
+    -- -   \"SI\" - SLOVENIA
+    --
+    -- -   \"ZA\" - SOUTH AFRICA
+    --
+    -- -   \"ES\" - SPAIN
+    --
+    -- -   \"SE\" - SWEDEN
+    --
+    -- -   \"CH\" - SWITZERLAND
+    --
+    -- -   \"UA\" - UKRAINE
+    --
+    -- -   \"AE\" - UNITED ARAB EMIRATES
+    --
+    -- -   \"US\" - UNITED STATES
+    --
+    -- -   \"UK\" - UNITED KINGDOM
+    --
+    -- -   \"UY\" - URUGUAY
+    --
+    -- -   \"VE\" - VENEZUELA
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SupplementaryFeature' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'supplementaryFeature_name' - The name of the feature. Valid values: @\"holiday\"@ and @\"weather\"@.
+--
+-- 'value', 'supplementaryFeature_value' - __Weather Index__
+--
+-- To enable the Weather Index, set the value to @\"true\"@
+--
+-- __Holidays__
+--
+-- To enable Holidays, specify a country with one of the following
+-- two-letter country codes:
+--
+-- -   \"AL\" - ALBANIA
+--
+-- -   \"AR\" - ARGENTINA
+--
+-- -   \"AT\" - AUSTRIA
+--
+-- -   \"AU\" - AUSTRALIA
+--
+-- -   \"BA\" - BOSNIA HERZEGOVINA
+--
+-- -   \"BE\" - BELGIUM
+--
+-- -   \"BG\" - BULGARIA
+--
+-- -   \"BO\" - BOLIVIA
+--
+-- -   \"BR\" - BRAZIL
+--
+-- -   \"BY\" - BELARUS
+--
+-- -   \"CA\" - CANADA
+--
+-- -   \"CL\" - CHILE
+--
+-- -   \"CO\" - COLOMBIA
+--
+-- -   \"CR\" - COSTA RICA
+--
+-- -   \"HR\" - CROATIA
+--
+-- -   \"CZ\" - CZECH REPUBLIC
+--
+-- -   \"DK\" - DENMARK
+--
+-- -   \"EC\" - ECUADOR
+--
+-- -   \"EE\" - ESTONIA
+--
+-- -   \"ET\" - ETHIOPIA
+--
+-- -   \"FI\" - FINLAND
+--
+-- -   \"FR\" - FRANCE
+--
+-- -   \"DE\" - GERMANY
+--
+-- -   \"GR\" - GREECE
+--
+-- -   \"HU\" - HUNGARY
+--
+-- -   \"IS\" - ICELAND
+--
+-- -   \"IN\" - INDIA
+--
+-- -   \"IE\" - IRELAND
+--
+-- -   \"IT\" - ITALY
+--
+-- -   \"JP\" - JAPAN
+--
+-- -   \"KZ\" - KAZAKHSTAN
+--
+-- -   \"KR\" - KOREA
+--
+-- -   \"LV\" - LATVIA
+--
+-- -   \"LI\" - LIECHTENSTEIN
+--
+-- -   \"LT\" - LITHUANIA
+--
+-- -   \"LU\" - LUXEMBOURG
+--
+-- -   \"MK\" - MACEDONIA
+--
+-- -   \"MT\" - MALTA
+--
+-- -   \"MX\" - MEXICO
+--
+-- -   \"MD\" - MOLDOVA
+--
+-- -   \"ME\" - MONTENEGRO
+--
+-- -   \"NL\" - NETHERLANDS
+--
+-- -   \"NZ\" - NEW ZEALAND
+--
+-- -   \"NI\" - NICARAGUA
+--
+-- -   \"NG\" - NIGERIA
+--
+-- -   \"NO\" - NORWAY
+--
+-- -   \"PA\" - PANAMA
+--
+-- -   \"PY\" - PARAGUAY
+--
+-- -   \"PE\" - PERU
+--
+-- -   \"PL\" - POLAND
+--
+-- -   \"PT\" - PORTUGAL
+--
+-- -   \"RO\" - ROMANIA
+--
+-- -   \"RU\" - RUSSIA
+--
+-- -   \"RS\" - SERBIA
+--
+-- -   \"SK\" - SLOVAKIA
+--
+-- -   \"SI\" - SLOVENIA
+--
+-- -   \"ZA\" - SOUTH AFRICA
+--
+-- -   \"ES\" - SPAIN
+--
+-- -   \"SE\" - SWEDEN
+--
+-- -   \"CH\" - SWITZERLAND
+--
+-- -   \"UA\" - UKRAINE
+--
+-- -   \"AE\" - UNITED ARAB EMIRATES
+--
+-- -   \"US\" - UNITED STATES
+--
+-- -   \"UK\" - UNITED KINGDOM
+--
+-- -   \"UY\" - URUGUAY
+--
+-- -   \"VE\" - VENEZUELA
+newSupplementaryFeature ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  SupplementaryFeature
+newSupplementaryFeature pName_ pValue_ =
+  SupplementaryFeature'
+    { name = pName_,
+      value = pValue_
+    }
+
+-- | The name of the feature. Valid values: @\"holiday\"@ and @\"weather\"@.
+supplementaryFeature_name :: Lens.Lens' SupplementaryFeature Prelude.Text
+supplementaryFeature_name = Lens.lens (\SupplementaryFeature' {name} -> name) (\s@SupplementaryFeature' {} a -> s {name = a} :: SupplementaryFeature)
+
+-- | __Weather Index__
+--
+-- To enable the Weather Index, set the value to @\"true\"@
+--
+-- __Holidays__
+--
+-- To enable Holidays, specify a country with one of the following
+-- two-letter country codes:
+--
+-- -   \"AL\" - ALBANIA
+--
+-- -   \"AR\" - ARGENTINA
+--
+-- -   \"AT\" - AUSTRIA
+--
+-- -   \"AU\" - AUSTRALIA
+--
+-- -   \"BA\" - BOSNIA HERZEGOVINA
+--
+-- -   \"BE\" - BELGIUM
+--
+-- -   \"BG\" - BULGARIA
+--
+-- -   \"BO\" - BOLIVIA
+--
+-- -   \"BR\" - BRAZIL
+--
+-- -   \"BY\" - BELARUS
+--
+-- -   \"CA\" - CANADA
+--
+-- -   \"CL\" - CHILE
+--
+-- -   \"CO\" - COLOMBIA
+--
+-- -   \"CR\" - COSTA RICA
+--
+-- -   \"HR\" - CROATIA
+--
+-- -   \"CZ\" - CZECH REPUBLIC
+--
+-- -   \"DK\" - DENMARK
+--
+-- -   \"EC\" - ECUADOR
+--
+-- -   \"EE\" - ESTONIA
+--
+-- -   \"ET\" - ETHIOPIA
+--
+-- -   \"FI\" - FINLAND
+--
+-- -   \"FR\" - FRANCE
+--
+-- -   \"DE\" - GERMANY
+--
+-- -   \"GR\" - GREECE
+--
+-- -   \"HU\" - HUNGARY
+--
+-- -   \"IS\" - ICELAND
+--
+-- -   \"IN\" - INDIA
+--
+-- -   \"IE\" - IRELAND
+--
+-- -   \"IT\" - ITALY
+--
+-- -   \"JP\" - JAPAN
+--
+-- -   \"KZ\" - KAZAKHSTAN
+--
+-- -   \"KR\" - KOREA
+--
+-- -   \"LV\" - LATVIA
+--
+-- -   \"LI\" - LIECHTENSTEIN
+--
+-- -   \"LT\" - LITHUANIA
+--
+-- -   \"LU\" - LUXEMBOURG
+--
+-- -   \"MK\" - MACEDONIA
+--
+-- -   \"MT\" - MALTA
+--
+-- -   \"MX\" - MEXICO
+--
+-- -   \"MD\" - MOLDOVA
+--
+-- -   \"ME\" - MONTENEGRO
+--
+-- -   \"NL\" - NETHERLANDS
+--
+-- -   \"NZ\" - NEW ZEALAND
+--
+-- -   \"NI\" - NICARAGUA
+--
+-- -   \"NG\" - NIGERIA
+--
+-- -   \"NO\" - NORWAY
+--
+-- -   \"PA\" - PANAMA
+--
+-- -   \"PY\" - PARAGUAY
+--
+-- -   \"PE\" - PERU
+--
+-- -   \"PL\" - POLAND
+--
+-- -   \"PT\" - PORTUGAL
+--
+-- -   \"RO\" - ROMANIA
+--
+-- -   \"RU\" - RUSSIA
+--
+-- -   \"RS\" - SERBIA
+--
+-- -   \"SK\" - SLOVAKIA
+--
+-- -   \"SI\" - SLOVENIA
+--
+-- -   \"ZA\" - SOUTH AFRICA
+--
+-- -   \"ES\" - SPAIN
+--
+-- -   \"SE\" - SWEDEN
+--
+-- -   \"CH\" - SWITZERLAND
+--
+-- -   \"UA\" - UKRAINE
+--
+-- -   \"AE\" - UNITED ARAB EMIRATES
+--
+-- -   \"US\" - UNITED STATES
+--
+-- -   \"UK\" - UNITED KINGDOM
+--
+-- -   \"UY\" - URUGUAY
+--
+-- -   \"VE\" - VENEZUELA
+supplementaryFeature_value :: Lens.Lens' SupplementaryFeature Prelude.Text
+supplementaryFeature_value = Lens.lens (\SupplementaryFeature' {value} -> value) (\s@SupplementaryFeature' {} a -> s {value = a} :: SupplementaryFeature)
+
+instance Data.FromJSON SupplementaryFeature where
+  parseJSON =
+    Data.withObject
+      "SupplementaryFeature"
+      ( \x ->
+          SupplementaryFeature'
+            Prelude.<$> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable SupplementaryFeature where
+  hashWithSalt _salt SupplementaryFeature' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData SupplementaryFeature where
+  rnf SupplementaryFeature' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON SupplementaryFeature where
+  toJSON SupplementaryFeature' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/Tag.hs b/gen/Amazonka/Forecast/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/Tag.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The optional metadata that you apply to a resource to help you
+-- categorize and organize them. Each tag consists of a key and an optional
+-- value, both of which you define.
+--
+-- The following basic restrictions apply to tags:
+--
+-- -   Maximum number of tags per resource - 50.
+--
+-- -   For each resource, each tag key must be unique, and each tag key can
+--     have only one value.
+--
+-- -   Maximum key length - 128 Unicode characters in UTF-8.
+--
+-- -   Maximum value length - 256 Unicode characters in UTF-8.
+--
+-- -   If your tagging schema is used across multiple services and
+--     resources, remember that other services may have restrictions on
+--     allowed characters. Generally allowed characters are: letters,
+--     numbers, and spaces representable in UTF-8, and the following
+--     characters: + - = . _ : \/ \@.
+--
+-- -   Tag keys and values are case sensitive.
+--
+-- -   Do not use @aws:@, @AWS:@, or any upper or lowercase combination of
+--     such as a prefix for keys as it is reserved for AWS use. You cannot
+--     edit or delete tag keys with this prefix. Values can have this
+--     prefix. If a tag value has @aws@ as its prefix but the key does not,
+--     then Forecast considers it to be a user tag and will count against
+--     the limit of 50 tags. Tags with only the key prefix of @aws@ do not
+--     count against your tags per resource limit.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | One part of a key-value pair that makes up a tag. A @key@ is a general
+    -- label that acts like a category for more specific tag values.
+    key :: Data.Sensitive Prelude.Text,
+    -- | The optional part of a key-value pair that makes up a tag. A @value@
+    -- acts as a descriptor within a tag category (key).
+    value :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - One part of a key-value pair that makes up a tag. A @key@ is a general
+-- label that acts like a category for more specific tag values.
+--
+-- 'value', 'tag_value' - The optional part of a key-value pair that makes up a tag. A @value@
+-- acts as a descriptor within a tag category (key).
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag'
+    { key = Data._Sensitive Lens.# pKey_,
+      value = Data._Sensitive Lens.# pValue_
+    }
+
+-- | One part of a key-value pair that makes up a tag. A @key@ is a general
+-- label that acts like a category for more specific tag values.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag) Prelude.. Data._Sensitive
+
+-- | The optional part of a key-value pair that makes up a tag. A @value@
+-- acts as a descriptor within a tag category (key).
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag) Prelude.. Data._Sensitive
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/TestWindowSummary.hs b/gen/Amazonka/Forecast/Types/TestWindowSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TestWindowSummary.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TestWindowSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TestWindowSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status, start time, and end time of a backtest, as well as a failure
+-- reason if applicable.
+--
+-- /See:/ 'newTestWindowSummary' smart constructor.
+data TestWindowSummary = TestWindowSummary'
+  { -- | If the test failed, the reason why it failed.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the test. Possible status values are:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_IN_PROGRESS@
+    --
+    -- -   @CREATE_FAILED@
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the test ended.
+    testWindowEnd :: Prelude.Maybe Data.POSIX,
+    -- | The time at which the test began.
+    testWindowStart :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TestWindowSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'message', 'testWindowSummary_message' - If the test failed, the reason why it failed.
+--
+-- 'status', 'testWindowSummary_status' - The status of the test. Possible status values are:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_IN_PROGRESS@
+--
+-- -   @CREATE_FAILED@
+--
+-- 'testWindowEnd', 'testWindowSummary_testWindowEnd' - The time at which the test ended.
+--
+-- 'testWindowStart', 'testWindowSummary_testWindowStart' - The time at which the test began.
+newTestWindowSummary ::
+  TestWindowSummary
+newTestWindowSummary =
+  TestWindowSummary'
+    { message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      testWindowEnd = Prelude.Nothing,
+      testWindowStart = Prelude.Nothing
+    }
+
+-- | If the test failed, the reason why it failed.
+testWindowSummary_message :: Lens.Lens' TestWindowSummary (Prelude.Maybe Prelude.Text)
+testWindowSummary_message = Lens.lens (\TestWindowSummary' {message} -> message) (\s@TestWindowSummary' {} a -> s {message = a} :: TestWindowSummary)
+
+-- | The status of the test. Possible status values are:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_IN_PROGRESS@
+--
+-- -   @CREATE_FAILED@
+testWindowSummary_status :: Lens.Lens' TestWindowSummary (Prelude.Maybe Prelude.Text)
+testWindowSummary_status = Lens.lens (\TestWindowSummary' {status} -> status) (\s@TestWindowSummary' {} a -> s {status = a} :: TestWindowSummary)
+
+-- | The time at which the test ended.
+testWindowSummary_testWindowEnd :: Lens.Lens' TestWindowSummary (Prelude.Maybe Prelude.UTCTime)
+testWindowSummary_testWindowEnd = Lens.lens (\TestWindowSummary' {testWindowEnd} -> testWindowEnd) (\s@TestWindowSummary' {} a -> s {testWindowEnd = a} :: TestWindowSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the test began.
+testWindowSummary_testWindowStart :: Lens.Lens' TestWindowSummary (Prelude.Maybe Prelude.UTCTime)
+testWindowSummary_testWindowStart = Lens.lens (\TestWindowSummary' {testWindowStart} -> testWindowStart) (\s@TestWindowSummary' {} a -> s {testWindowStart = a} :: TestWindowSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON TestWindowSummary where
+  parseJSON =
+    Data.withObject
+      "TestWindowSummary"
+      ( \x ->
+          TestWindowSummary'
+            Prelude.<$> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "TestWindowEnd")
+            Prelude.<*> (x Data..:? "TestWindowStart")
+      )
+
+instance Prelude.Hashable TestWindowSummary where
+  hashWithSalt _salt TestWindowSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` testWindowEnd
+      `Prelude.hashWithSalt` testWindowStart
+
+instance Prelude.NFData TestWindowSummary where
+  rnf TestWindowSummary' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf testWindowEnd
+      `Prelude.seq` Prelude.rnf testWindowStart
diff --git a/gen/Amazonka/Forecast/Types/TimeAlignmentBoundary.hs b/gen/Amazonka/Forecast/Types/TimeAlignmentBoundary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TimeAlignmentBoundary.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TimeAlignmentBoundary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TimeAlignmentBoundary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.DayOfWeek
+import Amazonka.Forecast.Types.Month
+import qualified Amazonka.Prelude as Prelude
+
+-- | The time boundary Forecast uses to align and aggregate your data to
+-- match your forecast frequency. Provide the unit of time and the time
+-- boundary as a key value pair. If you don\'t provide a time boundary,
+-- Forecast uses a set of
+-- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html#default-time-boundaries Default Time Boundaries>.
+--
+-- For more information about aggregation, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html Data Aggregation for Different Forecast Frequencies>.
+-- For more information setting a custom time boundary, see
+-- <https://docs.aws.amazon.com/forecast/latest/dg/data-aggregation.html#specifying-time-boundary Specifying a Time Boundary>.
+--
+-- /See:/ 'newTimeAlignmentBoundary' smart constructor.
+data TimeAlignmentBoundary = TimeAlignmentBoundary'
+  { -- | The day of the month to use for time alignment during aggregation.
+    dayOfMonth :: Prelude.Maybe Prelude.Natural,
+    -- | The day of week to use for time alignment during aggregation. The day
+    -- must be in uppercase.
+    dayOfWeek :: Prelude.Maybe DayOfWeek,
+    -- | The hour of day to use for time alignment during aggregation.
+    hour :: Prelude.Maybe Prelude.Natural,
+    -- | The month to use for time alignment during aggregation. The month must
+    -- be in uppercase.
+    month :: Prelude.Maybe Month
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeAlignmentBoundary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dayOfMonth', 'timeAlignmentBoundary_dayOfMonth' - The day of the month to use for time alignment during aggregation.
+--
+-- 'dayOfWeek', 'timeAlignmentBoundary_dayOfWeek' - The day of week to use for time alignment during aggregation. The day
+-- must be in uppercase.
+--
+-- 'hour', 'timeAlignmentBoundary_hour' - The hour of day to use for time alignment during aggregation.
+--
+-- 'month', 'timeAlignmentBoundary_month' - The month to use for time alignment during aggregation. The month must
+-- be in uppercase.
+newTimeAlignmentBoundary ::
+  TimeAlignmentBoundary
+newTimeAlignmentBoundary =
+  TimeAlignmentBoundary'
+    { dayOfMonth =
+        Prelude.Nothing,
+      dayOfWeek = Prelude.Nothing,
+      hour = Prelude.Nothing,
+      month = Prelude.Nothing
+    }
+
+-- | The day of the month to use for time alignment during aggregation.
+timeAlignmentBoundary_dayOfMonth :: Lens.Lens' TimeAlignmentBoundary (Prelude.Maybe Prelude.Natural)
+timeAlignmentBoundary_dayOfMonth = Lens.lens (\TimeAlignmentBoundary' {dayOfMonth} -> dayOfMonth) (\s@TimeAlignmentBoundary' {} a -> s {dayOfMonth = a} :: TimeAlignmentBoundary)
+
+-- | The day of week to use for time alignment during aggregation. The day
+-- must be in uppercase.
+timeAlignmentBoundary_dayOfWeek :: Lens.Lens' TimeAlignmentBoundary (Prelude.Maybe DayOfWeek)
+timeAlignmentBoundary_dayOfWeek = Lens.lens (\TimeAlignmentBoundary' {dayOfWeek} -> dayOfWeek) (\s@TimeAlignmentBoundary' {} a -> s {dayOfWeek = a} :: TimeAlignmentBoundary)
+
+-- | The hour of day to use for time alignment during aggregation.
+timeAlignmentBoundary_hour :: Lens.Lens' TimeAlignmentBoundary (Prelude.Maybe Prelude.Natural)
+timeAlignmentBoundary_hour = Lens.lens (\TimeAlignmentBoundary' {hour} -> hour) (\s@TimeAlignmentBoundary' {} a -> s {hour = a} :: TimeAlignmentBoundary)
+
+-- | The month to use for time alignment during aggregation. The month must
+-- be in uppercase.
+timeAlignmentBoundary_month :: Lens.Lens' TimeAlignmentBoundary (Prelude.Maybe Month)
+timeAlignmentBoundary_month = Lens.lens (\TimeAlignmentBoundary' {month} -> month) (\s@TimeAlignmentBoundary' {} a -> s {month = a} :: TimeAlignmentBoundary)
+
+instance Data.FromJSON TimeAlignmentBoundary where
+  parseJSON =
+    Data.withObject
+      "TimeAlignmentBoundary"
+      ( \x ->
+          TimeAlignmentBoundary'
+            Prelude.<$> (x Data..:? "DayOfMonth")
+            Prelude.<*> (x Data..:? "DayOfWeek")
+            Prelude.<*> (x Data..:? "Hour")
+            Prelude.<*> (x Data..:? "Month")
+      )
+
+instance Prelude.Hashable TimeAlignmentBoundary where
+  hashWithSalt _salt TimeAlignmentBoundary' {..} =
+    _salt
+      `Prelude.hashWithSalt` dayOfMonth
+      `Prelude.hashWithSalt` dayOfWeek
+      `Prelude.hashWithSalt` hour
+      `Prelude.hashWithSalt` month
+
+instance Prelude.NFData TimeAlignmentBoundary where
+  rnf TimeAlignmentBoundary' {..} =
+    Prelude.rnf dayOfMonth
+      `Prelude.seq` Prelude.rnf dayOfWeek
+      `Prelude.seq` Prelude.rnf hour
+      `Prelude.seq` Prelude.rnf month
+
+instance Data.ToJSON TimeAlignmentBoundary where
+  toJSON TimeAlignmentBoundary' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DayOfMonth" Data..=) Prelude.<$> dayOfMonth,
+            ("DayOfWeek" Data..=) Prelude.<$> dayOfWeek,
+            ("Hour" Data..=) Prelude.<$> hour,
+            ("Month" Data..=) Prelude.<$> month
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/TimePointGranularity.hs b/gen/Amazonka/Forecast/Types/TimePointGranularity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TimePointGranularity.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TimePointGranularity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TimePointGranularity
+  ( TimePointGranularity
+      ( ..,
+        TimePointGranularity_ALL,
+        TimePointGranularity_SPECIFIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TimePointGranularity = TimePointGranularity'
+  { fromTimePointGranularity ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TimePointGranularity_ALL :: TimePointGranularity
+pattern TimePointGranularity_ALL = TimePointGranularity' "ALL"
+
+pattern TimePointGranularity_SPECIFIC :: TimePointGranularity
+pattern TimePointGranularity_SPECIFIC = TimePointGranularity' "SPECIFIC"
+
+{-# COMPLETE
+  TimePointGranularity_ALL,
+  TimePointGranularity_SPECIFIC,
+  TimePointGranularity'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/TimeSeriesCondition.hs b/gen/Amazonka/Forecast/Types/TimeSeriesCondition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TimeSeriesCondition.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TimeSeriesCondition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TimeSeriesCondition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.Condition
+import qualified Amazonka.Prelude as Prelude
+
+-- | Creates a subset of items within an attribute that are modified. For
+-- example, you can use this operation to create a subset of items that
+-- cost $5 or less. To do this, you specify @\"AttributeName\": \"price\"@,
+-- @\"AttributeValue\": \"5\"@, and @\"Condition\": \"LESS_THAN\"@. Pair
+-- this operation with the Action operation within the
+-- CreateWhatIfForecastRequest$TimeSeriesTransformations operation to
+-- define how the attribute is modified.
+--
+-- /See:/ 'newTimeSeriesCondition' smart constructor.
+data TimeSeriesCondition = TimeSeriesCondition'
+  { -- | The item_id, dimension name, IM name, or timestamp that you are
+    -- modifying.
+    attributeName :: Prelude.Text,
+    -- | The value that is applied for the chosen @Condition@.
+    attributeValue :: Prelude.Text,
+    -- | The condition to apply. Valid values are @EQUALS@, @NOT_EQUALS@,
+    -- @LESS_THAN@ and @GREATER_THAN@.
+    condition :: Condition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeSeriesCondition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'timeSeriesCondition_attributeName' - The item_id, dimension name, IM name, or timestamp that you are
+-- modifying.
+--
+-- 'attributeValue', 'timeSeriesCondition_attributeValue' - The value that is applied for the chosen @Condition@.
+--
+-- 'condition', 'timeSeriesCondition_condition' - The condition to apply. Valid values are @EQUALS@, @NOT_EQUALS@,
+-- @LESS_THAN@ and @GREATER_THAN@.
+newTimeSeriesCondition ::
+  -- | 'attributeName'
+  Prelude.Text ->
+  -- | 'attributeValue'
+  Prelude.Text ->
+  -- | 'condition'
+  Condition ->
+  TimeSeriesCondition
+newTimeSeriesCondition
+  pAttributeName_
+  pAttributeValue_
+  pCondition_ =
+    TimeSeriesCondition'
+      { attributeName =
+          pAttributeName_,
+        attributeValue = pAttributeValue_,
+        condition = pCondition_
+      }
+
+-- | The item_id, dimension name, IM name, or timestamp that you are
+-- modifying.
+timeSeriesCondition_attributeName :: Lens.Lens' TimeSeriesCondition Prelude.Text
+timeSeriesCondition_attributeName = Lens.lens (\TimeSeriesCondition' {attributeName} -> attributeName) (\s@TimeSeriesCondition' {} a -> s {attributeName = a} :: TimeSeriesCondition)
+
+-- | The value that is applied for the chosen @Condition@.
+timeSeriesCondition_attributeValue :: Lens.Lens' TimeSeriesCondition Prelude.Text
+timeSeriesCondition_attributeValue = Lens.lens (\TimeSeriesCondition' {attributeValue} -> attributeValue) (\s@TimeSeriesCondition' {} a -> s {attributeValue = a} :: TimeSeriesCondition)
+
+-- | The condition to apply. Valid values are @EQUALS@, @NOT_EQUALS@,
+-- @LESS_THAN@ and @GREATER_THAN@.
+timeSeriesCondition_condition :: Lens.Lens' TimeSeriesCondition Condition
+timeSeriesCondition_condition = Lens.lens (\TimeSeriesCondition' {condition} -> condition) (\s@TimeSeriesCondition' {} a -> s {condition = a} :: TimeSeriesCondition)
+
+instance Data.FromJSON TimeSeriesCondition where
+  parseJSON =
+    Data.withObject
+      "TimeSeriesCondition"
+      ( \x ->
+          TimeSeriesCondition'
+            Prelude.<$> (x Data..: "AttributeName")
+            Prelude.<*> (x Data..: "AttributeValue")
+            Prelude.<*> (x Data..: "Condition")
+      )
+
+instance Prelude.Hashable TimeSeriesCondition where
+  hashWithSalt _salt TimeSeriesCondition' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` attributeValue
+      `Prelude.hashWithSalt` condition
+
+instance Prelude.NFData TimeSeriesCondition where
+  rnf TimeSeriesCondition' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf attributeValue
+      `Prelude.seq` Prelude.rnf condition
+
+instance Data.ToJSON TimeSeriesCondition where
+  toJSON TimeSeriesCondition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("AttributeName" Data..= attributeName),
+            Prelude.Just
+              ("AttributeValue" Data..= attributeValue),
+            Prelude.Just ("Condition" Data..= condition)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/TimeSeriesGranularity.hs b/gen/Amazonka/Forecast/Types/TimeSeriesGranularity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TimeSeriesGranularity.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TimeSeriesGranularity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TimeSeriesGranularity
+  ( TimeSeriesGranularity
+      ( ..,
+        TimeSeriesGranularity_ALL,
+        TimeSeriesGranularity_SPECIFIC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TimeSeriesGranularity = TimeSeriesGranularity'
+  { fromTimeSeriesGranularity ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TimeSeriesGranularity_ALL :: TimeSeriesGranularity
+pattern TimeSeriesGranularity_ALL = TimeSeriesGranularity' "ALL"
+
+pattern TimeSeriesGranularity_SPECIFIC :: TimeSeriesGranularity
+pattern TimeSeriesGranularity_SPECIFIC = TimeSeriesGranularity' "SPECIFIC"
+
+{-# COMPLETE
+  TimeSeriesGranularity_ALL,
+  TimeSeriesGranularity_SPECIFIC,
+  TimeSeriesGranularity'
+  #-}
diff --git a/gen/Amazonka/Forecast/Types/TimeSeriesIdentifiers.hs b/gen/Amazonka/Forecast/Types/TimeSeriesIdentifiers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TimeSeriesIdentifiers.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TimeSeriesIdentifiers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TimeSeriesIdentifiers where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.DataSource
+import Amazonka.Forecast.Types.Schema
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the import file that contains the time series for which
+-- you want to create forecasts.
+--
+-- /See:/ 'newTimeSeriesIdentifiers' smart constructor.
+data TimeSeriesIdentifiers = TimeSeriesIdentifiers'
+  { dataSource :: Prelude.Maybe DataSource,
+    -- | The format of the data, either CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    schema :: Prelude.Maybe Schema
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeSeriesIdentifiers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSource', 'timeSeriesIdentifiers_dataSource' - Undocumented member.
+--
+-- 'format', 'timeSeriesIdentifiers_format' - The format of the data, either CSV or PARQUET.
+--
+-- 'schema', 'timeSeriesIdentifiers_schema' - Undocumented member.
+newTimeSeriesIdentifiers ::
+  TimeSeriesIdentifiers
+newTimeSeriesIdentifiers =
+  TimeSeriesIdentifiers'
+    { dataSource =
+        Prelude.Nothing,
+      format = Prelude.Nothing,
+      schema = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+timeSeriesIdentifiers_dataSource :: Lens.Lens' TimeSeriesIdentifiers (Prelude.Maybe DataSource)
+timeSeriesIdentifiers_dataSource = Lens.lens (\TimeSeriesIdentifiers' {dataSource} -> dataSource) (\s@TimeSeriesIdentifiers' {} a -> s {dataSource = a} :: TimeSeriesIdentifiers)
+
+-- | The format of the data, either CSV or PARQUET.
+timeSeriesIdentifiers_format :: Lens.Lens' TimeSeriesIdentifiers (Prelude.Maybe Prelude.Text)
+timeSeriesIdentifiers_format = Lens.lens (\TimeSeriesIdentifiers' {format} -> format) (\s@TimeSeriesIdentifiers' {} a -> s {format = a} :: TimeSeriesIdentifiers)
+
+-- | Undocumented member.
+timeSeriesIdentifiers_schema :: Lens.Lens' TimeSeriesIdentifiers (Prelude.Maybe Schema)
+timeSeriesIdentifiers_schema = Lens.lens (\TimeSeriesIdentifiers' {schema} -> schema) (\s@TimeSeriesIdentifiers' {} a -> s {schema = a} :: TimeSeriesIdentifiers)
+
+instance Data.FromJSON TimeSeriesIdentifiers where
+  parseJSON =
+    Data.withObject
+      "TimeSeriesIdentifiers"
+      ( \x ->
+          TimeSeriesIdentifiers'
+            Prelude.<$> (x Data..:? "DataSource")
+            Prelude.<*> (x Data..:? "Format")
+            Prelude.<*> (x Data..:? "Schema")
+      )
+
+instance Prelude.Hashable TimeSeriesIdentifiers where
+  hashWithSalt _salt TimeSeriesIdentifiers' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSource
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` schema
+
+instance Prelude.NFData TimeSeriesIdentifiers where
+  rnf TimeSeriesIdentifiers' {..} =
+    Prelude.rnf dataSource
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf schema
+
+instance Data.ToJSON TimeSeriesIdentifiers where
+  toJSON TimeSeriesIdentifiers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DataSource" Data..=) Prelude.<$> dataSource,
+            ("Format" Data..=) Prelude.<$> format,
+            ("Schema" Data..=) Prelude.<$> schema
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/TimeSeriesReplacementsDataSource.hs b/gen/Amazonka/Forecast/Types/TimeSeriesReplacementsDataSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TimeSeriesReplacementsDataSource.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TimeSeriesReplacementsDataSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TimeSeriesReplacementsDataSource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.S3Config
+import Amazonka.Forecast.Types.Schema
+import qualified Amazonka.Prelude as Prelude
+
+-- | A replacement dataset is a modified version of the baseline related time
+-- series that contains only the values that you want to include in a
+-- what-if forecast. The replacement dataset must contain the forecast
+-- dimensions and item identifiers in the baseline related time series as
+-- well as at least 1 changed time series. This dataset is merged with the
+-- baseline related time series to create a transformed dataset that is
+-- used for the what-if forecast.
+--
+-- /See:/ 'newTimeSeriesReplacementsDataSource' smart constructor.
+data TimeSeriesReplacementsDataSource = TimeSeriesReplacementsDataSource'
+  { -- | The format of the replacement data, CSV or PARQUET.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp format of the replacement data.
+    timestampFormat :: Prelude.Maybe Prelude.Text,
+    s3Config :: S3Config,
+    schema :: Schema
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeSeriesReplacementsDataSource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'format', 'timeSeriesReplacementsDataSource_format' - The format of the replacement data, CSV or PARQUET.
+--
+-- 'timestampFormat', 'timeSeriesReplacementsDataSource_timestampFormat' - The timestamp format of the replacement data.
+--
+-- 's3Config', 'timeSeriesReplacementsDataSource_s3Config' - Undocumented member.
+--
+-- 'schema', 'timeSeriesReplacementsDataSource_schema' - Undocumented member.
+newTimeSeriesReplacementsDataSource ::
+  -- | 's3Config'
+  S3Config ->
+  -- | 'schema'
+  Schema ->
+  TimeSeriesReplacementsDataSource
+newTimeSeriesReplacementsDataSource
+  pS3Config_
+  pSchema_ =
+    TimeSeriesReplacementsDataSource'
+      { format =
+          Prelude.Nothing,
+        timestampFormat = Prelude.Nothing,
+        s3Config = pS3Config_,
+        schema = pSchema_
+      }
+
+-- | The format of the replacement data, CSV or PARQUET.
+timeSeriesReplacementsDataSource_format :: Lens.Lens' TimeSeriesReplacementsDataSource (Prelude.Maybe Prelude.Text)
+timeSeriesReplacementsDataSource_format = Lens.lens (\TimeSeriesReplacementsDataSource' {format} -> format) (\s@TimeSeriesReplacementsDataSource' {} a -> s {format = a} :: TimeSeriesReplacementsDataSource)
+
+-- | The timestamp format of the replacement data.
+timeSeriesReplacementsDataSource_timestampFormat :: Lens.Lens' TimeSeriesReplacementsDataSource (Prelude.Maybe Prelude.Text)
+timeSeriesReplacementsDataSource_timestampFormat = Lens.lens (\TimeSeriesReplacementsDataSource' {timestampFormat} -> timestampFormat) (\s@TimeSeriesReplacementsDataSource' {} a -> s {timestampFormat = a} :: TimeSeriesReplacementsDataSource)
+
+-- | Undocumented member.
+timeSeriesReplacementsDataSource_s3Config :: Lens.Lens' TimeSeriesReplacementsDataSource S3Config
+timeSeriesReplacementsDataSource_s3Config = Lens.lens (\TimeSeriesReplacementsDataSource' {s3Config} -> s3Config) (\s@TimeSeriesReplacementsDataSource' {} a -> s {s3Config = a} :: TimeSeriesReplacementsDataSource)
+
+-- | Undocumented member.
+timeSeriesReplacementsDataSource_schema :: Lens.Lens' TimeSeriesReplacementsDataSource Schema
+timeSeriesReplacementsDataSource_schema = Lens.lens (\TimeSeriesReplacementsDataSource' {schema} -> schema) (\s@TimeSeriesReplacementsDataSource' {} a -> s {schema = a} :: TimeSeriesReplacementsDataSource)
+
+instance
+  Data.FromJSON
+    TimeSeriesReplacementsDataSource
+  where
+  parseJSON =
+    Data.withObject
+      "TimeSeriesReplacementsDataSource"
+      ( \x ->
+          TimeSeriesReplacementsDataSource'
+            Prelude.<$> (x Data..:? "Format")
+            Prelude.<*> (x Data..:? "TimestampFormat")
+            Prelude.<*> (x Data..: "S3Config")
+            Prelude.<*> (x Data..: "Schema")
+      )
+
+instance
+  Prelude.Hashable
+    TimeSeriesReplacementsDataSource
+  where
+  hashWithSalt
+    _salt
+    TimeSeriesReplacementsDataSource' {..} =
+      _salt
+        `Prelude.hashWithSalt` format
+        `Prelude.hashWithSalt` timestampFormat
+        `Prelude.hashWithSalt` s3Config
+        `Prelude.hashWithSalt` schema
+
+instance
+  Prelude.NFData
+    TimeSeriesReplacementsDataSource
+  where
+  rnf TimeSeriesReplacementsDataSource' {..} =
+    Prelude.rnf format
+      `Prelude.seq` Prelude.rnf timestampFormat
+      `Prelude.seq` Prelude.rnf s3Config
+      `Prelude.seq` Prelude.rnf schema
+
+instance Data.ToJSON TimeSeriesReplacementsDataSource where
+  toJSON TimeSeriesReplacementsDataSource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Format" Data..=) Prelude.<$> format,
+            ("TimestampFormat" Data..=)
+              Prelude.<$> timestampFormat,
+            Prelude.Just ("S3Config" Data..= s3Config),
+            Prelude.Just ("Schema" Data..= schema)
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/TimeSeriesSelector.hs b/gen/Amazonka/Forecast/Types/TimeSeriesSelector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TimeSeriesSelector.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TimeSeriesSelector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TimeSeriesSelector where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.TimeSeriesIdentifiers
+import qualified Amazonka.Prelude as Prelude
+
+-- | Defines the set of time series that are used to create the forecasts in
+-- a @TimeSeriesIdentifiers@ object.
+--
+-- The @TimeSeriesIdentifiers@ object needs the following information:
+--
+-- -   @DataSource@
+--
+-- -   @Format@
+--
+-- -   @Schema@
+--
+-- /See:/ 'newTimeSeriesSelector' smart constructor.
+data TimeSeriesSelector = TimeSeriesSelector'
+  { -- | Details about the import file that contains the time series for which
+    -- you want to create forecasts.
+    timeSeriesIdentifiers :: Prelude.Maybe TimeSeriesIdentifiers
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeSeriesSelector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'timeSeriesIdentifiers', 'timeSeriesSelector_timeSeriesIdentifiers' - Details about the import file that contains the time series for which
+-- you want to create forecasts.
+newTimeSeriesSelector ::
+  TimeSeriesSelector
+newTimeSeriesSelector =
+  TimeSeriesSelector'
+    { timeSeriesIdentifiers =
+        Prelude.Nothing
+    }
+
+-- | Details about the import file that contains the time series for which
+-- you want to create forecasts.
+timeSeriesSelector_timeSeriesIdentifiers :: Lens.Lens' TimeSeriesSelector (Prelude.Maybe TimeSeriesIdentifiers)
+timeSeriesSelector_timeSeriesIdentifiers = Lens.lens (\TimeSeriesSelector' {timeSeriesIdentifiers} -> timeSeriesIdentifiers) (\s@TimeSeriesSelector' {} a -> s {timeSeriesIdentifiers = a} :: TimeSeriesSelector)
+
+instance Data.FromJSON TimeSeriesSelector where
+  parseJSON =
+    Data.withObject
+      "TimeSeriesSelector"
+      ( \x ->
+          TimeSeriesSelector'
+            Prelude.<$> (x Data..:? "TimeSeriesIdentifiers")
+      )
+
+instance Prelude.Hashable TimeSeriesSelector where
+  hashWithSalt _salt TimeSeriesSelector' {..} =
+    _salt `Prelude.hashWithSalt` timeSeriesIdentifiers
+
+instance Prelude.NFData TimeSeriesSelector where
+  rnf TimeSeriesSelector' {..} =
+    Prelude.rnf timeSeriesIdentifiers
+
+instance Data.ToJSON TimeSeriesSelector where
+  toJSON TimeSeriesSelector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("TimeSeriesIdentifiers" Data..=)
+              Prelude.<$> timeSeriesIdentifiers
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/TimeSeriesTransformation.hs b/gen/Amazonka/Forecast/Types/TimeSeriesTransformation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/TimeSeriesTransformation.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.TimeSeriesTransformation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.TimeSeriesTransformation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.Action
+import Amazonka.Forecast.Types.TimeSeriesCondition
+import qualified Amazonka.Prelude as Prelude
+
+-- | A transformation function is a pair of operations that select and modify
+-- the rows in a related time series. You select the rows that you want
+-- with a condition operation and you modify the rows with a transformation
+-- operation. All conditions are joined with an AND operation, meaning that
+-- all conditions must be true for the transformation to be applied.
+-- Transformations are applied in the order that they are listed.
+--
+-- /See:/ 'newTimeSeriesTransformation' smart constructor.
+data TimeSeriesTransformation = TimeSeriesTransformation'
+  { -- | An array of actions that define a time series and how it is transformed.
+    -- These transformations create a new time series that is used for the
+    -- what-if analysis.
+    action :: Prelude.Maybe Action,
+    -- | An array of conditions that define which members of the related time
+    -- series are transformed.
+    timeSeriesConditions :: Prelude.Maybe [TimeSeriesCondition]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TimeSeriesTransformation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'timeSeriesTransformation_action' - An array of actions that define a time series and how it is transformed.
+-- These transformations create a new time series that is used for the
+-- what-if analysis.
+--
+-- 'timeSeriesConditions', 'timeSeriesTransformation_timeSeriesConditions' - An array of conditions that define which members of the related time
+-- series are transformed.
+newTimeSeriesTransformation ::
+  TimeSeriesTransformation
+newTimeSeriesTransformation =
+  TimeSeriesTransformation'
+    { action = Prelude.Nothing,
+      timeSeriesConditions = Prelude.Nothing
+    }
+
+-- | An array of actions that define a time series and how it is transformed.
+-- These transformations create a new time series that is used for the
+-- what-if analysis.
+timeSeriesTransformation_action :: Lens.Lens' TimeSeriesTransformation (Prelude.Maybe Action)
+timeSeriesTransformation_action = Lens.lens (\TimeSeriesTransformation' {action} -> action) (\s@TimeSeriesTransformation' {} a -> s {action = a} :: TimeSeriesTransformation)
+
+-- | An array of conditions that define which members of the related time
+-- series are transformed.
+timeSeriesTransformation_timeSeriesConditions :: Lens.Lens' TimeSeriesTransformation (Prelude.Maybe [TimeSeriesCondition])
+timeSeriesTransformation_timeSeriesConditions = Lens.lens (\TimeSeriesTransformation' {timeSeriesConditions} -> timeSeriesConditions) (\s@TimeSeriesTransformation' {} a -> s {timeSeriesConditions = a} :: TimeSeriesTransformation) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON TimeSeriesTransformation where
+  parseJSON =
+    Data.withObject
+      "TimeSeriesTransformation"
+      ( \x ->
+          TimeSeriesTransformation'
+            Prelude.<$> (x Data..:? "Action")
+            Prelude.<*> ( x
+                            Data..:? "TimeSeriesConditions"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable TimeSeriesTransformation where
+  hashWithSalt _salt TimeSeriesTransformation' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` timeSeriesConditions
+
+instance Prelude.NFData TimeSeriesTransformation where
+  rnf TimeSeriesTransformation' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf timeSeriesConditions
+
+instance Data.ToJSON TimeSeriesTransformation where
+  toJSON TimeSeriesTransformation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Action" Data..=) Prelude.<$> action,
+            ("TimeSeriesConditions" Data..=)
+              Prelude.<$> timeSeriesConditions
+          ]
+      )
diff --git a/gen/Amazonka/Forecast/Types/WeightedQuantileLoss.hs b/gen/Amazonka/Forecast/Types/WeightedQuantileLoss.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/WeightedQuantileLoss.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.WeightedQuantileLoss
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.WeightedQuantileLoss where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The weighted loss value for a quantile. This object is part of the
+-- Metrics object.
+--
+-- /See:/ 'newWeightedQuantileLoss' smart constructor.
+data WeightedQuantileLoss = WeightedQuantileLoss'
+  { -- | The difference between the predicted value and the actual value over the
+    -- quantile, weighted (normalized) by dividing by the sum over all
+    -- quantiles.
+    lossValue :: Prelude.Maybe Prelude.Double,
+    -- | The quantile. Quantiles divide a probability distribution into regions
+    -- of equal probability. For example, if the distribution was divided into
+    -- 5 regions of equal probability, the quantiles would be 0.2, 0.4, 0.6,
+    -- and 0.8.
+    quantile :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WeightedQuantileLoss' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lossValue', 'weightedQuantileLoss_lossValue' - The difference between the predicted value and the actual value over the
+-- quantile, weighted (normalized) by dividing by the sum over all
+-- quantiles.
+--
+-- 'quantile', 'weightedQuantileLoss_quantile' - The quantile. Quantiles divide a probability distribution into regions
+-- of equal probability. For example, if the distribution was divided into
+-- 5 regions of equal probability, the quantiles would be 0.2, 0.4, 0.6,
+-- and 0.8.
+newWeightedQuantileLoss ::
+  WeightedQuantileLoss
+newWeightedQuantileLoss =
+  WeightedQuantileLoss'
+    { lossValue = Prelude.Nothing,
+      quantile = Prelude.Nothing
+    }
+
+-- | The difference between the predicted value and the actual value over the
+-- quantile, weighted (normalized) by dividing by the sum over all
+-- quantiles.
+weightedQuantileLoss_lossValue :: Lens.Lens' WeightedQuantileLoss (Prelude.Maybe Prelude.Double)
+weightedQuantileLoss_lossValue = Lens.lens (\WeightedQuantileLoss' {lossValue} -> lossValue) (\s@WeightedQuantileLoss' {} a -> s {lossValue = a} :: WeightedQuantileLoss)
+
+-- | The quantile. Quantiles divide a probability distribution into regions
+-- of equal probability. For example, if the distribution was divided into
+-- 5 regions of equal probability, the quantiles would be 0.2, 0.4, 0.6,
+-- and 0.8.
+weightedQuantileLoss_quantile :: Lens.Lens' WeightedQuantileLoss (Prelude.Maybe Prelude.Double)
+weightedQuantileLoss_quantile = Lens.lens (\WeightedQuantileLoss' {quantile} -> quantile) (\s@WeightedQuantileLoss' {} a -> s {quantile = a} :: WeightedQuantileLoss)
+
+instance Data.FromJSON WeightedQuantileLoss where
+  parseJSON =
+    Data.withObject
+      "WeightedQuantileLoss"
+      ( \x ->
+          WeightedQuantileLoss'
+            Prelude.<$> (x Data..:? "LossValue")
+            Prelude.<*> (x Data..:? "Quantile")
+      )
+
+instance Prelude.Hashable WeightedQuantileLoss where
+  hashWithSalt _salt WeightedQuantileLoss' {..} =
+    _salt
+      `Prelude.hashWithSalt` lossValue
+      `Prelude.hashWithSalt` quantile
+
+instance Prelude.NFData WeightedQuantileLoss where
+  rnf WeightedQuantileLoss' {..} =
+    Prelude.rnf lossValue
+      `Prelude.seq` Prelude.rnf quantile
diff --git a/gen/Amazonka/Forecast/Types/WhatIfAnalysisSummary.hs b/gen/Amazonka/Forecast/Types/WhatIfAnalysisSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/WhatIfAnalysisSummary.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.WhatIfAnalysisSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.WhatIfAnalysisSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the what-if analysis properties used in the
+-- ListWhatIfAnalyses operation. To get the complete set of properties,
+-- call the DescribeWhatIfAnalysis operation, and provide the
+-- @WhatIfAnalysisArn@ that is listed in the summary.
+--
+-- /See:/ 'newWhatIfAnalysisSummary' smart constructor.
+data WhatIfAnalysisSummary = WhatIfAnalysisSummary'
+  { -- | When the what-if analysis was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon Resource Name (ARN) of the baseline forecast that is being
+    -- used in this what-if analysis.
+    forecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the what-if analysis. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+    -- access the analysis.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the what-if analysis.
+    whatIfAnalysisArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the what-if analysis.
+    whatIfAnalysisName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WhatIfAnalysisSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'whatIfAnalysisSummary_creationTime' - When the what-if analysis was created.
+--
+-- 'forecastArn', 'whatIfAnalysisSummary_forecastArn' - The Amazon Resource Name (ARN) of the baseline forecast that is being
+-- used in this what-if analysis.
+--
+-- 'lastModificationTime', 'whatIfAnalysisSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'whatIfAnalysisSummary_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'whatIfAnalysisSummary_status' - The status of the what-if analysis. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+-- access the analysis.
+--
+-- 'whatIfAnalysisArn', 'whatIfAnalysisSummary_whatIfAnalysisArn' - The Amazon Resource Name (ARN) of the what-if analysis.
+--
+-- 'whatIfAnalysisName', 'whatIfAnalysisSummary_whatIfAnalysisName' - The name of the what-if analysis.
+newWhatIfAnalysisSummary ::
+  WhatIfAnalysisSummary
+newWhatIfAnalysisSummary =
+  WhatIfAnalysisSummary'
+    { creationTime =
+        Prelude.Nothing,
+      forecastArn = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      whatIfAnalysisArn = Prelude.Nothing,
+      whatIfAnalysisName = Prelude.Nothing
+    }
+
+-- | When the what-if analysis was created.
+whatIfAnalysisSummary_creationTime :: Lens.Lens' WhatIfAnalysisSummary (Prelude.Maybe Prelude.UTCTime)
+whatIfAnalysisSummary_creationTime = Lens.lens (\WhatIfAnalysisSummary' {creationTime} -> creationTime) (\s@WhatIfAnalysisSummary' {} a -> s {creationTime = a} :: WhatIfAnalysisSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the baseline forecast that is being
+-- used in this what-if analysis.
+whatIfAnalysisSummary_forecastArn :: Lens.Lens' WhatIfAnalysisSummary (Prelude.Maybe Prelude.Text)
+whatIfAnalysisSummary_forecastArn = Lens.lens (\WhatIfAnalysisSummary' {forecastArn} -> forecastArn) (\s@WhatIfAnalysisSummary' {} a -> s {forecastArn = a} :: WhatIfAnalysisSummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+whatIfAnalysisSummary_lastModificationTime :: Lens.Lens' WhatIfAnalysisSummary (Prelude.Maybe Prelude.UTCTime)
+whatIfAnalysisSummary_lastModificationTime = Lens.lens (\WhatIfAnalysisSummary' {lastModificationTime} -> lastModificationTime) (\s@WhatIfAnalysisSummary' {} a -> s {lastModificationTime = a} :: WhatIfAnalysisSummary) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+whatIfAnalysisSummary_message :: Lens.Lens' WhatIfAnalysisSummary (Prelude.Maybe Prelude.Text)
+whatIfAnalysisSummary_message = Lens.lens (\WhatIfAnalysisSummary' {message} -> message) (\s@WhatIfAnalysisSummary' {} a -> s {message = a} :: WhatIfAnalysisSummary)
+
+-- | The status of the what-if analysis. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+-- access the analysis.
+whatIfAnalysisSummary_status :: Lens.Lens' WhatIfAnalysisSummary (Prelude.Maybe Prelude.Text)
+whatIfAnalysisSummary_status = Lens.lens (\WhatIfAnalysisSummary' {status} -> status) (\s@WhatIfAnalysisSummary' {} a -> s {status = a} :: WhatIfAnalysisSummary)
+
+-- | The Amazon Resource Name (ARN) of the what-if analysis.
+whatIfAnalysisSummary_whatIfAnalysisArn :: Lens.Lens' WhatIfAnalysisSummary (Prelude.Maybe Prelude.Text)
+whatIfAnalysisSummary_whatIfAnalysisArn = Lens.lens (\WhatIfAnalysisSummary' {whatIfAnalysisArn} -> whatIfAnalysisArn) (\s@WhatIfAnalysisSummary' {} a -> s {whatIfAnalysisArn = a} :: WhatIfAnalysisSummary)
+
+-- | The name of the what-if analysis.
+whatIfAnalysisSummary_whatIfAnalysisName :: Lens.Lens' WhatIfAnalysisSummary (Prelude.Maybe Prelude.Text)
+whatIfAnalysisSummary_whatIfAnalysisName = Lens.lens (\WhatIfAnalysisSummary' {whatIfAnalysisName} -> whatIfAnalysisName) (\s@WhatIfAnalysisSummary' {} a -> s {whatIfAnalysisName = a} :: WhatIfAnalysisSummary)
+
+instance Data.FromJSON WhatIfAnalysisSummary where
+  parseJSON =
+    Data.withObject
+      "WhatIfAnalysisSummary"
+      ( \x ->
+          WhatIfAnalysisSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "ForecastArn")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "WhatIfAnalysisArn")
+            Prelude.<*> (x Data..:? "WhatIfAnalysisName")
+      )
+
+instance Prelude.Hashable WhatIfAnalysisSummary where
+  hashWithSalt _salt WhatIfAnalysisSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` forecastArn
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` whatIfAnalysisArn
+      `Prelude.hashWithSalt` whatIfAnalysisName
+
+instance Prelude.NFData WhatIfAnalysisSummary where
+  rnf WhatIfAnalysisSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf forecastArn
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf whatIfAnalysisArn
+      `Prelude.seq` Prelude.rnf whatIfAnalysisName
diff --git a/gen/Amazonka/Forecast/Types/WhatIfForecastExportSummary.hs b/gen/Amazonka/Forecast/Types/WhatIfForecastExportSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/WhatIfForecastExportSummary.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.WhatIfForecastExportSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.WhatIfForecastExportSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.DataDestination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the what-if forecast export properties used in the
+-- ListWhatIfForecastExports operation. To get the complete set of
+-- properties, call the DescribeWhatIfForecastExport operation, and provide
+-- the @WhatIfForecastExportArn@ that is listed in the summary.
+--
+-- /See:/ 'newWhatIfForecastExportSummary' smart constructor.
+data WhatIfForecastExportSummary = WhatIfForecastExportSummary'
+  { -- | When the what-if forecast export was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+    -- the forecast is exported.
+    destination :: Prelude.Maybe DataDestination,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the what-if forecast export. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+    -- access the analysis.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | An array of Amazon Resource Names (ARNs) that define the what-if
+    -- forecasts included in the export.
+    whatIfForecastArns :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The Amazon Resource Name (ARN) of the what-if forecast export.
+    whatIfForecastExportArn :: Prelude.Maybe Prelude.Text,
+    -- | The what-if forecast export name.
+    whatIfForecastExportName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WhatIfForecastExportSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'whatIfForecastExportSummary_creationTime' - When the what-if forecast export was created.
+--
+-- 'destination', 'whatIfForecastExportSummary_destination' - The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+-- the forecast is exported.
+--
+-- 'lastModificationTime', 'whatIfForecastExportSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'whatIfForecastExportSummary_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'whatIfForecastExportSummary_status' - The status of the what-if forecast export. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+-- access the analysis.
+--
+-- 'whatIfForecastArns', 'whatIfForecastExportSummary_whatIfForecastArns' - An array of Amazon Resource Names (ARNs) that define the what-if
+-- forecasts included in the export.
+--
+-- 'whatIfForecastExportArn', 'whatIfForecastExportSummary_whatIfForecastExportArn' - The Amazon Resource Name (ARN) of the what-if forecast export.
+--
+-- 'whatIfForecastExportName', 'whatIfForecastExportSummary_whatIfForecastExportName' - The what-if forecast export name.
+newWhatIfForecastExportSummary ::
+  WhatIfForecastExportSummary
+newWhatIfForecastExportSummary =
+  WhatIfForecastExportSummary'
+    { creationTime =
+        Prelude.Nothing,
+      destination = Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      whatIfForecastArns = Prelude.Nothing,
+      whatIfForecastExportArn = Prelude.Nothing,
+      whatIfForecastExportName = Prelude.Nothing
+    }
+
+-- | When the what-if forecast export was created.
+whatIfForecastExportSummary_creationTime :: Lens.Lens' WhatIfForecastExportSummary (Prelude.Maybe Prelude.UTCTime)
+whatIfForecastExportSummary_creationTime = Lens.lens (\WhatIfForecastExportSummary' {creationTime} -> creationTime) (\s@WhatIfForecastExportSummary' {} a -> s {creationTime = a} :: WhatIfForecastExportSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The path to the Amazon Simple Storage Service (Amazon S3) bucket where
+-- the forecast is exported.
+whatIfForecastExportSummary_destination :: Lens.Lens' WhatIfForecastExportSummary (Prelude.Maybe DataDestination)
+whatIfForecastExportSummary_destination = Lens.lens (\WhatIfForecastExportSummary' {destination} -> destination) (\s@WhatIfForecastExportSummary' {} a -> s {destination = a} :: WhatIfForecastExportSummary)
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+whatIfForecastExportSummary_lastModificationTime :: Lens.Lens' WhatIfForecastExportSummary (Prelude.Maybe Prelude.UTCTime)
+whatIfForecastExportSummary_lastModificationTime = Lens.lens (\WhatIfForecastExportSummary' {lastModificationTime} -> lastModificationTime) (\s@WhatIfForecastExportSummary' {} a -> s {lastModificationTime = a} :: WhatIfForecastExportSummary) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+whatIfForecastExportSummary_message :: Lens.Lens' WhatIfForecastExportSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastExportSummary_message = Lens.lens (\WhatIfForecastExportSummary' {message} -> message) (\s@WhatIfForecastExportSummary' {} a -> s {message = a} :: WhatIfForecastExportSummary)
+
+-- | The status of the what-if forecast export. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+-- access the analysis.
+whatIfForecastExportSummary_status :: Lens.Lens' WhatIfForecastExportSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastExportSummary_status = Lens.lens (\WhatIfForecastExportSummary' {status} -> status) (\s@WhatIfForecastExportSummary' {} a -> s {status = a} :: WhatIfForecastExportSummary)
+
+-- | An array of Amazon Resource Names (ARNs) that define the what-if
+-- forecasts included in the export.
+whatIfForecastExportSummary_whatIfForecastArns :: Lens.Lens' WhatIfForecastExportSummary (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+whatIfForecastExportSummary_whatIfForecastArns = Lens.lens (\WhatIfForecastExportSummary' {whatIfForecastArns} -> whatIfForecastArns) (\s@WhatIfForecastExportSummary' {} a -> s {whatIfForecastArns = a} :: WhatIfForecastExportSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast export.
+whatIfForecastExportSummary_whatIfForecastExportArn :: Lens.Lens' WhatIfForecastExportSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastExportSummary_whatIfForecastExportArn = Lens.lens (\WhatIfForecastExportSummary' {whatIfForecastExportArn} -> whatIfForecastExportArn) (\s@WhatIfForecastExportSummary' {} a -> s {whatIfForecastExportArn = a} :: WhatIfForecastExportSummary)
+
+-- | The what-if forecast export name.
+whatIfForecastExportSummary_whatIfForecastExportName :: Lens.Lens' WhatIfForecastExportSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastExportSummary_whatIfForecastExportName = Lens.lens (\WhatIfForecastExportSummary' {whatIfForecastExportName} -> whatIfForecastExportName) (\s@WhatIfForecastExportSummary' {} a -> s {whatIfForecastExportName = a} :: WhatIfForecastExportSummary)
+
+instance Data.FromJSON WhatIfForecastExportSummary where
+  parseJSON =
+    Data.withObject
+      "WhatIfForecastExportSummary"
+      ( \x ->
+          WhatIfForecastExportSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "Destination")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "WhatIfForecastArns")
+            Prelude.<*> (x Data..:? "WhatIfForecastExportArn")
+            Prelude.<*> (x Data..:? "WhatIfForecastExportName")
+      )
+
+instance Prelude.Hashable WhatIfForecastExportSummary where
+  hashWithSalt _salt WhatIfForecastExportSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` whatIfForecastArns
+      `Prelude.hashWithSalt` whatIfForecastExportArn
+      `Prelude.hashWithSalt` whatIfForecastExportName
+
+instance Prelude.NFData WhatIfForecastExportSummary where
+  rnf WhatIfForecastExportSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf whatIfForecastArns
+      `Prelude.seq` Prelude.rnf whatIfForecastExportArn
+      `Prelude.seq` Prelude.rnf whatIfForecastExportName
diff --git a/gen/Amazonka/Forecast/Types/WhatIfForecastSummary.hs b/gen/Amazonka/Forecast/Types/WhatIfForecastSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/WhatIfForecastSummary.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.WhatIfForecastSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.WhatIfForecastSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides a summary of the what-if forecast properties used in the
+-- ListWhatIfForecasts operation. To get the complete set of properties,
+-- call the DescribeWhatIfForecast operation, and provide the
+-- @WhatIfForecastArn@ that is listed in the summary.
+--
+-- /See:/ 'newWhatIfForecastSummary' smart constructor.
+data WhatIfForecastSummary = WhatIfForecastSummary'
+  { -- | When the what-if forecast was created.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The last time the resource was modified. The timestamp depends on the
+    -- status of the job:
+    --
+    -- -   @CREATE_PENDING@ - The @CreationTime@.
+    --
+    -- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPING@ - The current timestamp.
+    --
+    -- -   @CREATE_STOPPED@ - When the job stopped.
+    --
+    -- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+    lastModificationTime :: Prelude.Maybe Data.POSIX,
+    -- | If an error occurred, an informational message about the error.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The status of the what-if forecast. States include:
+    --
+    -- -   @ACTIVE@
+    --
+    -- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+    --
+    -- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+    --
+    -- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+    --
+    -- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+    -- access the analysis.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the what-if analysis that contains
+    -- this what-if forecast.
+    whatIfAnalysisArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the what-if forecast.
+    whatIfForecastArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the what-if forecast.
+    whatIfForecastName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WhatIfForecastSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'whatIfForecastSummary_creationTime' - When the what-if forecast was created.
+--
+-- 'lastModificationTime', 'whatIfForecastSummary_lastModificationTime' - The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+--
+-- 'message', 'whatIfForecastSummary_message' - If an error occurred, an informational message about the error.
+--
+-- 'status', 'whatIfForecastSummary_status' - The status of the what-if forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+-- access the analysis.
+--
+-- 'whatIfAnalysisArn', 'whatIfForecastSummary_whatIfAnalysisArn' - The Amazon Resource Name (ARN) of the what-if analysis that contains
+-- this what-if forecast.
+--
+-- 'whatIfForecastArn', 'whatIfForecastSummary_whatIfForecastArn' - The Amazon Resource Name (ARN) of the what-if forecast.
+--
+-- 'whatIfForecastName', 'whatIfForecastSummary_whatIfForecastName' - The name of the what-if forecast.
+newWhatIfForecastSummary ::
+  WhatIfForecastSummary
+newWhatIfForecastSummary =
+  WhatIfForecastSummary'
+    { creationTime =
+        Prelude.Nothing,
+      lastModificationTime = Prelude.Nothing,
+      message = Prelude.Nothing,
+      status = Prelude.Nothing,
+      whatIfAnalysisArn = Prelude.Nothing,
+      whatIfForecastArn = Prelude.Nothing,
+      whatIfForecastName = Prelude.Nothing
+    }
+
+-- | When the what-if forecast was created.
+whatIfForecastSummary_creationTime :: Lens.Lens' WhatIfForecastSummary (Prelude.Maybe Prelude.UTCTime)
+whatIfForecastSummary_creationTime = Lens.lens (\WhatIfForecastSummary' {creationTime} -> creationTime) (\s@WhatIfForecastSummary' {} a -> s {creationTime = a} :: WhatIfForecastSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The last time the resource was modified. The timestamp depends on the
+-- status of the job:
+--
+-- -   @CREATE_PENDING@ - The @CreationTime@.
+--
+-- -   @CREATE_IN_PROGRESS@ - The current timestamp.
+--
+-- -   @CREATE_STOPPING@ - The current timestamp.
+--
+-- -   @CREATE_STOPPED@ - When the job stopped.
+--
+-- -   @ACTIVE@ or @CREATE_FAILED@ - When the job finished or failed.
+whatIfForecastSummary_lastModificationTime :: Lens.Lens' WhatIfForecastSummary (Prelude.Maybe Prelude.UTCTime)
+whatIfForecastSummary_lastModificationTime = Lens.lens (\WhatIfForecastSummary' {lastModificationTime} -> lastModificationTime) (\s@WhatIfForecastSummary' {} a -> s {lastModificationTime = a} :: WhatIfForecastSummary) Prelude.. Lens.mapping Data._Time
+
+-- | If an error occurred, an informational message about the error.
+whatIfForecastSummary_message :: Lens.Lens' WhatIfForecastSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastSummary_message = Lens.lens (\WhatIfForecastSummary' {message} -> message) (\s@WhatIfForecastSummary' {} a -> s {message = a} :: WhatIfForecastSummary)
+
+-- | The status of the what-if forecast. States include:
+--
+-- -   @ACTIVE@
+--
+-- -   @CREATE_PENDING@, @CREATE_IN_PROGRESS@, @CREATE_FAILED@
+--
+-- -   @CREATE_STOPPING@, @CREATE_STOPPED@
+--
+-- -   @DELETE_PENDING@, @DELETE_IN_PROGRESS@, @DELETE_FAILED@
+--
+-- The @Status@ of the what-if analysis must be @ACTIVE@ before you can
+-- access the analysis.
+whatIfForecastSummary_status :: Lens.Lens' WhatIfForecastSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastSummary_status = Lens.lens (\WhatIfForecastSummary' {status} -> status) (\s@WhatIfForecastSummary' {} a -> s {status = a} :: WhatIfForecastSummary)
+
+-- | The Amazon Resource Name (ARN) of the what-if analysis that contains
+-- this what-if forecast.
+whatIfForecastSummary_whatIfAnalysisArn :: Lens.Lens' WhatIfForecastSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastSummary_whatIfAnalysisArn = Lens.lens (\WhatIfForecastSummary' {whatIfAnalysisArn} -> whatIfAnalysisArn) (\s@WhatIfForecastSummary' {} a -> s {whatIfAnalysisArn = a} :: WhatIfForecastSummary)
+
+-- | The Amazon Resource Name (ARN) of the what-if forecast.
+whatIfForecastSummary_whatIfForecastArn :: Lens.Lens' WhatIfForecastSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastSummary_whatIfForecastArn = Lens.lens (\WhatIfForecastSummary' {whatIfForecastArn} -> whatIfForecastArn) (\s@WhatIfForecastSummary' {} a -> s {whatIfForecastArn = a} :: WhatIfForecastSummary)
+
+-- | The name of the what-if forecast.
+whatIfForecastSummary_whatIfForecastName :: Lens.Lens' WhatIfForecastSummary (Prelude.Maybe Prelude.Text)
+whatIfForecastSummary_whatIfForecastName = Lens.lens (\WhatIfForecastSummary' {whatIfForecastName} -> whatIfForecastName) (\s@WhatIfForecastSummary' {} a -> s {whatIfForecastName = a} :: WhatIfForecastSummary)
+
+instance Data.FromJSON WhatIfForecastSummary where
+  parseJSON =
+    Data.withObject
+      "WhatIfForecastSummary"
+      ( \x ->
+          WhatIfForecastSummary'
+            Prelude.<$> (x Data..:? "CreationTime")
+            Prelude.<*> (x Data..:? "LastModificationTime")
+            Prelude.<*> (x Data..:? "Message")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "WhatIfAnalysisArn")
+            Prelude.<*> (x Data..:? "WhatIfForecastArn")
+            Prelude.<*> (x Data..:? "WhatIfForecastName")
+      )
+
+instance Prelude.Hashable WhatIfForecastSummary where
+  hashWithSalt _salt WhatIfForecastSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` lastModificationTime
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` whatIfAnalysisArn
+      `Prelude.hashWithSalt` whatIfForecastArn
+      `Prelude.hashWithSalt` whatIfForecastName
+
+instance Prelude.NFData WhatIfForecastSummary where
+  rnf WhatIfForecastSummary' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf lastModificationTime
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf whatIfAnalysisArn
+      `Prelude.seq` Prelude.rnf whatIfForecastArn
+      `Prelude.seq` Prelude.rnf whatIfForecastName
diff --git a/gen/Amazonka/Forecast/Types/WindowSummary.hs b/gen/Amazonka/Forecast/Types/WindowSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Types/WindowSummary.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Types.WindowSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Types.WindowSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types.EvaluationType
+import Amazonka.Forecast.Types.Metrics
+import qualified Amazonka.Prelude as Prelude
+
+-- | The metrics for a time range within the evaluation portion of a dataset.
+-- This object is part of the EvaluationResult object.
+--
+-- The @TestWindowStart@ and @TestWindowEnd@ parameters are determined by
+-- the @BackTestWindowOffset@ parameter of the EvaluationParameters object.
+--
+-- /See:/ 'newWindowSummary' smart constructor.
+data WindowSummary = WindowSummary'
+  { -- | The type of evaluation.
+    --
+    -- -   @SUMMARY@ - The average metrics across all windows.
+    --
+    -- -   @COMPUTED@ - The metrics for the specified window.
+    evaluationType :: Prelude.Maybe EvaluationType,
+    -- | The number of data points within the window.
+    itemCount :: Prelude.Maybe Prelude.Int,
+    -- | Provides metrics used to evaluate the performance of a predictor.
+    metrics :: Prelude.Maybe Metrics,
+    -- | The timestamp that defines the end of the window.
+    testWindowEnd :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp that defines the start of the window.
+    testWindowStart :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WindowSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'evaluationType', 'windowSummary_evaluationType' - The type of evaluation.
+--
+-- -   @SUMMARY@ - The average metrics across all windows.
+--
+-- -   @COMPUTED@ - The metrics for the specified window.
+--
+-- 'itemCount', 'windowSummary_itemCount' - The number of data points within the window.
+--
+-- 'metrics', 'windowSummary_metrics' - Provides metrics used to evaluate the performance of a predictor.
+--
+-- 'testWindowEnd', 'windowSummary_testWindowEnd' - The timestamp that defines the end of the window.
+--
+-- 'testWindowStart', 'windowSummary_testWindowStart' - The timestamp that defines the start of the window.
+newWindowSummary ::
+  WindowSummary
+newWindowSummary =
+  WindowSummary'
+    { evaluationType = Prelude.Nothing,
+      itemCount = Prelude.Nothing,
+      metrics = Prelude.Nothing,
+      testWindowEnd = Prelude.Nothing,
+      testWindowStart = Prelude.Nothing
+    }
+
+-- | The type of evaluation.
+--
+-- -   @SUMMARY@ - The average metrics across all windows.
+--
+-- -   @COMPUTED@ - The metrics for the specified window.
+windowSummary_evaluationType :: Lens.Lens' WindowSummary (Prelude.Maybe EvaluationType)
+windowSummary_evaluationType = Lens.lens (\WindowSummary' {evaluationType} -> evaluationType) (\s@WindowSummary' {} a -> s {evaluationType = a} :: WindowSummary)
+
+-- | The number of data points within the window.
+windowSummary_itemCount :: Lens.Lens' WindowSummary (Prelude.Maybe Prelude.Int)
+windowSummary_itemCount = Lens.lens (\WindowSummary' {itemCount} -> itemCount) (\s@WindowSummary' {} a -> s {itemCount = a} :: WindowSummary)
+
+-- | Provides metrics used to evaluate the performance of a predictor.
+windowSummary_metrics :: Lens.Lens' WindowSummary (Prelude.Maybe Metrics)
+windowSummary_metrics = Lens.lens (\WindowSummary' {metrics} -> metrics) (\s@WindowSummary' {} a -> s {metrics = a} :: WindowSummary)
+
+-- | The timestamp that defines the end of the window.
+windowSummary_testWindowEnd :: Lens.Lens' WindowSummary (Prelude.Maybe Prelude.UTCTime)
+windowSummary_testWindowEnd = Lens.lens (\WindowSummary' {testWindowEnd} -> testWindowEnd) (\s@WindowSummary' {} a -> s {testWindowEnd = a} :: WindowSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp that defines the start of the window.
+windowSummary_testWindowStart :: Lens.Lens' WindowSummary (Prelude.Maybe Prelude.UTCTime)
+windowSummary_testWindowStart = Lens.lens (\WindowSummary' {testWindowStart} -> testWindowStart) (\s@WindowSummary' {} a -> s {testWindowStart = a} :: WindowSummary) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON WindowSummary where
+  parseJSON =
+    Data.withObject
+      "WindowSummary"
+      ( \x ->
+          WindowSummary'
+            Prelude.<$> (x Data..:? "EvaluationType")
+            Prelude.<*> (x Data..:? "ItemCount")
+            Prelude.<*> (x Data..:? "Metrics")
+            Prelude.<*> (x Data..:? "TestWindowEnd")
+            Prelude.<*> (x Data..:? "TestWindowStart")
+      )
+
+instance Prelude.Hashable WindowSummary where
+  hashWithSalt _salt WindowSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` evaluationType
+      `Prelude.hashWithSalt` itemCount
+      `Prelude.hashWithSalt` metrics
+      `Prelude.hashWithSalt` testWindowEnd
+      `Prelude.hashWithSalt` testWindowStart
+
+instance Prelude.NFData WindowSummary where
+  rnf WindowSummary' {..} =
+    Prelude.rnf evaluationType
+      `Prelude.seq` Prelude.rnf itemCount
+      `Prelude.seq` Prelude.rnf metrics
+      `Prelude.seq` Prelude.rnf testWindowEnd
+      `Prelude.seq` Prelude.rnf testWindowStart
diff --git a/gen/Amazonka/Forecast/UntagResource.hs b/gen/Amazonka/Forecast/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/UntagResource.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified tags from a resource.
+module Amazonka.Forecast.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) that identifies the resource for which to
+    -- list the tags.
+    resourceArn :: Prelude.Text,
+    -- | The keys of the tags to be removed.
+    tagKeys :: [Data.Sensitive Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) that identifies the resource for which to
+-- list the tags.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The keys of the tags to be removed.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) that identifies the resource for which to
+-- list the tags.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The keys of the tags to be removed.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/UpdateDatasetGroup.hs b/gen/Amazonka/Forecast/UpdateDatasetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/UpdateDatasetGroup.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.UpdateDatasetGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces the datasets in a dataset group with the specified datasets.
+--
+-- The @Status@ of the dataset group must be @ACTIVE@ before you can use
+-- the dataset group to create a predictor. Use the
+-- <https://docs.aws.amazon.com/forecast/latest/dg/API_DescribeDatasetGroup.html DescribeDatasetGroup>
+-- operation to get the status.
+module Amazonka.Forecast.UpdateDatasetGroup
+  ( -- * Creating a Request
+    UpdateDatasetGroup (..),
+    newUpdateDatasetGroup,
+
+    -- * Request Lenses
+    updateDatasetGroup_datasetGroupArn,
+    updateDatasetGroup_datasetArns,
+
+    -- * Destructuring the Response
+    UpdateDatasetGroupResponse (..),
+    newUpdateDatasetGroupResponse,
+
+    -- * Response Lenses
+    updateDatasetGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDatasetGroup' smart constructor.
+data UpdateDatasetGroup = UpdateDatasetGroup'
+  { -- | The ARN of the dataset group.
+    datasetGroupArn :: Prelude.Text,
+    -- | An array of the Amazon Resource Names (ARNs) of the datasets to add to
+    -- the dataset group.
+    datasetArns :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDatasetGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'datasetGroupArn', 'updateDatasetGroup_datasetGroupArn' - The ARN of the dataset group.
+--
+-- 'datasetArns', 'updateDatasetGroup_datasetArns' - An array of the Amazon Resource Names (ARNs) of the datasets to add to
+-- the dataset group.
+newUpdateDatasetGroup ::
+  -- | 'datasetGroupArn'
+  Prelude.Text ->
+  UpdateDatasetGroup
+newUpdateDatasetGroup pDatasetGroupArn_ =
+  UpdateDatasetGroup'
+    { datasetGroupArn =
+        pDatasetGroupArn_,
+      datasetArns = Prelude.mempty
+    }
+
+-- | The ARN of the dataset group.
+updateDatasetGroup_datasetGroupArn :: Lens.Lens' UpdateDatasetGroup Prelude.Text
+updateDatasetGroup_datasetGroupArn = Lens.lens (\UpdateDatasetGroup' {datasetGroupArn} -> datasetGroupArn) (\s@UpdateDatasetGroup' {} a -> s {datasetGroupArn = a} :: UpdateDatasetGroup)
+
+-- | An array of the Amazon Resource Names (ARNs) of the datasets to add to
+-- the dataset group.
+updateDatasetGroup_datasetArns :: Lens.Lens' UpdateDatasetGroup [Prelude.Text]
+updateDatasetGroup_datasetArns = Lens.lens (\UpdateDatasetGroup' {datasetArns} -> datasetArns) (\s@UpdateDatasetGroup' {} a -> s {datasetArns = a} :: UpdateDatasetGroup) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UpdateDatasetGroup where
+  type
+    AWSResponse UpdateDatasetGroup =
+      UpdateDatasetGroupResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateDatasetGroupResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDatasetGroup where
+  hashWithSalt _salt UpdateDatasetGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` datasetGroupArn
+      `Prelude.hashWithSalt` datasetArns
+
+instance Prelude.NFData UpdateDatasetGroup where
+  rnf UpdateDatasetGroup' {..} =
+    Prelude.rnf datasetGroupArn
+      `Prelude.seq` Prelude.rnf datasetArns
+
+instance Data.ToHeaders UpdateDatasetGroup where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AmazonForecast.UpdateDatasetGroup" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDatasetGroup where
+  toJSON UpdateDatasetGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DatasetGroupArn" Data..= datasetGroupArn),
+            Prelude.Just ("DatasetArns" Data..= datasetArns)
+          ]
+      )
+
+instance Data.ToPath UpdateDatasetGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateDatasetGroup where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDatasetGroupResponse' smart constructor.
+data UpdateDatasetGroupResponse = UpdateDatasetGroupResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDatasetGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateDatasetGroupResponse_httpStatus' - The response's http status code.
+newUpdateDatasetGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDatasetGroupResponse
+newUpdateDatasetGroupResponse pHttpStatus_ =
+  UpdateDatasetGroupResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateDatasetGroupResponse_httpStatus :: Lens.Lens' UpdateDatasetGroupResponse Prelude.Int
+updateDatasetGroupResponse_httpStatus = Lens.lens (\UpdateDatasetGroupResponse' {httpStatus} -> httpStatus) (\s@UpdateDatasetGroupResponse' {} a -> s {httpStatus = a} :: UpdateDatasetGroupResponse)
+
+instance Prelude.NFData UpdateDatasetGroupResponse where
+  rnf UpdateDatasetGroupResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Forecast/Waiters.hs b/gen/Amazonka/Forecast/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Forecast/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Forecast.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Forecast.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.Forecast.Lens
+import Amazonka.Forecast.Types
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.Forecast
+import Test.Amazonka.Forecast.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "Forecast"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Forecast.hs b/test/Test/Amazonka/Forecast.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Forecast.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Forecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Forecast
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Forecast/Internal.hs b/test/Test/Amazonka/Forecast/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Forecast/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Forecast.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Forecast.Internal where
diff --git a/test/Test/Amazonka/Gen/Forecast.hs b/test/Test/Amazonka/Gen/Forecast.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Forecast.hs
@@ -0,0 +1,1298 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.Forecast
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.Forecast where
+
+import Amazonka.Forecast
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Forecast.Internal
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateAutoPredictor $
+--             newCreateAutoPredictor
+--
+--         , requestCreateDataset $
+--             newCreateDataset
+--
+--         , requestCreateDatasetGroup $
+--             newCreateDatasetGroup
+--
+--         , requestCreateDatasetImportJob $
+--             newCreateDatasetImportJob
+--
+--         , requestCreateExplainability $
+--             newCreateExplainability
+--
+--         , requestCreateExplainabilityExport $
+--             newCreateExplainabilityExport
+--
+--         , requestCreateForecast $
+--             newCreateForecast
+--
+--         , requestCreateForecastExportJob $
+--             newCreateForecastExportJob
+--
+--         , requestCreateMonitor $
+--             newCreateMonitor
+--
+--         , requestCreatePredictor $
+--             newCreatePredictor
+--
+--         , requestCreatePredictorBacktestExportJob $
+--             newCreatePredictorBacktestExportJob
+--
+--         , requestCreateWhatIfAnalysis $
+--             newCreateWhatIfAnalysis
+--
+--         , requestCreateWhatIfForecast $
+--             newCreateWhatIfForecast
+--
+--         , requestCreateWhatIfForecastExport $
+--             newCreateWhatIfForecastExport
+--
+--         , requestDeleteDataset $
+--             newDeleteDataset
+--
+--         , requestDeleteDatasetGroup $
+--             newDeleteDatasetGroup
+--
+--         , requestDeleteDatasetImportJob $
+--             newDeleteDatasetImportJob
+--
+--         , requestDeleteExplainability $
+--             newDeleteExplainability
+--
+--         , requestDeleteExplainabilityExport $
+--             newDeleteExplainabilityExport
+--
+--         , requestDeleteForecast $
+--             newDeleteForecast
+--
+--         , requestDeleteForecastExportJob $
+--             newDeleteForecastExportJob
+--
+--         , requestDeleteMonitor $
+--             newDeleteMonitor
+--
+--         , requestDeletePredictor $
+--             newDeletePredictor
+--
+--         , requestDeletePredictorBacktestExportJob $
+--             newDeletePredictorBacktestExportJob
+--
+--         , requestDeleteResourceTree $
+--             newDeleteResourceTree
+--
+--         , requestDeleteWhatIfAnalysis $
+--             newDeleteWhatIfAnalysis
+--
+--         , requestDeleteWhatIfForecast $
+--             newDeleteWhatIfForecast
+--
+--         , requestDeleteWhatIfForecastExport $
+--             newDeleteWhatIfForecastExport
+--
+--         , requestDescribeAutoPredictor $
+--             newDescribeAutoPredictor
+--
+--         , requestDescribeDataset $
+--             newDescribeDataset
+--
+--         , requestDescribeDatasetGroup $
+--             newDescribeDatasetGroup
+--
+--         , requestDescribeDatasetImportJob $
+--             newDescribeDatasetImportJob
+--
+--         , requestDescribeExplainability $
+--             newDescribeExplainability
+--
+--         , requestDescribeExplainabilityExport $
+--             newDescribeExplainabilityExport
+--
+--         , requestDescribeForecast $
+--             newDescribeForecast
+--
+--         , requestDescribeForecastExportJob $
+--             newDescribeForecastExportJob
+--
+--         , requestDescribeMonitor $
+--             newDescribeMonitor
+--
+--         , requestDescribePredictor $
+--             newDescribePredictor
+--
+--         , requestDescribePredictorBacktestExportJob $
+--             newDescribePredictorBacktestExportJob
+--
+--         , requestDescribeWhatIfAnalysis $
+--             newDescribeWhatIfAnalysis
+--
+--         , requestDescribeWhatIfForecast $
+--             newDescribeWhatIfForecast
+--
+--         , requestDescribeWhatIfForecastExport $
+--             newDescribeWhatIfForecastExport
+--
+--         , requestGetAccuracyMetrics $
+--             newGetAccuracyMetrics
+--
+--         , requestListDatasetGroups $
+--             newListDatasetGroups
+--
+--         , requestListDatasetImportJobs $
+--             newListDatasetImportJobs
+--
+--         , requestListDatasets $
+--             newListDatasets
+--
+--         , requestListExplainabilities $
+--             newListExplainabilities
+--
+--         , requestListExplainabilityExports $
+--             newListExplainabilityExports
+--
+--         , requestListForecastExportJobs $
+--             newListForecastExportJobs
+--
+--         , requestListForecasts $
+--             newListForecasts
+--
+--         , requestListMonitorEvaluations $
+--             newListMonitorEvaluations
+--
+--         , requestListMonitors $
+--             newListMonitors
+--
+--         , requestListPredictorBacktestExportJobs $
+--             newListPredictorBacktestExportJobs
+--
+--         , requestListPredictors $
+--             newListPredictors
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestListWhatIfAnalyses $
+--             newListWhatIfAnalyses
+--
+--         , requestListWhatIfForecastExports $
+--             newListWhatIfForecastExports
+--
+--         , requestListWhatIfForecasts $
+--             newListWhatIfForecasts
+--
+--         , requestResumeResource $
+--             newResumeResource
+--
+--         , requestStopResource $
+--             newStopResource
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateDatasetGroup $
+--             newUpdateDatasetGroup
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateAutoPredictor $
+--             newCreateAutoPredictorResponse
+--
+--         , responseCreateDataset $
+--             newCreateDatasetResponse
+--
+--         , responseCreateDatasetGroup $
+--             newCreateDatasetGroupResponse
+--
+--         , responseCreateDatasetImportJob $
+--             newCreateDatasetImportJobResponse
+--
+--         , responseCreateExplainability $
+--             newCreateExplainabilityResponse
+--
+--         , responseCreateExplainabilityExport $
+--             newCreateExplainabilityExportResponse
+--
+--         , responseCreateForecast $
+--             newCreateForecastResponse
+--
+--         , responseCreateForecastExportJob $
+--             newCreateForecastExportJobResponse
+--
+--         , responseCreateMonitor $
+--             newCreateMonitorResponse
+--
+--         , responseCreatePredictor $
+--             newCreatePredictorResponse
+--
+--         , responseCreatePredictorBacktestExportJob $
+--             newCreatePredictorBacktestExportJobResponse
+--
+--         , responseCreateWhatIfAnalysis $
+--             newCreateWhatIfAnalysisResponse
+--
+--         , responseCreateWhatIfForecast $
+--             newCreateWhatIfForecastResponse
+--
+--         , responseCreateWhatIfForecastExport $
+--             newCreateWhatIfForecastExportResponse
+--
+--         , responseDeleteDataset $
+--             newDeleteDatasetResponse
+--
+--         , responseDeleteDatasetGroup $
+--             newDeleteDatasetGroupResponse
+--
+--         , responseDeleteDatasetImportJob $
+--             newDeleteDatasetImportJobResponse
+--
+--         , responseDeleteExplainability $
+--             newDeleteExplainabilityResponse
+--
+--         , responseDeleteExplainabilityExport $
+--             newDeleteExplainabilityExportResponse
+--
+--         , responseDeleteForecast $
+--             newDeleteForecastResponse
+--
+--         , responseDeleteForecastExportJob $
+--             newDeleteForecastExportJobResponse
+--
+--         , responseDeleteMonitor $
+--             newDeleteMonitorResponse
+--
+--         , responseDeletePredictor $
+--             newDeletePredictorResponse
+--
+--         , responseDeletePredictorBacktestExportJob $
+--             newDeletePredictorBacktestExportJobResponse
+--
+--         , responseDeleteResourceTree $
+--             newDeleteResourceTreeResponse
+--
+--         , responseDeleteWhatIfAnalysis $
+--             newDeleteWhatIfAnalysisResponse
+--
+--         , responseDeleteWhatIfForecast $
+--             newDeleteWhatIfForecastResponse
+--
+--         , responseDeleteWhatIfForecastExport $
+--             newDeleteWhatIfForecastExportResponse
+--
+--         , responseDescribeAutoPredictor $
+--             newDescribeAutoPredictorResponse
+--
+--         , responseDescribeDataset $
+--             newDescribeDatasetResponse
+--
+--         , responseDescribeDatasetGroup $
+--             newDescribeDatasetGroupResponse
+--
+--         , responseDescribeDatasetImportJob $
+--             newDescribeDatasetImportJobResponse
+--
+--         , responseDescribeExplainability $
+--             newDescribeExplainabilityResponse
+--
+--         , responseDescribeExplainabilityExport $
+--             newDescribeExplainabilityExportResponse
+--
+--         , responseDescribeForecast $
+--             newDescribeForecastResponse
+--
+--         , responseDescribeForecastExportJob $
+--             newDescribeForecastExportJobResponse
+--
+--         , responseDescribeMonitor $
+--             newDescribeMonitorResponse
+--
+--         , responseDescribePredictor $
+--             newDescribePredictorResponse
+--
+--         , responseDescribePredictorBacktestExportJob $
+--             newDescribePredictorBacktestExportJobResponse
+--
+--         , responseDescribeWhatIfAnalysis $
+--             newDescribeWhatIfAnalysisResponse
+--
+--         , responseDescribeWhatIfForecast $
+--             newDescribeWhatIfForecastResponse
+--
+--         , responseDescribeWhatIfForecastExport $
+--             newDescribeWhatIfForecastExportResponse
+--
+--         , responseGetAccuracyMetrics $
+--             newGetAccuracyMetricsResponse
+--
+--         , responseListDatasetGroups $
+--             newListDatasetGroupsResponse
+--
+--         , responseListDatasetImportJobs $
+--             newListDatasetImportJobsResponse
+--
+--         , responseListDatasets $
+--             newListDatasetsResponse
+--
+--         , responseListExplainabilities $
+--             newListExplainabilitiesResponse
+--
+--         , responseListExplainabilityExports $
+--             newListExplainabilityExportsResponse
+--
+--         , responseListForecastExportJobs $
+--             newListForecastExportJobsResponse
+--
+--         , responseListForecasts $
+--             newListForecastsResponse
+--
+--         , responseListMonitorEvaluations $
+--             newListMonitorEvaluationsResponse
+--
+--         , responseListMonitors $
+--             newListMonitorsResponse
+--
+--         , responseListPredictorBacktestExportJobs $
+--             newListPredictorBacktestExportJobsResponse
+--
+--         , responseListPredictors $
+--             newListPredictorsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseListWhatIfAnalyses $
+--             newListWhatIfAnalysesResponse
+--
+--         , responseListWhatIfForecastExports $
+--             newListWhatIfForecastExportsResponse
+--
+--         , responseListWhatIfForecasts $
+--             newListWhatIfForecastsResponse
+--
+--         , responseResumeResource $
+--             newResumeResourceResponse
+--
+--         , responseStopResource $
+--             newStopResourceResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateDatasetGroup $
+--             newUpdateDatasetGroupResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateAutoPredictor :: CreateAutoPredictor -> TestTree
+requestCreateAutoPredictor =
+  req
+    "CreateAutoPredictor"
+    "fixture/CreateAutoPredictor.yaml"
+
+requestCreateDataset :: CreateDataset -> TestTree
+requestCreateDataset =
+  req
+    "CreateDataset"
+    "fixture/CreateDataset.yaml"
+
+requestCreateDatasetGroup :: CreateDatasetGroup -> TestTree
+requestCreateDatasetGroup =
+  req
+    "CreateDatasetGroup"
+    "fixture/CreateDatasetGroup.yaml"
+
+requestCreateDatasetImportJob :: CreateDatasetImportJob -> TestTree
+requestCreateDatasetImportJob =
+  req
+    "CreateDatasetImportJob"
+    "fixture/CreateDatasetImportJob.yaml"
+
+requestCreateExplainability :: CreateExplainability -> TestTree
+requestCreateExplainability =
+  req
+    "CreateExplainability"
+    "fixture/CreateExplainability.yaml"
+
+requestCreateExplainabilityExport :: CreateExplainabilityExport -> TestTree
+requestCreateExplainabilityExport =
+  req
+    "CreateExplainabilityExport"
+    "fixture/CreateExplainabilityExport.yaml"
+
+requestCreateForecast :: CreateForecast -> TestTree
+requestCreateForecast =
+  req
+    "CreateForecast"
+    "fixture/CreateForecast.yaml"
+
+requestCreateForecastExportJob :: CreateForecastExportJob -> TestTree
+requestCreateForecastExportJob =
+  req
+    "CreateForecastExportJob"
+    "fixture/CreateForecastExportJob.yaml"
+
+requestCreateMonitor :: CreateMonitor -> TestTree
+requestCreateMonitor =
+  req
+    "CreateMonitor"
+    "fixture/CreateMonitor.yaml"
+
+requestCreatePredictor :: CreatePredictor -> TestTree
+requestCreatePredictor =
+  req
+    "CreatePredictor"
+    "fixture/CreatePredictor.yaml"
+
+requestCreatePredictorBacktestExportJob :: CreatePredictorBacktestExportJob -> TestTree
+requestCreatePredictorBacktestExportJob =
+  req
+    "CreatePredictorBacktestExportJob"
+    "fixture/CreatePredictorBacktestExportJob.yaml"
+
+requestCreateWhatIfAnalysis :: CreateWhatIfAnalysis -> TestTree
+requestCreateWhatIfAnalysis =
+  req
+    "CreateWhatIfAnalysis"
+    "fixture/CreateWhatIfAnalysis.yaml"
+
+requestCreateWhatIfForecast :: CreateWhatIfForecast -> TestTree
+requestCreateWhatIfForecast =
+  req
+    "CreateWhatIfForecast"
+    "fixture/CreateWhatIfForecast.yaml"
+
+requestCreateWhatIfForecastExport :: CreateWhatIfForecastExport -> TestTree
+requestCreateWhatIfForecastExport =
+  req
+    "CreateWhatIfForecastExport"
+    "fixture/CreateWhatIfForecastExport.yaml"
+
+requestDeleteDataset :: DeleteDataset -> TestTree
+requestDeleteDataset =
+  req
+    "DeleteDataset"
+    "fixture/DeleteDataset.yaml"
+
+requestDeleteDatasetGroup :: DeleteDatasetGroup -> TestTree
+requestDeleteDatasetGroup =
+  req
+    "DeleteDatasetGroup"
+    "fixture/DeleteDatasetGroup.yaml"
+
+requestDeleteDatasetImportJob :: DeleteDatasetImportJob -> TestTree
+requestDeleteDatasetImportJob =
+  req
+    "DeleteDatasetImportJob"
+    "fixture/DeleteDatasetImportJob.yaml"
+
+requestDeleteExplainability :: DeleteExplainability -> TestTree
+requestDeleteExplainability =
+  req
+    "DeleteExplainability"
+    "fixture/DeleteExplainability.yaml"
+
+requestDeleteExplainabilityExport :: DeleteExplainabilityExport -> TestTree
+requestDeleteExplainabilityExport =
+  req
+    "DeleteExplainabilityExport"
+    "fixture/DeleteExplainabilityExport.yaml"
+
+requestDeleteForecast :: DeleteForecast -> TestTree
+requestDeleteForecast =
+  req
+    "DeleteForecast"
+    "fixture/DeleteForecast.yaml"
+
+requestDeleteForecastExportJob :: DeleteForecastExportJob -> TestTree
+requestDeleteForecastExportJob =
+  req
+    "DeleteForecastExportJob"
+    "fixture/DeleteForecastExportJob.yaml"
+
+requestDeleteMonitor :: DeleteMonitor -> TestTree
+requestDeleteMonitor =
+  req
+    "DeleteMonitor"
+    "fixture/DeleteMonitor.yaml"
+
+requestDeletePredictor :: DeletePredictor -> TestTree
+requestDeletePredictor =
+  req
+    "DeletePredictor"
+    "fixture/DeletePredictor.yaml"
+
+requestDeletePredictorBacktestExportJob :: DeletePredictorBacktestExportJob -> TestTree
+requestDeletePredictorBacktestExportJob =
+  req
+    "DeletePredictorBacktestExportJob"
+    "fixture/DeletePredictorBacktestExportJob.yaml"
+
+requestDeleteResourceTree :: DeleteResourceTree -> TestTree
+requestDeleteResourceTree =
+  req
+    "DeleteResourceTree"
+    "fixture/DeleteResourceTree.yaml"
+
+requestDeleteWhatIfAnalysis :: DeleteWhatIfAnalysis -> TestTree
+requestDeleteWhatIfAnalysis =
+  req
+    "DeleteWhatIfAnalysis"
+    "fixture/DeleteWhatIfAnalysis.yaml"
+
+requestDeleteWhatIfForecast :: DeleteWhatIfForecast -> TestTree
+requestDeleteWhatIfForecast =
+  req
+    "DeleteWhatIfForecast"
+    "fixture/DeleteWhatIfForecast.yaml"
+
+requestDeleteWhatIfForecastExport :: DeleteWhatIfForecastExport -> TestTree
+requestDeleteWhatIfForecastExport =
+  req
+    "DeleteWhatIfForecastExport"
+    "fixture/DeleteWhatIfForecastExport.yaml"
+
+requestDescribeAutoPredictor :: DescribeAutoPredictor -> TestTree
+requestDescribeAutoPredictor =
+  req
+    "DescribeAutoPredictor"
+    "fixture/DescribeAutoPredictor.yaml"
+
+requestDescribeDataset :: DescribeDataset -> TestTree
+requestDescribeDataset =
+  req
+    "DescribeDataset"
+    "fixture/DescribeDataset.yaml"
+
+requestDescribeDatasetGroup :: DescribeDatasetGroup -> TestTree
+requestDescribeDatasetGroup =
+  req
+    "DescribeDatasetGroup"
+    "fixture/DescribeDatasetGroup.yaml"
+
+requestDescribeDatasetImportJob :: DescribeDatasetImportJob -> TestTree
+requestDescribeDatasetImportJob =
+  req
+    "DescribeDatasetImportJob"
+    "fixture/DescribeDatasetImportJob.yaml"
+
+requestDescribeExplainability :: DescribeExplainability -> TestTree
+requestDescribeExplainability =
+  req
+    "DescribeExplainability"
+    "fixture/DescribeExplainability.yaml"
+
+requestDescribeExplainabilityExport :: DescribeExplainabilityExport -> TestTree
+requestDescribeExplainabilityExport =
+  req
+    "DescribeExplainabilityExport"
+    "fixture/DescribeExplainabilityExport.yaml"
+
+requestDescribeForecast :: DescribeForecast -> TestTree
+requestDescribeForecast =
+  req
+    "DescribeForecast"
+    "fixture/DescribeForecast.yaml"
+
+requestDescribeForecastExportJob :: DescribeForecastExportJob -> TestTree
+requestDescribeForecastExportJob =
+  req
+    "DescribeForecastExportJob"
+    "fixture/DescribeForecastExportJob.yaml"
+
+requestDescribeMonitor :: DescribeMonitor -> TestTree
+requestDescribeMonitor =
+  req
+    "DescribeMonitor"
+    "fixture/DescribeMonitor.yaml"
+
+requestDescribePredictor :: DescribePredictor -> TestTree
+requestDescribePredictor =
+  req
+    "DescribePredictor"
+    "fixture/DescribePredictor.yaml"
+
+requestDescribePredictorBacktestExportJob :: DescribePredictorBacktestExportJob -> TestTree
+requestDescribePredictorBacktestExportJob =
+  req
+    "DescribePredictorBacktestExportJob"
+    "fixture/DescribePredictorBacktestExportJob.yaml"
+
+requestDescribeWhatIfAnalysis :: DescribeWhatIfAnalysis -> TestTree
+requestDescribeWhatIfAnalysis =
+  req
+    "DescribeWhatIfAnalysis"
+    "fixture/DescribeWhatIfAnalysis.yaml"
+
+requestDescribeWhatIfForecast :: DescribeWhatIfForecast -> TestTree
+requestDescribeWhatIfForecast =
+  req
+    "DescribeWhatIfForecast"
+    "fixture/DescribeWhatIfForecast.yaml"
+
+requestDescribeWhatIfForecastExport :: DescribeWhatIfForecastExport -> TestTree
+requestDescribeWhatIfForecastExport =
+  req
+    "DescribeWhatIfForecastExport"
+    "fixture/DescribeWhatIfForecastExport.yaml"
+
+requestGetAccuracyMetrics :: GetAccuracyMetrics -> TestTree
+requestGetAccuracyMetrics =
+  req
+    "GetAccuracyMetrics"
+    "fixture/GetAccuracyMetrics.yaml"
+
+requestListDatasetGroups :: ListDatasetGroups -> TestTree
+requestListDatasetGroups =
+  req
+    "ListDatasetGroups"
+    "fixture/ListDatasetGroups.yaml"
+
+requestListDatasetImportJobs :: ListDatasetImportJobs -> TestTree
+requestListDatasetImportJobs =
+  req
+    "ListDatasetImportJobs"
+    "fixture/ListDatasetImportJobs.yaml"
+
+requestListDatasets :: ListDatasets -> TestTree
+requestListDatasets =
+  req
+    "ListDatasets"
+    "fixture/ListDatasets.yaml"
+
+requestListExplainabilities :: ListExplainabilities -> TestTree
+requestListExplainabilities =
+  req
+    "ListExplainabilities"
+    "fixture/ListExplainabilities.yaml"
+
+requestListExplainabilityExports :: ListExplainabilityExports -> TestTree
+requestListExplainabilityExports =
+  req
+    "ListExplainabilityExports"
+    "fixture/ListExplainabilityExports.yaml"
+
+requestListForecastExportJobs :: ListForecastExportJobs -> TestTree
+requestListForecastExportJobs =
+  req
+    "ListForecastExportJobs"
+    "fixture/ListForecastExportJobs.yaml"
+
+requestListForecasts :: ListForecasts -> TestTree
+requestListForecasts =
+  req
+    "ListForecasts"
+    "fixture/ListForecasts.yaml"
+
+requestListMonitorEvaluations :: ListMonitorEvaluations -> TestTree
+requestListMonitorEvaluations =
+  req
+    "ListMonitorEvaluations"
+    "fixture/ListMonitorEvaluations.yaml"
+
+requestListMonitors :: ListMonitors -> TestTree
+requestListMonitors =
+  req
+    "ListMonitors"
+    "fixture/ListMonitors.yaml"
+
+requestListPredictorBacktestExportJobs :: ListPredictorBacktestExportJobs -> TestTree
+requestListPredictorBacktestExportJobs =
+  req
+    "ListPredictorBacktestExportJobs"
+    "fixture/ListPredictorBacktestExportJobs.yaml"
+
+requestListPredictors :: ListPredictors -> TestTree
+requestListPredictors =
+  req
+    "ListPredictors"
+    "fixture/ListPredictors.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestListWhatIfAnalyses :: ListWhatIfAnalyses -> TestTree
+requestListWhatIfAnalyses =
+  req
+    "ListWhatIfAnalyses"
+    "fixture/ListWhatIfAnalyses.yaml"
+
+requestListWhatIfForecastExports :: ListWhatIfForecastExports -> TestTree
+requestListWhatIfForecastExports =
+  req
+    "ListWhatIfForecastExports"
+    "fixture/ListWhatIfForecastExports.yaml"
+
+requestListWhatIfForecasts :: ListWhatIfForecasts -> TestTree
+requestListWhatIfForecasts =
+  req
+    "ListWhatIfForecasts"
+    "fixture/ListWhatIfForecasts.yaml"
+
+requestResumeResource :: ResumeResource -> TestTree
+requestResumeResource =
+  req
+    "ResumeResource"
+    "fixture/ResumeResource.yaml"
+
+requestStopResource :: StopResource -> TestTree
+requestStopResource =
+  req
+    "StopResource"
+    "fixture/StopResource.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateDatasetGroup :: UpdateDatasetGroup -> TestTree
+requestUpdateDatasetGroup =
+  req
+    "UpdateDatasetGroup"
+    "fixture/UpdateDatasetGroup.yaml"
+
+-- Responses
+
+responseCreateAutoPredictor :: CreateAutoPredictorResponse -> TestTree
+responseCreateAutoPredictor =
+  res
+    "CreateAutoPredictorResponse"
+    "fixture/CreateAutoPredictorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAutoPredictor)
+
+responseCreateDataset :: CreateDatasetResponse -> TestTree
+responseCreateDataset =
+  res
+    "CreateDatasetResponse"
+    "fixture/CreateDatasetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDataset)
+
+responseCreateDatasetGroup :: CreateDatasetGroupResponse -> TestTree
+responseCreateDatasetGroup =
+  res
+    "CreateDatasetGroupResponse"
+    "fixture/CreateDatasetGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDatasetGroup)
+
+responseCreateDatasetImportJob :: CreateDatasetImportJobResponse -> TestTree
+responseCreateDatasetImportJob =
+  res
+    "CreateDatasetImportJobResponse"
+    "fixture/CreateDatasetImportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDatasetImportJob)
+
+responseCreateExplainability :: CreateExplainabilityResponse -> TestTree
+responseCreateExplainability =
+  res
+    "CreateExplainabilityResponse"
+    "fixture/CreateExplainabilityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateExplainability)
+
+responseCreateExplainabilityExport :: CreateExplainabilityExportResponse -> TestTree
+responseCreateExplainabilityExport =
+  res
+    "CreateExplainabilityExportResponse"
+    "fixture/CreateExplainabilityExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateExplainabilityExport)
+
+responseCreateForecast :: CreateForecastResponse -> TestTree
+responseCreateForecast =
+  res
+    "CreateForecastResponse"
+    "fixture/CreateForecastResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateForecast)
+
+responseCreateForecastExportJob :: CreateForecastExportJobResponse -> TestTree
+responseCreateForecastExportJob =
+  res
+    "CreateForecastExportJobResponse"
+    "fixture/CreateForecastExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateForecastExportJob)
+
+responseCreateMonitor :: CreateMonitorResponse -> TestTree
+responseCreateMonitor =
+  res
+    "CreateMonitorResponse"
+    "fixture/CreateMonitorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateMonitor)
+
+responseCreatePredictor :: CreatePredictorResponse -> TestTree
+responseCreatePredictor =
+  res
+    "CreatePredictorResponse"
+    "fixture/CreatePredictorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreatePredictor)
+
+responseCreatePredictorBacktestExportJob :: CreatePredictorBacktestExportJobResponse -> TestTree
+responseCreatePredictorBacktestExportJob =
+  res
+    "CreatePredictorBacktestExportJobResponse"
+    "fixture/CreatePredictorBacktestExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreatePredictorBacktestExportJob)
+
+responseCreateWhatIfAnalysis :: CreateWhatIfAnalysisResponse -> TestTree
+responseCreateWhatIfAnalysis =
+  res
+    "CreateWhatIfAnalysisResponse"
+    "fixture/CreateWhatIfAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWhatIfAnalysis)
+
+responseCreateWhatIfForecast :: CreateWhatIfForecastResponse -> TestTree
+responseCreateWhatIfForecast =
+  res
+    "CreateWhatIfForecastResponse"
+    "fixture/CreateWhatIfForecastResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWhatIfForecast)
+
+responseCreateWhatIfForecastExport :: CreateWhatIfForecastExportResponse -> TestTree
+responseCreateWhatIfForecastExport =
+  res
+    "CreateWhatIfForecastExportResponse"
+    "fixture/CreateWhatIfForecastExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateWhatIfForecastExport)
+
+responseDeleteDataset :: DeleteDatasetResponse -> TestTree
+responseDeleteDataset =
+  res
+    "DeleteDatasetResponse"
+    "fixture/DeleteDatasetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDataset)
+
+responseDeleteDatasetGroup :: DeleteDatasetGroupResponse -> TestTree
+responseDeleteDatasetGroup =
+  res
+    "DeleteDatasetGroupResponse"
+    "fixture/DeleteDatasetGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDatasetGroup)
+
+responseDeleteDatasetImportJob :: DeleteDatasetImportJobResponse -> TestTree
+responseDeleteDatasetImportJob =
+  res
+    "DeleteDatasetImportJobResponse"
+    "fixture/DeleteDatasetImportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDatasetImportJob)
+
+responseDeleteExplainability :: DeleteExplainabilityResponse -> TestTree
+responseDeleteExplainability =
+  res
+    "DeleteExplainabilityResponse"
+    "fixture/DeleteExplainabilityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteExplainability)
+
+responseDeleteExplainabilityExport :: DeleteExplainabilityExportResponse -> TestTree
+responseDeleteExplainabilityExport =
+  res
+    "DeleteExplainabilityExportResponse"
+    "fixture/DeleteExplainabilityExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteExplainabilityExport)
+
+responseDeleteForecast :: DeleteForecastResponse -> TestTree
+responseDeleteForecast =
+  res
+    "DeleteForecastResponse"
+    "fixture/DeleteForecastResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteForecast)
+
+responseDeleteForecastExportJob :: DeleteForecastExportJobResponse -> TestTree
+responseDeleteForecastExportJob =
+  res
+    "DeleteForecastExportJobResponse"
+    "fixture/DeleteForecastExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteForecastExportJob)
+
+responseDeleteMonitor :: DeleteMonitorResponse -> TestTree
+responseDeleteMonitor =
+  res
+    "DeleteMonitorResponse"
+    "fixture/DeleteMonitorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteMonitor)
+
+responseDeletePredictor :: DeletePredictorResponse -> TestTree
+responseDeletePredictor =
+  res
+    "DeletePredictorResponse"
+    "fixture/DeletePredictorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePredictor)
+
+responseDeletePredictorBacktestExportJob :: DeletePredictorBacktestExportJobResponse -> TestTree
+responseDeletePredictorBacktestExportJob =
+  res
+    "DeletePredictorBacktestExportJobResponse"
+    "fixture/DeletePredictorBacktestExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePredictorBacktestExportJob)
+
+responseDeleteResourceTree :: DeleteResourceTreeResponse -> TestTree
+responseDeleteResourceTree =
+  res
+    "DeleteResourceTreeResponse"
+    "fixture/DeleteResourceTreeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteResourceTree)
+
+responseDeleteWhatIfAnalysis :: DeleteWhatIfAnalysisResponse -> TestTree
+responseDeleteWhatIfAnalysis =
+  res
+    "DeleteWhatIfAnalysisResponse"
+    "fixture/DeleteWhatIfAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWhatIfAnalysis)
+
+responseDeleteWhatIfForecast :: DeleteWhatIfForecastResponse -> TestTree
+responseDeleteWhatIfForecast =
+  res
+    "DeleteWhatIfForecastResponse"
+    "fixture/DeleteWhatIfForecastResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWhatIfForecast)
+
+responseDeleteWhatIfForecastExport :: DeleteWhatIfForecastExportResponse -> TestTree
+responseDeleteWhatIfForecastExport =
+  res
+    "DeleteWhatIfForecastExportResponse"
+    "fixture/DeleteWhatIfForecastExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteWhatIfForecastExport)
+
+responseDescribeAutoPredictor :: DescribeAutoPredictorResponse -> TestTree
+responseDescribeAutoPredictor =
+  res
+    "DescribeAutoPredictorResponse"
+    "fixture/DescribeAutoPredictorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAutoPredictor)
+
+responseDescribeDataset :: DescribeDatasetResponse -> TestTree
+responseDescribeDataset =
+  res
+    "DescribeDatasetResponse"
+    "fixture/DescribeDatasetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDataset)
+
+responseDescribeDatasetGroup :: DescribeDatasetGroupResponse -> TestTree
+responseDescribeDatasetGroup =
+  res
+    "DescribeDatasetGroupResponse"
+    "fixture/DescribeDatasetGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDatasetGroup)
+
+responseDescribeDatasetImportJob :: DescribeDatasetImportJobResponse -> TestTree
+responseDescribeDatasetImportJob =
+  res
+    "DescribeDatasetImportJobResponse"
+    "fixture/DescribeDatasetImportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDatasetImportJob)
+
+responseDescribeExplainability :: DescribeExplainabilityResponse -> TestTree
+responseDescribeExplainability =
+  res
+    "DescribeExplainabilityResponse"
+    "fixture/DescribeExplainabilityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeExplainability)
+
+responseDescribeExplainabilityExport :: DescribeExplainabilityExportResponse -> TestTree
+responseDescribeExplainabilityExport =
+  res
+    "DescribeExplainabilityExportResponse"
+    "fixture/DescribeExplainabilityExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeExplainabilityExport)
+
+responseDescribeForecast :: DescribeForecastResponse -> TestTree
+responseDescribeForecast =
+  res
+    "DescribeForecastResponse"
+    "fixture/DescribeForecastResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeForecast)
+
+responseDescribeForecastExportJob :: DescribeForecastExportJobResponse -> TestTree
+responseDescribeForecastExportJob =
+  res
+    "DescribeForecastExportJobResponse"
+    "fixture/DescribeForecastExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeForecastExportJob)
+
+responseDescribeMonitor :: DescribeMonitorResponse -> TestTree
+responseDescribeMonitor =
+  res
+    "DescribeMonitorResponse"
+    "fixture/DescribeMonitorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeMonitor)
+
+responseDescribePredictor :: DescribePredictorResponse -> TestTree
+responseDescribePredictor =
+  res
+    "DescribePredictorResponse"
+    "fixture/DescribePredictorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePredictor)
+
+responseDescribePredictorBacktestExportJob :: DescribePredictorBacktestExportJobResponse -> TestTree
+responseDescribePredictorBacktestExportJob =
+  res
+    "DescribePredictorBacktestExportJobResponse"
+    "fixture/DescribePredictorBacktestExportJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePredictorBacktestExportJob)
+
+responseDescribeWhatIfAnalysis :: DescribeWhatIfAnalysisResponse -> TestTree
+responseDescribeWhatIfAnalysis =
+  res
+    "DescribeWhatIfAnalysisResponse"
+    "fixture/DescribeWhatIfAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWhatIfAnalysis)
+
+responseDescribeWhatIfForecast :: DescribeWhatIfForecastResponse -> TestTree
+responseDescribeWhatIfForecast =
+  res
+    "DescribeWhatIfForecastResponse"
+    "fixture/DescribeWhatIfForecastResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWhatIfForecast)
+
+responseDescribeWhatIfForecastExport :: DescribeWhatIfForecastExportResponse -> TestTree
+responseDescribeWhatIfForecastExport =
+  res
+    "DescribeWhatIfForecastExportResponse"
+    "fixture/DescribeWhatIfForecastExportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeWhatIfForecastExport)
+
+responseGetAccuracyMetrics :: GetAccuracyMetricsResponse -> TestTree
+responseGetAccuracyMetrics =
+  res
+    "GetAccuracyMetricsResponse"
+    "fixture/GetAccuracyMetricsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAccuracyMetrics)
+
+responseListDatasetGroups :: ListDatasetGroupsResponse -> TestTree
+responseListDatasetGroups =
+  res
+    "ListDatasetGroupsResponse"
+    "fixture/ListDatasetGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDatasetGroups)
+
+responseListDatasetImportJobs :: ListDatasetImportJobsResponse -> TestTree
+responseListDatasetImportJobs =
+  res
+    "ListDatasetImportJobsResponse"
+    "fixture/ListDatasetImportJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDatasetImportJobs)
+
+responseListDatasets :: ListDatasetsResponse -> TestTree
+responseListDatasets =
+  res
+    "ListDatasetsResponse"
+    "fixture/ListDatasetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDatasets)
+
+responseListExplainabilities :: ListExplainabilitiesResponse -> TestTree
+responseListExplainabilities =
+  res
+    "ListExplainabilitiesResponse"
+    "fixture/ListExplainabilitiesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExplainabilities)
+
+responseListExplainabilityExports :: ListExplainabilityExportsResponse -> TestTree
+responseListExplainabilityExports =
+  res
+    "ListExplainabilityExportsResponse"
+    "fixture/ListExplainabilityExportsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListExplainabilityExports)
+
+responseListForecastExportJobs :: ListForecastExportJobsResponse -> TestTree
+responseListForecastExportJobs =
+  res
+    "ListForecastExportJobsResponse"
+    "fixture/ListForecastExportJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListForecastExportJobs)
+
+responseListForecasts :: ListForecastsResponse -> TestTree
+responseListForecasts =
+  res
+    "ListForecastsResponse"
+    "fixture/ListForecastsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListForecasts)
+
+responseListMonitorEvaluations :: ListMonitorEvaluationsResponse -> TestTree
+responseListMonitorEvaluations =
+  res
+    "ListMonitorEvaluationsResponse"
+    "fixture/ListMonitorEvaluationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMonitorEvaluations)
+
+responseListMonitors :: ListMonitorsResponse -> TestTree
+responseListMonitors =
+  res
+    "ListMonitorsResponse"
+    "fixture/ListMonitorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListMonitors)
+
+responseListPredictorBacktestExportJobs :: ListPredictorBacktestExportJobsResponse -> TestTree
+responseListPredictorBacktestExportJobs =
+  res
+    "ListPredictorBacktestExportJobsResponse"
+    "fixture/ListPredictorBacktestExportJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPredictorBacktestExportJobs)
+
+responseListPredictors :: ListPredictorsResponse -> TestTree
+responseListPredictors =
+  res
+    "ListPredictorsResponse"
+    "fixture/ListPredictorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListPredictors)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseListWhatIfAnalyses :: ListWhatIfAnalysesResponse -> TestTree
+responseListWhatIfAnalyses =
+  res
+    "ListWhatIfAnalysesResponse"
+    "fixture/ListWhatIfAnalysesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWhatIfAnalyses)
+
+responseListWhatIfForecastExports :: ListWhatIfForecastExportsResponse -> TestTree
+responseListWhatIfForecastExports =
+  res
+    "ListWhatIfForecastExportsResponse"
+    "fixture/ListWhatIfForecastExportsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWhatIfForecastExports)
+
+responseListWhatIfForecasts :: ListWhatIfForecastsResponse -> TestTree
+responseListWhatIfForecasts =
+  res
+    "ListWhatIfForecastsResponse"
+    "fixture/ListWhatIfForecastsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListWhatIfForecasts)
+
+responseResumeResource :: ResumeResourceResponse -> TestTree
+responseResumeResource =
+  res
+    "ResumeResourceResponse"
+    "fixture/ResumeResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResumeResource)
+
+responseStopResource :: StopResourceResponse -> TestTree
+responseStopResource =
+  res
+    "StopResourceResponse"
+    "fixture/StopResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopResource)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateDatasetGroup :: UpdateDatasetGroupResponse -> TestTree
+responseUpdateDatasetGroup =
+  res
+    "UpdateDatasetGroupResponse"
+    "fixture/UpdateDatasetGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDatasetGroup)
