diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/Budgets/Budget.hs b/gen/Stratosphere/Budgets/Budget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget.hs
@@ -0,0 +1,58 @@
+module Stratosphere.Budgets.Budget (
+        module Exports, Budget(..), mkBudget
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.BudgetDataProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.NotificationWithSubscribersProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.ResourceTagProperty as Exports
+import Stratosphere.ResourceProperties
+data Budget
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budget.html>
+    Budget {haddock_workaround_ :: (),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budget.html#cfn-budgets-budget-budget>
+            budget :: BudgetDataProperty,
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budget.html#cfn-budgets-budget-notificationswithsubscribers>
+            notificationsWithSubscribers :: (Prelude.Maybe [NotificationWithSubscribersProperty]),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budget.html#cfn-budgets-budget-resourcetags>
+            resourceTags :: (Prelude.Maybe [ResourceTagProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBudget :: BudgetDataProperty -> Budget
+mkBudget budget
+  = Budget
+      {haddock_workaround_ = (), budget = budget,
+       notificationsWithSubscribers = Prelude.Nothing,
+       resourceTags = Prelude.Nothing}
+instance ToResourceProperties Budget where
+  toResourceProperties Budget {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Budget" JSON..= budget]
+                           (Prelude.catMaybes
+                              [(JSON..=) "NotificationsWithSubscribers"
+                                 Prelude.<$> notificationsWithSubscribers,
+                               (JSON..=) "ResourceTags" Prelude.<$> resourceTags]))}
+instance JSON.ToJSON Budget where
+  toJSON Budget {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Budget" JSON..= budget]
+              (Prelude.catMaybes
+                 [(JSON..=) "NotificationsWithSubscribers"
+                    Prelude.<$> notificationsWithSubscribers,
+                  (JSON..=) "ResourceTags" Prelude.<$> resourceTags])))
+instance Property "Budget" Budget where
+  type PropertyType "Budget" Budget = BudgetDataProperty
+  set newValue Budget {..} = Budget {budget = newValue, ..}
+instance Property "NotificationsWithSubscribers" Budget where
+  type PropertyType "NotificationsWithSubscribers" Budget = [NotificationWithSubscribersProperty]
+  set newValue Budget {..}
+    = Budget {notificationsWithSubscribers = Prelude.pure newValue, ..}
+instance Property "ResourceTags" Budget where
+  type PropertyType "ResourceTags" Budget = [ResourceTagProperty]
+  set newValue Budget {..}
+    = Budget {resourceTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/AutoAdjustDataProperty.hs b/gen/Stratosphere/Budgets/Budget/AutoAdjustDataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/AutoAdjustDataProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.Budgets.Budget.AutoAdjustDataProperty (
+        module Exports, AutoAdjustDataProperty(..),
+        mkAutoAdjustDataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.HistoricalOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AutoAdjustDataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-autoadjustdata.html>
+    AutoAdjustDataProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-autoadjustdata.html#cfn-budgets-budget-autoadjustdata-autoadjusttype>
+                            autoAdjustType :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-autoadjustdata.html#cfn-budgets-budget-autoadjustdata-historicaloptions>
+                            historicalOptions :: (Prelude.Maybe HistoricalOptionsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAutoAdjustDataProperty ::
+  Value Prelude.Text -> AutoAdjustDataProperty
+mkAutoAdjustDataProperty autoAdjustType
+  = AutoAdjustDataProperty
+      {haddock_workaround_ = (), autoAdjustType = autoAdjustType,
+       historicalOptions = Prelude.Nothing}
+instance ToResourceProperties AutoAdjustDataProperty where
+  toResourceProperties AutoAdjustDataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.AutoAdjustData",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AutoAdjustType" JSON..= autoAdjustType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "HistoricalOptions" Prelude.<$> historicalOptions]))}
+instance JSON.ToJSON AutoAdjustDataProperty where
+  toJSON AutoAdjustDataProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AutoAdjustType" JSON..= autoAdjustType]
+              (Prelude.catMaybes
+                 [(JSON..=) "HistoricalOptions" Prelude.<$> historicalOptions])))
+instance Property "AutoAdjustType" AutoAdjustDataProperty where
+  type PropertyType "AutoAdjustType" AutoAdjustDataProperty = Value Prelude.Text
+  set newValue AutoAdjustDataProperty {..}
+    = AutoAdjustDataProperty {autoAdjustType = newValue, ..}
+instance Property "HistoricalOptions" AutoAdjustDataProperty where
+  type PropertyType "HistoricalOptions" AutoAdjustDataProperty = HistoricalOptionsProperty
+  set newValue AutoAdjustDataProperty {..}
+    = AutoAdjustDataProperty
+        {historicalOptions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/AutoAdjustDataProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/AutoAdjustDataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/AutoAdjustDataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.AutoAdjustDataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AutoAdjustDataProperty :: Prelude.Type
+instance ToResourceProperties AutoAdjustDataProperty
+instance Prelude.Eq AutoAdjustDataProperty
+instance Prelude.Show AutoAdjustDataProperty
+instance JSON.ToJSON AutoAdjustDataProperty
diff --git a/gen/Stratosphere/Budgets/Budget/BudgetDataProperty.hs b/gen/Stratosphere/Budgets/Budget/BudgetDataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/BudgetDataProperty.hs
@@ -0,0 +1,137 @@
+module Stratosphere.Budgets.Budget.BudgetDataProperty (
+        module Exports, BudgetDataProperty(..), mkBudgetDataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.AutoAdjustDataProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.CostTypesProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.ExpressionProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.SpendProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.TimePeriodProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BudgetDataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html>
+    BudgetDataProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-autoadjustdata>
+                        autoAdjustData :: (Prelude.Maybe AutoAdjustDataProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-billingviewarn>
+                        billingViewArn :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-budgetlimit>
+                        budgetLimit :: (Prelude.Maybe SpendProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-budgetname>
+                        budgetName :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-budgettype>
+                        budgetType :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-costfilters>
+                        costFilters :: (Prelude.Maybe JSON.Object),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-costtypes>
+                        costTypes :: (Prelude.Maybe CostTypesProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-filterexpression>
+                        filterExpression :: (Prelude.Maybe ExpressionProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-metrics>
+                        metrics :: (Prelude.Maybe (ValueList Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-plannedbudgetlimits>
+                        plannedBudgetLimits :: (Prelude.Maybe JSON.Object),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-timeperiod>
+                        timePeriod :: (Prelude.Maybe TimePeriodProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-budgetdata.html#cfn-budgets-budget-budgetdata-timeunit>
+                        timeUnit :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBudgetDataProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> BudgetDataProperty
+mkBudgetDataProperty budgetType timeUnit
+  = BudgetDataProperty
+      {haddock_workaround_ = (), budgetType = budgetType,
+       timeUnit = timeUnit, autoAdjustData = Prelude.Nothing,
+       billingViewArn = Prelude.Nothing, budgetLimit = Prelude.Nothing,
+       budgetName = Prelude.Nothing, costFilters = Prelude.Nothing,
+       costTypes = Prelude.Nothing, filterExpression = Prelude.Nothing,
+       metrics = Prelude.Nothing, plannedBudgetLimits = Prelude.Nothing,
+       timePeriod = Prelude.Nothing}
+instance ToResourceProperties BudgetDataProperty where
+  toResourceProperties BudgetDataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.BudgetData",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BudgetType" JSON..= budgetType, "TimeUnit" JSON..= timeUnit]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AutoAdjustData" Prelude.<$> autoAdjustData,
+                               (JSON..=) "BillingViewArn" Prelude.<$> billingViewArn,
+                               (JSON..=) "BudgetLimit" Prelude.<$> budgetLimit,
+                               (JSON..=) "BudgetName" Prelude.<$> budgetName,
+                               (JSON..=) "CostFilters" Prelude.<$> costFilters,
+                               (JSON..=) "CostTypes" Prelude.<$> costTypes,
+                               (JSON..=) "FilterExpression" Prelude.<$> filterExpression,
+                               (JSON..=) "Metrics" Prelude.<$> metrics,
+                               (JSON..=) "PlannedBudgetLimits" Prelude.<$> plannedBudgetLimits,
+                               (JSON..=) "TimePeriod" Prelude.<$> timePeriod]))}
+instance JSON.ToJSON BudgetDataProperty where
+  toJSON BudgetDataProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BudgetType" JSON..= budgetType, "TimeUnit" JSON..= timeUnit]
+              (Prelude.catMaybes
+                 [(JSON..=) "AutoAdjustData" Prelude.<$> autoAdjustData,
+                  (JSON..=) "BillingViewArn" Prelude.<$> billingViewArn,
+                  (JSON..=) "BudgetLimit" Prelude.<$> budgetLimit,
+                  (JSON..=) "BudgetName" Prelude.<$> budgetName,
+                  (JSON..=) "CostFilters" Prelude.<$> costFilters,
+                  (JSON..=) "CostTypes" Prelude.<$> costTypes,
+                  (JSON..=) "FilterExpression" Prelude.<$> filterExpression,
+                  (JSON..=) "Metrics" Prelude.<$> metrics,
+                  (JSON..=) "PlannedBudgetLimits" Prelude.<$> plannedBudgetLimits,
+                  (JSON..=) "TimePeriod" Prelude.<$> timePeriod])))
+instance Property "AutoAdjustData" BudgetDataProperty where
+  type PropertyType "AutoAdjustData" BudgetDataProperty = AutoAdjustDataProperty
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {autoAdjustData = Prelude.pure newValue, ..}
+instance Property "BillingViewArn" BudgetDataProperty where
+  type PropertyType "BillingViewArn" BudgetDataProperty = Value Prelude.Text
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {billingViewArn = Prelude.pure newValue, ..}
+instance Property "BudgetLimit" BudgetDataProperty where
+  type PropertyType "BudgetLimit" BudgetDataProperty = SpendProperty
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {budgetLimit = Prelude.pure newValue, ..}
+instance Property "BudgetName" BudgetDataProperty where
+  type PropertyType "BudgetName" BudgetDataProperty = Value Prelude.Text
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {budgetName = Prelude.pure newValue, ..}
+instance Property "BudgetType" BudgetDataProperty where
+  type PropertyType "BudgetType" BudgetDataProperty = Value Prelude.Text
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {budgetType = newValue, ..}
+instance Property "CostFilters" BudgetDataProperty where
+  type PropertyType "CostFilters" BudgetDataProperty = JSON.Object
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {costFilters = Prelude.pure newValue, ..}
+instance Property "CostTypes" BudgetDataProperty where
+  type PropertyType "CostTypes" BudgetDataProperty = CostTypesProperty
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {costTypes = Prelude.pure newValue, ..}
+instance Property "FilterExpression" BudgetDataProperty where
+  type PropertyType "FilterExpression" BudgetDataProperty = ExpressionProperty
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {filterExpression = Prelude.pure newValue, ..}
+instance Property "Metrics" BudgetDataProperty where
+  type PropertyType "Metrics" BudgetDataProperty = ValueList Prelude.Text
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {metrics = Prelude.pure newValue, ..}
+instance Property "PlannedBudgetLimits" BudgetDataProperty where
+  type PropertyType "PlannedBudgetLimits" BudgetDataProperty = JSON.Object
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty
+        {plannedBudgetLimits = Prelude.pure newValue, ..}
+instance Property "TimePeriod" BudgetDataProperty where
+  type PropertyType "TimePeriod" BudgetDataProperty = TimePeriodProperty
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {timePeriod = Prelude.pure newValue, ..}
+instance Property "TimeUnit" BudgetDataProperty where
+  type PropertyType "TimeUnit" BudgetDataProperty = Value Prelude.Text
+  set newValue BudgetDataProperty {..}
+    = BudgetDataProperty {timeUnit = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/BudgetDataProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/BudgetDataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/BudgetDataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.BudgetDataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BudgetDataProperty :: Prelude.Type
+instance ToResourceProperties BudgetDataProperty
+instance Prelude.Eq BudgetDataProperty
+instance Prelude.Show BudgetDataProperty
+instance JSON.ToJSON BudgetDataProperty
diff --git a/gen/Stratosphere/Budgets/Budget/CostCategoryValuesProperty.hs b/gen/Stratosphere/Budgets/Budget/CostCategoryValuesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/CostCategoryValuesProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.Budgets.Budget.CostCategoryValuesProperty (
+        CostCategoryValuesProperty(..), mkCostCategoryValuesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CostCategoryValuesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costcategoryvalues.html>
+    CostCategoryValuesProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costcategoryvalues.html#cfn-budgets-budget-costcategoryvalues-key>
+                                key :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costcategoryvalues.html#cfn-budgets-budget-costcategoryvalues-matchoptions>
+                                matchOptions :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costcategoryvalues.html#cfn-budgets-budget-costcategoryvalues-values>
+                                values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCostCategoryValuesProperty :: CostCategoryValuesProperty
+mkCostCategoryValuesProperty
+  = CostCategoryValuesProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       matchOptions = Prelude.Nothing, values = Prelude.Nothing}
+instance ToResourceProperties CostCategoryValuesProperty where
+  toResourceProperties CostCategoryValuesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.CostCategoryValues",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "MatchOptions" Prelude.<$> matchOptions,
+                            (JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON CostCategoryValuesProperty where
+  toJSON CostCategoryValuesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "MatchOptions" Prelude.<$> matchOptions,
+               (JSON..=) "Values" Prelude.<$> values]))
+instance Property "Key" CostCategoryValuesProperty where
+  type PropertyType "Key" CostCategoryValuesProperty = Value Prelude.Text
+  set newValue CostCategoryValuesProperty {..}
+    = CostCategoryValuesProperty {key = Prelude.pure newValue, ..}
+instance Property "MatchOptions" CostCategoryValuesProperty where
+  type PropertyType "MatchOptions" CostCategoryValuesProperty = ValueList Prelude.Text
+  set newValue CostCategoryValuesProperty {..}
+    = CostCategoryValuesProperty
+        {matchOptions = Prelude.pure newValue, ..}
+instance Property "Values" CostCategoryValuesProperty where
+  type PropertyType "Values" CostCategoryValuesProperty = ValueList Prelude.Text
+  set newValue CostCategoryValuesProperty {..}
+    = CostCategoryValuesProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/CostCategoryValuesProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/CostCategoryValuesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/CostCategoryValuesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.CostCategoryValuesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CostCategoryValuesProperty :: Prelude.Type
+instance ToResourceProperties CostCategoryValuesProperty
+instance Prelude.Eq CostCategoryValuesProperty
+instance Prelude.Show CostCategoryValuesProperty
+instance JSON.ToJSON CostCategoryValuesProperty
diff --git a/gen/Stratosphere/Budgets/Budget/CostTypesProperty.hs b/gen/Stratosphere/Budgets/Budget/CostTypesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/CostTypesProperty.hs
@@ -0,0 +1,128 @@
+module Stratosphere.Budgets.Budget.CostTypesProperty (
+        CostTypesProperty(..), mkCostTypesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CostTypesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html>
+    CostTypesProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includecredit>
+                       includeCredit :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includediscount>
+                       includeDiscount :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includeothersubscription>
+                       includeOtherSubscription :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includerecurring>
+                       includeRecurring :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includerefund>
+                       includeRefund :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includesubscription>
+                       includeSubscription :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includesupport>
+                       includeSupport :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includetax>
+                       includeTax :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-includeupfront>
+                       includeUpfront :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-useamortized>
+                       useAmortized :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-costtypes.html#cfn-budgets-budget-costtypes-useblended>
+                       useBlended :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCostTypesProperty :: CostTypesProperty
+mkCostTypesProperty
+  = CostTypesProperty
+      {haddock_workaround_ = (), includeCredit = Prelude.Nothing,
+       includeDiscount = Prelude.Nothing,
+       includeOtherSubscription = Prelude.Nothing,
+       includeRecurring = Prelude.Nothing,
+       includeRefund = Prelude.Nothing,
+       includeSubscription = Prelude.Nothing,
+       includeSupport = Prelude.Nothing, includeTax = Prelude.Nothing,
+       includeUpfront = Prelude.Nothing, useAmortized = Prelude.Nothing,
+       useBlended = Prelude.Nothing}
+instance ToResourceProperties CostTypesProperty where
+  toResourceProperties CostTypesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.CostTypes",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "IncludeCredit" Prelude.<$> includeCredit,
+                            (JSON..=) "IncludeDiscount" Prelude.<$> includeDiscount,
+                            (JSON..=) "IncludeOtherSubscription"
+                              Prelude.<$> includeOtherSubscription,
+                            (JSON..=) "IncludeRecurring" Prelude.<$> includeRecurring,
+                            (JSON..=) "IncludeRefund" Prelude.<$> includeRefund,
+                            (JSON..=) "IncludeSubscription" Prelude.<$> includeSubscription,
+                            (JSON..=) "IncludeSupport" Prelude.<$> includeSupport,
+                            (JSON..=) "IncludeTax" Prelude.<$> includeTax,
+                            (JSON..=) "IncludeUpfront" Prelude.<$> includeUpfront,
+                            (JSON..=) "UseAmortized" Prelude.<$> useAmortized,
+                            (JSON..=) "UseBlended" Prelude.<$> useBlended])}
+instance JSON.ToJSON CostTypesProperty where
+  toJSON CostTypesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "IncludeCredit" Prelude.<$> includeCredit,
+               (JSON..=) "IncludeDiscount" Prelude.<$> includeDiscount,
+               (JSON..=) "IncludeOtherSubscription"
+                 Prelude.<$> includeOtherSubscription,
+               (JSON..=) "IncludeRecurring" Prelude.<$> includeRecurring,
+               (JSON..=) "IncludeRefund" Prelude.<$> includeRefund,
+               (JSON..=) "IncludeSubscription" Prelude.<$> includeSubscription,
+               (JSON..=) "IncludeSupport" Prelude.<$> includeSupport,
+               (JSON..=) "IncludeTax" Prelude.<$> includeTax,
+               (JSON..=) "IncludeUpfront" Prelude.<$> includeUpfront,
+               (JSON..=) "UseAmortized" Prelude.<$> useAmortized,
+               (JSON..=) "UseBlended" Prelude.<$> useBlended]))
+instance Property "IncludeCredit" CostTypesProperty where
+  type PropertyType "IncludeCredit" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {includeCredit = Prelude.pure newValue, ..}
+instance Property "IncludeDiscount" CostTypesProperty where
+  type PropertyType "IncludeDiscount" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {includeDiscount = Prelude.pure newValue, ..}
+instance Property "IncludeOtherSubscription" CostTypesProperty where
+  type PropertyType "IncludeOtherSubscription" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty
+        {includeOtherSubscription = Prelude.pure newValue, ..}
+instance Property "IncludeRecurring" CostTypesProperty where
+  type PropertyType "IncludeRecurring" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {includeRecurring = Prelude.pure newValue, ..}
+instance Property "IncludeRefund" CostTypesProperty where
+  type PropertyType "IncludeRefund" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {includeRefund = Prelude.pure newValue, ..}
+instance Property "IncludeSubscription" CostTypesProperty where
+  type PropertyType "IncludeSubscription" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty
+        {includeSubscription = Prelude.pure newValue, ..}
+instance Property "IncludeSupport" CostTypesProperty where
+  type PropertyType "IncludeSupport" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {includeSupport = Prelude.pure newValue, ..}
+instance Property "IncludeTax" CostTypesProperty where
+  type PropertyType "IncludeTax" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {includeTax = Prelude.pure newValue, ..}
+instance Property "IncludeUpfront" CostTypesProperty where
+  type PropertyType "IncludeUpfront" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {includeUpfront = Prelude.pure newValue, ..}
+instance Property "UseAmortized" CostTypesProperty where
+  type PropertyType "UseAmortized" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {useAmortized = Prelude.pure newValue, ..}
+instance Property "UseBlended" CostTypesProperty where
+  type PropertyType "UseBlended" CostTypesProperty = Value Prelude.Bool
+  set newValue CostTypesProperty {..}
+    = CostTypesProperty {useBlended = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/CostTypesProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/CostTypesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/CostTypesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.CostTypesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CostTypesProperty :: Prelude.Type
+instance ToResourceProperties CostTypesProperty
+instance Prelude.Eq CostTypesProperty
+instance Prelude.Show CostTypesProperty
+instance JSON.ToJSON CostTypesProperty
diff --git a/gen/Stratosphere/Budgets/Budget/ExpressionDimensionValuesProperty.hs b/gen/Stratosphere/Budgets/Budget/ExpressionDimensionValuesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/ExpressionDimensionValuesProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.Budgets.Budget.ExpressionDimensionValuesProperty (
+        ExpressionDimensionValuesProperty(..),
+        mkExpressionDimensionValuesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ExpressionDimensionValuesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expressiondimensionvalues.html>
+    ExpressionDimensionValuesProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expressiondimensionvalues.html#cfn-budgets-budget-expressiondimensionvalues-key>
+                                       key :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expressiondimensionvalues.html#cfn-budgets-budget-expressiondimensionvalues-matchoptions>
+                                       matchOptions :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expressiondimensionvalues.html#cfn-budgets-budget-expressiondimensionvalues-values>
+                                       values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExpressionDimensionValuesProperty ::
+  ExpressionDimensionValuesProperty
+mkExpressionDimensionValuesProperty
+  = ExpressionDimensionValuesProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       matchOptions = Prelude.Nothing, values = Prelude.Nothing}
+instance ToResourceProperties ExpressionDimensionValuesProperty where
+  toResourceProperties ExpressionDimensionValuesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.ExpressionDimensionValues",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "MatchOptions" Prelude.<$> matchOptions,
+                            (JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON ExpressionDimensionValuesProperty where
+  toJSON ExpressionDimensionValuesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "MatchOptions" Prelude.<$> matchOptions,
+               (JSON..=) "Values" Prelude.<$> values]))
+instance Property "Key" ExpressionDimensionValuesProperty where
+  type PropertyType "Key" ExpressionDimensionValuesProperty = Value Prelude.Text
+  set newValue ExpressionDimensionValuesProperty {..}
+    = ExpressionDimensionValuesProperty
+        {key = Prelude.pure newValue, ..}
+instance Property "MatchOptions" ExpressionDimensionValuesProperty where
+  type PropertyType "MatchOptions" ExpressionDimensionValuesProperty = ValueList Prelude.Text
+  set newValue ExpressionDimensionValuesProperty {..}
+    = ExpressionDimensionValuesProperty
+        {matchOptions = Prelude.pure newValue, ..}
+instance Property "Values" ExpressionDimensionValuesProperty where
+  type PropertyType "Values" ExpressionDimensionValuesProperty = ValueList Prelude.Text
+  set newValue ExpressionDimensionValuesProperty {..}
+    = ExpressionDimensionValuesProperty
+        {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/ExpressionDimensionValuesProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/ExpressionDimensionValuesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/ExpressionDimensionValuesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.ExpressionDimensionValuesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExpressionDimensionValuesProperty :: Prelude.Type
+instance ToResourceProperties ExpressionDimensionValuesProperty
+instance Prelude.Eq ExpressionDimensionValuesProperty
+instance Prelude.Show ExpressionDimensionValuesProperty
+instance JSON.ToJSON ExpressionDimensionValuesProperty
diff --git a/gen/Stratosphere/Budgets/Budget/ExpressionProperty.hs b/gen/Stratosphere/Budgets/Budget/ExpressionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/ExpressionProperty.hs
@@ -0,0 +1,79 @@
+module Stratosphere.Budgets.Budget.ExpressionProperty (
+        module Exports, ExpressionProperty(..), mkExpressionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.CostCategoryValuesProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.ExpressionDimensionValuesProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.TagValuesProperty as Exports
+import Stratosphere.ResourceProperties
+data ExpressionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expression.html>
+    ExpressionProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expression.html#cfn-budgets-budget-expression-and>
+                        and :: (Prelude.Maybe [ExpressionProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expression.html#cfn-budgets-budget-expression-costcategories>
+                        costCategories :: (Prelude.Maybe CostCategoryValuesProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expression.html#cfn-budgets-budget-expression-dimensions>
+                        dimensions :: (Prelude.Maybe ExpressionDimensionValuesProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expression.html#cfn-budgets-budget-expression-not>
+                        not :: (Prelude.Maybe ExpressionProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expression.html#cfn-budgets-budget-expression-or>
+                        or :: (Prelude.Maybe [ExpressionProperty]),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-expression.html#cfn-budgets-budget-expression-tags>
+                        tags :: (Prelude.Maybe TagValuesProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExpressionProperty :: ExpressionProperty
+mkExpressionProperty
+  = ExpressionProperty
+      {haddock_workaround_ = (), and = Prelude.Nothing,
+       costCategories = Prelude.Nothing, dimensions = Prelude.Nothing,
+       not = Prelude.Nothing, or = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties ExpressionProperty where
+  toResourceProperties ExpressionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.Expression",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "And" Prelude.<$> and,
+                            (JSON..=) "CostCategories" Prelude.<$> costCategories,
+                            (JSON..=) "Dimensions" Prelude.<$> dimensions,
+                            (JSON..=) "Not" Prelude.<$> not, (JSON..=) "Or" Prelude.<$> or,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON ExpressionProperty where
+  toJSON ExpressionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "And" Prelude.<$> and,
+               (JSON..=) "CostCategories" Prelude.<$> costCategories,
+               (JSON..=) "Dimensions" Prelude.<$> dimensions,
+               (JSON..=) "Not" Prelude.<$> not, (JSON..=) "Or" Prelude.<$> or,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "And" ExpressionProperty where
+  type PropertyType "And" ExpressionProperty = [ExpressionProperty]
+  set newValue ExpressionProperty {..}
+    = ExpressionProperty {and = Prelude.pure newValue, ..}
+instance Property "CostCategories" ExpressionProperty where
+  type PropertyType "CostCategories" ExpressionProperty = CostCategoryValuesProperty
+  set newValue ExpressionProperty {..}
+    = ExpressionProperty {costCategories = Prelude.pure newValue, ..}
+instance Property "Dimensions" ExpressionProperty where
+  type PropertyType "Dimensions" ExpressionProperty = ExpressionDimensionValuesProperty
+  set newValue ExpressionProperty {..}
+    = ExpressionProperty {dimensions = Prelude.pure newValue, ..}
+instance Property "Not" ExpressionProperty where
+  type PropertyType "Not" ExpressionProperty = ExpressionProperty
+  set newValue ExpressionProperty {..}
+    = ExpressionProperty {not = Prelude.pure newValue, ..}
+instance Property "Or" ExpressionProperty where
+  type PropertyType "Or" ExpressionProperty = [ExpressionProperty]
+  set newValue ExpressionProperty {..}
+    = ExpressionProperty {or = Prelude.pure newValue, ..}
+instance Property "Tags" ExpressionProperty where
+  type PropertyType "Tags" ExpressionProperty = TagValuesProperty
+  set newValue ExpressionProperty {..}
+    = ExpressionProperty {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/ExpressionProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/ExpressionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/ExpressionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.ExpressionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExpressionProperty :: Prelude.Type
+instance ToResourceProperties ExpressionProperty
+instance Prelude.Eq ExpressionProperty
+instance Prelude.Show ExpressionProperty
+instance JSON.ToJSON ExpressionProperty
diff --git a/gen/Stratosphere/Budgets/Budget/HistoricalOptionsProperty.hs b/gen/Stratosphere/Budgets/Budget/HistoricalOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/HistoricalOptionsProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.Budgets.Budget.HistoricalOptionsProperty (
+        HistoricalOptionsProperty(..), mkHistoricalOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HistoricalOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-historicaloptions.html>
+    HistoricalOptionsProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-historicaloptions.html#cfn-budgets-budget-historicaloptions-budgetadjustmentperiod>
+                               budgetAdjustmentPeriod :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHistoricalOptionsProperty ::
+  Value Prelude.Integer -> HistoricalOptionsProperty
+mkHistoricalOptionsProperty budgetAdjustmentPeriod
+  = HistoricalOptionsProperty
+      {haddock_workaround_ = (),
+       budgetAdjustmentPeriod = budgetAdjustmentPeriod}
+instance ToResourceProperties HistoricalOptionsProperty where
+  toResourceProperties HistoricalOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.HistoricalOptions",
+         supportsTags = Prelude.False,
+         properties = ["BudgetAdjustmentPeriod"
+                         JSON..= budgetAdjustmentPeriod]}
+instance JSON.ToJSON HistoricalOptionsProperty where
+  toJSON HistoricalOptionsProperty {..}
+    = JSON.object
+        ["BudgetAdjustmentPeriod" JSON..= budgetAdjustmentPeriod]
+instance Property "BudgetAdjustmentPeriod" HistoricalOptionsProperty where
+  type PropertyType "BudgetAdjustmentPeriod" HistoricalOptionsProperty = Value Prelude.Integer
+  set newValue HistoricalOptionsProperty {..}
+    = HistoricalOptionsProperty {budgetAdjustmentPeriod = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/HistoricalOptionsProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/HistoricalOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/HistoricalOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.HistoricalOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HistoricalOptionsProperty :: Prelude.Type
+instance ToResourceProperties HistoricalOptionsProperty
+instance Prelude.Eq HistoricalOptionsProperty
+instance Prelude.Show HistoricalOptionsProperty
+instance JSON.ToJSON HistoricalOptionsProperty
diff --git a/gen/Stratosphere/Budgets/Budget/NotificationProperty.hs b/gen/Stratosphere/Budgets/Budget/NotificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/NotificationProperty.hs
@@ -0,0 +1,70 @@
+module Stratosphere.Budgets.Budget.NotificationProperty (
+        NotificationProperty(..), mkNotificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NotificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-notification.html>
+    NotificationProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-notification.html#cfn-budgets-budget-notification-comparisonoperator>
+                          comparisonOperator :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-notification.html#cfn-budgets-budget-notification-notificationtype>
+                          notificationType :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-notification.html#cfn-budgets-budget-notification-threshold>
+                          threshold :: (Value Prelude.Double),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-notification.html#cfn-budgets-budget-notification-thresholdtype>
+                          thresholdType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotificationProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Double -> NotificationProperty
+mkNotificationProperty
+  comparisonOperator
+  notificationType
+  threshold
+  = NotificationProperty
+      {haddock_workaround_ = (), comparisonOperator = comparisonOperator,
+       notificationType = notificationType, threshold = threshold,
+       thresholdType = Prelude.Nothing}
+instance ToResourceProperties NotificationProperty where
+  toResourceProperties NotificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.Notification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ComparisonOperator" JSON..= comparisonOperator,
+                            "NotificationType" JSON..= notificationType,
+                            "Threshold" JSON..= threshold]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ThresholdType" Prelude.<$> thresholdType]))}
+instance JSON.ToJSON NotificationProperty where
+  toJSON NotificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ComparisonOperator" JSON..= comparisonOperator,
+               "NotificationType" JSON..= notificationType,
+               "Threshold" JSON..= threshold]
+              (Prelude.catMaybes
+                 [(JSON..=) "ThresholdType" Prelude.<$> thresholdType])))
+instance Property "ComparisonOperator" NotificationProperty where
+  type PropertyType "ComparisonOperator" NotificationProperty = Value Prelude.Text
+  set newValue NotificationProperty {..}
+    = NotificationProperty {comparisonOperator = newValue, ..}
+instance Property "NotificationType" NotificationProperty where
+  type PropertyType "NotificationType" NotificationProperty = Value Prelude.Text
+  set newValue NotificationProperty {..}
+    = NotificationProperty {notificationType = newValue, ..}
+instance Property "Threshold" NotificationProperty where
+  type PropertyType "Threshold" NotificationProperty = Value Prelude.Double
+  set newValue NotificationProperty {..}
+    = NotificationProperty {threshold = newValue, ..}
+instance Property "ThresholdType" NotificationProperty where
+  type PropertyType "ThresholdType" NotificationProperty = Value Prelude.Text
+  set newValue NotificationProperty {..}
+    = NotificationProperty {thresholdType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/NotificationProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/NotificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/NotificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.NotificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NotificationProperty :: Prelude.Type
+instance ToResourceProperties NotificationProperty
+instance Prelude.Eq NotificationProperty
+instance Prelude.Show NotificationProperty
+instance JSON.ToJSON NotificationProperty
diff --git a/gen/Stratosphere/Budgets/Budget/NotificationWithSubscribersProperty.hs b/gen/Stratosphere/Budgets/Budget/NotificationWithSubscribersProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/NotificationWithSubscribersProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.Budgets.Budget.NotificationWithSubscribersProperty (
+        module Exports, NotificationWithSubscribersProperty(..),
+        mkNotificationWithSubscribersProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.NotificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.Budget.SubscriberProperty as Exports
+import Stratosphere.ResourceProperties
+data NotificationWithSubscribersProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-notificationwithsubscribers.html>
+    NotificationWithSubscribersProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-notificationwithsubscribers.html#cfn-budgets-budget-notificationwithsubscribers-notification>
+                                         notification :: NotificationProperty,
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-notificationwithsubscribers.html#cfn-budgets-budget-notificationwithsubscribers-subscribers>
+                                         subscribers :: [SubscriberProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNotificationWithSubscribersProperty ::
+  NotificationProperty
+  -> [SubscriberProperty] -> NotificationWithSubscribersProperty
+mkNotificationWithSubscribersProperty notification subscribers
+  = NotificationWithSubscribersProperty
+      {haddock_workaround_ = (), notification = notification,
+       subscribers = subscribers}
+instance ToResourceProperties NotificationWithSubscribersProperty where
+  toResourceProperties NotificationWithSubscribersProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.NotificationWithSubscribers",
+         supportsTags = Prelude.False,
+         properties = ["Notification" JSON..= notification,
+                       "Subscribers" JSON..= subscribers]}
+instance JSON.ToJSON NotificationWithSubscribersProperty where
+  toJSON NotificationWithSubscribersProperty {..}
+    = JSON.object
+        ["Notification" JSON..= notification,
+         "Subscribers" JSON..= subscribers]
+instance Property "Notification" NotificationWithSubscribersProperty where
+  type PropertyType "Notification" NotificationWithSubscribersProperty = NotificationProperty
+  set newValue NotificationWithSubscribersProperty {..}
+    = NotificationWithSubscribersProperty {notification = newValue, ..}
+instance Property "Subscribers" NotificationWithSubscribersProperty where
+  type PropertyType "Subscribers" NotificationWithSubscribersProperty = [SubscriberProperty]
+  set newValue NotificationWithSubscribersProperty {..}
+    = NotificationWithSubscribersProperty {subscribers = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/NotificationWithSubscribersProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/NotificationWithSubscribersProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/NotificationWithSubscribersProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.NotificationWithSubscribersProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NotificationWithSubscribersProperty :: Prelude.Type
+instance ToResourceProperties NotificationWithSubscribersProperty
+instance Prelude.Eq NotificationWithSubscribersProperty
+instance Prelude.Show NotificationWithSubscribersProperty
+instance JSON.ToJSON NotificationWithSubscribersProperty
diff --git a/gen/Stratosphere/Budgets/Budget/ResourceTagProperty.hs b/gen/Stratosphere/Budgets/Budget/ResourceTagProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/ResourceTagProperty.hs
@@ -0,0 +1,44 @@
+module Stratosphere.Budgets.Budget.ResourceTagProperty (
+        ResourceTagProperty(..), mkResourceTagProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourceTagProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-resourcetag.html>
+    ResourceTagProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-resourcetag.html#cfn-budgets-budget-resourcetag-key>
+                         key :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-resourcetag.html#cfn-budgets-budget-resourcetag-value>
+                         value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceTagProperty :: Value Prelude.Text -> ResourceTagProperty
+mkResourceTagProperty key
+  = ResourceTagProperty
+      {haddock_workaround_ = (), key = key, value = Prelude.Nothing}
+instance ToResourceProperties ResourceTagProperty where
+  toResourceProperties ResourceTagProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.ResourceTag",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Key" JSON..= key]
+                           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))}
+instance JSON.ToJSON ResourceTagProperty where
+  toJSON ResourceTagProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Key" JSON..= key]
+              (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])))
+instance Property "Key" ResourceTagProperty where
+  type PropertyType "Key" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {key = newValue, ..}
+instance Property "Value" ResourceTagProperty where
+  type PropertyType "Value" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/ResourceTagProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/ResourceTagProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/ResourceTagProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.ResourceTagProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceTagProperty :: Prelude.Type
+instance ToResourceProperties ResourceTagProperty
+instance Prelude.Eq ResourceTagProperty
+instance Prelude.Show ResourceTagProperty
+instance JSON.ToJSON ResourceTagProperty
diff --git a/gen/Stratosphere/Budgets/Budget/SpendProperty.hs b/gen/Stratosphere/Budgets/Budget/SpendProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/SpendProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.Budgets.Budget.SpendProperty (
+        SpendProperty(..), mkSpendProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpendProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-spend.html>
+    SpendProperty {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-spend.html#cfn-budgets-budget-spend-amount>
+                   amount :: (Value Prelude.Double),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-spend.html#cfn-budgets-budget-spend-unit>
+                   unit :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpendProperty ::
+  Value Prelude.Double -> Value Prelude.Text -> SpendProperty
+mkSpendProperty amount unit
+  = SpendProperty
+      {haddock_workaround_ = (), amount = amount, unit = unit}
+instance ToResourceProperties SpendProperty where
+  toResourceProperties SpendProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.Spend",
+         supportsTags = Prelude.False,
+         properties = ["Amount" JSON..= amount, "Unit" JSON..= unit]}
+instance JSON.ToJSON SpendProperty where
+  toJSON SpendProperty {..}
+    = JSON.object ["Amount" JSON..= amount, "Unit" JSON..= unit]
+instance Property "Amount" SpendProperty where
+  type PropertyType "Amount" SpendProperty = Value Prelude.Double
+  set newValue SpendProperty {..}
+    = SpendProperty {amount = newValue, ..}
+instance Property "Unit" SpendProperty where
+  type PropertyType "Unit" SpendProperty = Value Prelude.Text
+  set newValue SpendProperty {..}
+    = SpendProperty {unit = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/SpendProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/SpendProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/SpendProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.SpendProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpendProperty :: Prelude.Type
+instance ToResourceProperties SpendProperty
+instance Prelude.Eq SpendProperty
+instance Prelude.Show SpendProperty
+instance JSON.ToJSON SpendProperty
diff --git a/gen/Stratosphere/Budgets/Budget/SubscriberProperty.hs b/gen/Stratosphere/Budgets/Budget/SubscriberProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/SubscriberProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.Budgets.Budget.SubscriberProperty (
+        SubscriberProperty(..), mkSubscriberProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubscriberProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-subscriber.html>
+    SubscriberProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-subscriber.html#cfn-budgets-budget-subscriber-address>
+                        address :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-subscriber.html#cfn-budgets-budget-subscriber-subscriptiontype>
+                        subscriptionType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubscriberProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> SubscriberProperty
+mkSubscriberProperty address subscriptionType
+  = SubscriberProperty
+      {haddock_workaround_ = (), address = address,
+       subscriptionType = subscriptionType}
+instance ToResourceProperties SubscriberProperty where
+  toResourceProperties SubscriberProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.Subscriber",
+         supportsTags = Prelude.False,
+         properties = ["Address" JSON..= address,
+                       "SubscriptionType" JSON..= subscriptionType]}
+instance JSON.ToJSON SubscriberProperty where
+  toJSON SubscriberProperty {..}
+    = JSON.object
+        ["Address" JSON..= address,
+         "SubscriptionType" JSON..= subscriptionType]
+instance Property "Address" SubscriberProperty where
+  type PropertyType "Address" SubscriberProperty = Value Prelude.Text
+  set newValue SubscriberProperty {..}
+    = SubscriberProperty {address = newValue, ..}
+instance Property "SubscriptionType" SubscriberProperty where
+  type PropertyType "SubscriptionType" SubscriberProperty = Value Prelude.Text
+  set newValue SubscriberProperty {..}
+    = SubscriberProperty {subscriptionType = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/SubscriberProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/SubscriberProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/SubscriberProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.SubscriberProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SubscriberProperty :: Prelude.Type
+instance ToResourceProperties SubscriberProperty
+instance Prelude.Eq SubscriberProperty
+instance Prelude.Show SubscriberProperty
+instance JSON.ToJSON SubscriberProperty
diff --git a/gen/Stratosphere/Budgets/Budget/TagValuesProperty.hs b/gen/Stratosphere/Budgets/Budget/TagValuesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/TagValuesProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.Budgets.Budget.TagValuesProperty (
+        TagValuesProperty(..), mkTagValuesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TagValuesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-tagvalues.html>
+    TagValuesProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-tagvalues.html#cfn-budgets-budget-tagvalues-key>
+                       key :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-tagvalues.html#cfn-budgets-budget-tagvalues-matchoptions>
+                       matchOptions :: (Prelude.Maybe (ValueList Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-tagvalues.html#cfn-budgets-budget-tagvalues-values>
+                       values :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTagValuesProperty :: TagValuesProperty
+mkTagValuesProperty
+  = TagValuesProperty
+      {haddock_workaround_ = (), key = Prelude.Nothing,
+       matchOptions = Prelude.Nothing, values = Prelude.Nothing}
+instance ToResourceProperties TagValuesProperty where
+  toResourceProperties TagValuesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.TagValues",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Key" Prelude.<$> key,
+                            (JSON..=) "MatchOptions" Prelude.<$> matchOptions,
+                            (JSON..=) "Values" Prelude.<$> values])}
+instance JSON.ToJSON TagValuesProperty where
+  toJSON TagValuesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Key" Prelude.<$> key,
+               (JSON..=) "MatchOptions" Prelude.<$> matchOptions,
+               (JSON..=) "Values" Prelude.<$> values]))
+instance Property "Key" TagValuesProperty where
+  type PropertyType "Key" TagValuesProperty = Value Prelude.Text
+  set newValue TagValuesProperty {..}
+    = TagValuesProperty {key = Prelude.pure newValue, ..}
+instance Property "MatchOptions" TagValuesProperty where
+  type PropertyType "MatchOptions" TagValuesProperty = ValueList Prelude.Text
+  set newValue TagValuesProperty {..}
+    = TagValuesProperty {matchOptions = Prelude.pure newValue, ..}
+instance Property "Values" TagValuesProperty where
+  type PropertyType "Values" TagValuesProperty = ValueList Prelude.Text
+  set newValue TagValuesProperty {..}
+    = TagValuesProperty {values = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/TagValuesProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/TagValuesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/TagValuesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.TagValuesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TagValuesProperty :: Prelude.Type
+instance ToResourceProperties TagValuesProperty
+instance Prelude.Eq TagValuesProperty
+instance Prelude.Show TagValuesProperty
+instance JSON.ToJSON TagValuesProperty
diff --git a/gen/Stratosphere/Budgets/Budget/TimePeriodProperty.hs b/gen/Stratosphere/Budgets/Budget/TimePeriodProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/TimePeriodProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.Budgets.Budget.TimePeriodProperty (
+        TimePeriodProperty(..), mkTimePeriodProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TimePeriodProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-timeperiod.html>
+    TimePeriodProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-timeperiod.html#cfn-budgets-budget-timeperiod-end>
+                        end :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budget-timeperiod.html#cfn-budgets-budget-timeperiod-start>
+                        start :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTimePeriodProperty :: TimePeriodProperty
+mkTimePeriodProperty
+  = TimePeriodProperty
+      {haddock_workaround_ = (), end = Prelude.Nothing,
+       start = Prelude.Nothing}
+instance ToResourceProperties TimePeriodProperty where
+  toResourceProperties TimePeriodProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::Budget.TimePeriod",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "End" Prelude.<$> end,
+                            (JSON..=) "Start" Prelude.<$> start])}
+instance JSON.ToJSON TimePeriodProperty where
+  toJSON TimePeriodProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "End" Prelude.<$> end,
+               (JSON..=) "Start" Prelude.<$> start]))
+instance Property "End" TimePeriodProperty where
+  type PropertyType "End" TimePeriodProperty = Value Prelude.Text
+  set newValue TimePeriodProperty {..}
+    = TimePeriodProperty {end = Prelude.pure newValue, ..}
+instance Property "Start" TimePeriodProperty where
+  type PropertyType "Start" TimePeriodProperty = Value Prelude.Text
+  set newValue TimePeriodProperty {..}
+    = TimePeriodProperty {start = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/Budget/TimePeriodProperty.hs-boot b/gen/Stratosphere/Budgets/Budget/TimePeriodProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/Budget/TimePeriodProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.Budget.TimePeriodProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TimePeriodProperty :: Prelude.Type
+instance ToResourceProperties TimePeriodProperty
+instance Prelude.Eq TimePeriodProperty
+instance Prelude.Show TimePeriodProperty
+instance JSON.ToJSON TimePeriodProperty
diff --git a/gen/Stratosphere/Budgets/BudgetsAction.hs b/gen/Stratosphere/Budgets/BudgetsAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction.hs
@@ -0,0 +1,121 @@
+module Stratosphere.Budgets.BudgetsAction (
+        module Exports, BudgetsAction(..), mkBudgetsAction
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Budgets.BudgetsAction.ActionThresholdProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.BudgetsAction.DefinitionProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.BudgetsAction.ResourceTagProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.BudgetsAction.SubscriberProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BudgetsAction
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html>
+    BudgetsAction {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-actionthreshold>
+                   actionThreshold :: ActionThresholdProperty,
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-actiontype>
+                   actionType :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-approvalmodel>
+                   approvalModel :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-budgetname>
+                   budgetName :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-definition>
+                   definition :: DefinitionProperty,
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-executionrolearn>
+                   executionRoleArn :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-notificationtype>
+                   notificationType :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-resourcetags>
+                   resourceTags :: (Prelude.Maybe [ResourceTagProperty]),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-budgets-budgetsaction.html#cfn-budgets-budgetsaction-subscribers>
+                   subscribers :: [SubscriberProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBudgetsAction ::
+  ActionThresholdProperty
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> DefinitionProperty
+           -> Value Prelude.Text
+              -> Value Prelude.Text -> [SubscriberProperty] -> BudgetsAction
+mkBudgetsAction
+  actionThreshold
+  actionType
+  budgetName
+  definition
+  executionRoleArn
+  notificationType
+  subscribers
+  = BudgetsAction
+      {haddock_workaround_ = (), actionThreshold = actionThreshold,
+       actionType = actionType, budgetName = budgetName,
+       definition = definition, executionRoleArn = executionRoleArn,
+       notificationType = notificationType, subscribers = subscribers,
+       approvalModel = Prelude.Nothing, resourceTags = Prelude.Nothing}
+instance ToResourceProperties BudgetsAction where
+  toResourceProperties BudgetsAction {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::BudgetsAction",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ActionThreshold" JSON..= actionThreshold,
+                            "ActionType" JSON..= actionType, "BudgetName" JSON..= budgetName,
+                            "Definition" JSON..= definition,
+                            "ExecutionRoleArn" JSON..= executionRoleArn,
+                            "NotificationType" JSON..= notificationType,
+                            "Subscribers" JSON..= subscribers]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ApprovalModel" Prelude.<$> approvalModel,
+                               (JSON..=) "ResourceTags" Prelude.<$> resourceTags]))}
+instance JSON.ToJSON BudgetsAction where
+  toJSON BudgetsAction {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ActionThreshold" JSON..= actionThreshold,
+               "ActionType" JSON..= actionType, "BudgetName" JSON..= budgetName,
+               "Definition" JSON..= definition,
+               "ExecutionRoleArn" JSON..= executionRoleArn,
+               "NotificationType" JSON..= notificationType,
+               "Subscribers" JSON..= subscribers]
+              (Prelude.catMaybes
+                 [(JSON..=) "ApprovalModel" Prelude.<$> approvalModel,
+                  (JSON..=) "ResourceTags" Prelude.<$> resourceTags])))
+instance Property "ActionThreshold" BudgetsAction where
+  type PropertyType "ActionThreshold" BudgetsAction = ActionThresholdProperty
+  set newValue BudgetsAction {..}
+    = BudgetsAction {actionThreshold = newValue, ..}
+instance Property "ActionType" BudgetsAction where
+  type PropertyType "ActionType" BudgetsAction = Value Prelude.Text
+  set newValue BudgetsAction {..}
+    = BudgetsAction {actionType = newValue, ..}
+instance Property "ApprovalModel" BudgetsAction where
+  type PropertyType "ApprovalModel" BudgetsAction = Value Prelude.Text
+  set newValue BudgetsAction {..}
+    = BudgetsAction {approvalModel = Prelude.pure newValue, ..}
+instance Property "BudgetName" BudgetsAction where
+  type PropertyType "BudgetName" BudgetsAction = Value Prelude.Text
+  set newValue BudgetsAction {..}
+    = BudgetsAction {budgetName = newValue, ..}
+instance Property "Definition" BudgetsAction where
+  type PropertyType "Definition" BudgetsAction = DefinitionProperty
+  set newValue BudgetsAction {..}
+    = BudgetsAction {definition = newValue, ..}
+instance Property "ExecutionRoleArn" BudgetsAction where
+  type PropertyType "ExecutionRoleArn" BudgetsAction = Value Prelude.Text
+  set newValue BudgetsAction {..}
+    = BudgetsAction {executionRoleArn = newValue, ..}
+instance Property "NotificationType" BudgetsAction where
+  type PropertyType "NotificationType" BudgetsAction = Value Prelude.Text
+  set newValue BudgetsAction {..}
+    = BudgetsAction {notificationType = newValue, ..}
+instance Property "ResourceTags" BudgetsAction where
+  type PropertyType "ResourceTags" BudgetsAction = [ResourceTagProperty]
+  set newValue BudgetsAction {..}
+    = BudgetsAction {resourceTags = Prelude.pure newValue, ..}
+instance Property "Subscribers" BudgetsAction where
+  type PropertyType "Subscribers" BudgetsAction = [SubscriberProperty]
+  set newValue BudgetsAction {..}
+    = BudgetsAction {subscribers = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/ActionThresholdProperty.hs b/gen/Stratosphere/Budgets/BudgetsAction/ActionThresholdProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/ActionThresholdProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.Budgets.BudgetsAction.ActionThresholdProperty (
+        ActionThresholdProperty(..), mkActionThresholdProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ActionThresholdProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-actionthreshold.html>
+    ActionThresholdProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-actionthreshold.html#cfn-budgets-budgetsaction-actionthreshold-type>
+                             type' :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-actionthreshold.html#cfn-budgets-budgetsaction-actionthreshold-value>
+                             value :: (Value Prelude.Double)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkActionThresholdProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Double -> ActionThresholdProperty
+mkActionThresholdProperty type' value
+  = ActionThresholdProperty
+      {haddock_workaround_ = (), type' = type', value = value}
+instance ToResourceProperties ActionThresholdProperty where
+  toResourceProperties ActionThresholdProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::BudgetsAction.ActionThreshold",
+         supportsTags = Prelude.False,
+         properties = ["Type" JSON..= type', "Value" JSON..= value]}
+instance JSON.ToJSON ActionThresholdProperty where
+  toJSON ActionThresholdProperty {..}
+    = JSON.object ["Type" JSON..= type', "Value" JSON..= value]
+instance Property "Type" ActionThresholdProperty where
+  type PropertyType "Type" ActionThresholdProperty = Value Prelude.Text
+  set newValue ActionThresholdProperty {..}
+    = ActionThresholdProperty {type' = newValue, ..}
+instance Property "Value" ActionThresholdProperty where
+  type PropertyType "Value" ActionThresholdProperty = Value Prelude.Double
+  set newValue ActionThresholdProperty {..}
+    = ActionThresholdProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/ActionThresholdProperty.hs-boot b/gen/Stratosphere/Budgets/BudgetsAction/ActionThresholdProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/ActionThresholdProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.BudgetsAction.ActionThresholdProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ActionThresholdProperty :: Prelude.Type
+instance ToResourceProperties ActionThresholdProperty
+instance Prelude.Eq ActionThresholdProperty
+instance Prelude.Show ActionThresholdProperty
+instance JSON.ToJSON ActionThresholdProperty
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/DefinitionProperty.hs b/gen/Stratosphere/Budgets/BudgetsAction/DefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/DefinitionProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.Budgets.BudgetsAction.DefinitionProperty (
+        module Exports, DefinitionProperty(..), mkDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.Budgets.BudgetsAction.IamActionDefinitionProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.BudgetsAction.ScpActionDefinitionProperty as Exports
+import {-# SOURCE #-} Stratosphere.Budgets.BudgetsAction.SsmActionDefinitionProperty as Exports
+import Stratosphere.ResourceProperties
+data DefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-definition.html>
+    DefinitionProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-definition.html#cfn-budgets-budgetsaction-definition-iamactiondefinition>
+                        iamActionDefinition :: (Prelude.Maybe IamActionDefinitionProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-definition.html#cfn-budgets-budgetsaction-definition-scpactiondefinition>
+                        scpActionDefinition :: (Prelude.Maybe ScpActionDefinitionProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-definition.html#cfn-budgets-budgetsaction-definition-ssmactiondefinition>
+                        ssmActionDefinition :: (Prelude.Maybe SsmActionDefinitionProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDefinitionProperty :: DefinitionProperty
+mkDefinitionProperty
+  = DefinitionProperty
+      {haddock_workaround_ = (), iamActionDefinition = Prelude.Nothing,
+       scpActionDefinition = Prelude.Nothing,
+       ssmActionDefinition = Prelude.Nothing}
+instance ToResourceProperties DefinitionProperty where
+  toResourceProperties DefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::BudgetsAction.Definition",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "IamActionDefinition" Prelude.<$> iamActionDefinition,
+                            (JSON..=) "ScpActionDefinition" Prelude.<$> scpActionDefinition,
+                            (JSON..=) "SsmActionDefinition" Prelude.<$> ssmActionDefinition])}
+instance JSON.ToJSON DefinitionProperty where
+  toJSON DefinitionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "IamActionDefinition" Prelude.<$> iamActionDefinition,
+               (JSON..=) "ScpActionDefinition" Prelude.<$> scpActionDefinition,
+               (JSON..=) "SsmActionDefinition" Prelude.<$> ssmActionDefinition]))
+instance Property "IamActionDefinition" DefinitionProperty where
+  type PropertyType "IamActionDefinition" DefinitionProperty = IamActionDefinitionProperty
+  set newValue DefinitionProperty {..}
+    = DefinitionProperty
+        {iamActionDefinition = Prelude.pure newValue, ..}
+instance Property "ScpActionDefinition" DefinitionProperty where
+  type PropertyType "ScpActionDefinition" DefinitionProperty = ScpActionDefinitionProperty
+  set newValue DefinitionProperty {..}
+    = DefinitionProperty
+        {scpActionDefinition = Prelude.pure newValue, ..}
+instance Property "SsmActionDefinition" DefinitionProperty where
+  type PropertyType "SsmActionDefinition" DefinitionProperty = SsmActionDefinitionProperty
+  set newValue DefinitionProperty {..}
+    = DefinitionProperty
+        {ssmActionDefinition = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/DefinitionProperty.hs-boot b/gen/Stratosphere/Budgets/BudgetsAction/DefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/DefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.BudgetsAction.DefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DefinitionProperty :: Prelude.Type
+instance ToResourceProperties DefinitionProperty
+instance Prelude.Eq DefinitionProperty
+instance Prelude.Show DefinitionProperty
+instance JSON.ToJSON DefinitionProperty
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/IamActionDefinitionProperty.hs b/gen/Stratosphere/Budgets/BudgetsAction/IamActionDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/IamActionDefinitionProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.Budgets.BudgetsAction.IamActionDefinitionProperty (
+        IamActionDefinitionProperty(..), mkIamActionDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IamActionDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-iamactiondefinition.html>
+    IamActionDefinitionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-iamactiondefinition.html#cfn-budgets-budgetsaction-iamactiondefinition-groups>
+                                 groups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-iamactiondefinition.html#cfn-budgets-budgetsaction-iamactiondefinition-policyarn>
+                                 policyArn :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-iamactiondefinition.html#cfn-budgets-budgetsaction-iamactiondefinition-roles>
+                                 roles :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-iamactiondefinition.html#cfn-budgets-budgetsaction-iamactiondefinition-users>
+                                 users :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIamActionDefinitionProperty ::
+  Value Prelude.Text -> IamActionDefinitionProperty
+mkIamActionDefinitionProperty policyArn
+  = IamActionDefinitionProperty
+      {haddock_workaround_ = (), policyArn = policyArn,
+       groups = Prelude.Nothing, roles = Prelude.Nothing,
+       users = Prelude.Nothing}
+instance ToResourceProperties IamActionDefinitionProperty where
+  toResourceProperties IamActionDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::BudgetsAction.IamActionDefinition",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["PolicyArn" JSON..= policyArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Groups" Prelude.<$> groups,
+                               (JSON..=) "Roles" Prelude.<$> roles,
+                               (JSON..=) "Users" Prelude.<$> users]))}
+instance JSON.ToJSON IamActionDefinitionProperty where
+  toJSON IamActionDefinitionProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["PolicyArn" JSON..= policyArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "Groups" Prelude.<$> groups,
+                  (JSON..=) "Roles" Prelude.<$> roles,
+                  (JSON..=) "Users" Prelude.<$> users])))
+instance Property "Groups" IamActionDefinitionProperty where
+  type PropertyType "Groups" IamActionDefinitionProperty = ValueList Prelude.Text
+  set newValue IamActionDefinitionProperty {..}
+    = IamActionDefinitionProperty {groups = Prelude.pure newValue, ..}
+instance Property "PolicyArn" IamActionDefinitionProperty where
+  type PropertyType "PolicyArn" IamActionDefinitionProperty = Value Prelude.Text
+  set newValue IamActionDefinitionProperty {..}
+    = IamActionDefinitionProperty {policyArn = newValue, ..}
+instance Property "Roles" IamActionDefinitionProperty where
+  type PropertyType "Roles" IamActionDefinitionProperty = ValueList Prelude.Text
+  set newValue IamActionDefinitionProperty {..}
+    = IamActionDefinitionProperty {roles = Prelude.pure newValue, ..}
+instance Property "Users" IamActionDefinitionProperty where
+  type PropertyType "Users" IamActionDefinitionProperty = ValueList Prelude.Text
+  set newValue IamActionDefinitionProperty {..}
+    = IamActionDefinitionProperty {users = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/IamActionDefinitionProperty.hs-boot b/gen/Stratosphere/Budgets/BudgetsAction/IamActionDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/IamActionDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.BudgetsAction.IamActionDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IamActionDefinitionProperty :: Prelude.Type
+instance ToResourceProperties IamActionDefinitionProperty
+instance Prelude.Eq IamActionDefinitionProperty
+instance Prelude.Show IamActionDefinitionProperty
+instance JSON.ToJSON IamActionDefinitionProperty
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/ResourceTagProperty.hs b/gen/Stratosphere/Budgets/BudgetsAction/ResourceTagProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/ResourceTagProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.Budgets.BudgetsAction.ResourceTagProperty (
+        ResourceTagProperty(..), mkResourceTagProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourceTagProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-resourcetag.html>
+    ResourceTagProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-resourcetag.html#cfn-budgets-budgetsaction-resourcetag-key>
+                         key :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-resourcetag.html#cfn-budgets-budgetsaction-resourcetag-value>
+                         value :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceTagProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> ResourceTagProperty
+mkResourceTagProperty key value
+  = ResourceTagProperty
+      {haddock_workaround_ = (), key = key, value = value}
+instance ToResourceProperties ResourceTagProperty where
+  toResourceProperties ResourceTagProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::BudgetsAction.ResourceTag",
+         supportsTags = Prelude.False,
+         properties = ["Key" JSON..= key, "Value" JSON..= value]}
+instance JSON.ToJSON ResourceTagProperty where
+  toJSON ResourceTagProperty {..}
+    = JSON.object ["Key" JSON..= key, "Value" JSON..= value]
+instance Property "Key" ResourceTagProperty where
+  type PropertyType "Key" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {key = newValue, ..}
+instance Property "Value" ResourceTagProperty where
+  type PropertyType "Value" ResourceTagProperty = Value Prelude.Text
+  set newValue ResourceTagProperty {..}
+    = ResourceTagProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/ResourceTagProperty.hs-boot b/gen/Stratosphere/Budgets/BudgetsAction/ResourceTagProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/ResourceTagProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.BudgetsAction.ResourceTagProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceTagProperty :: Prelude.Type
+instance ToResourceProperties ResourceTagProperty
+instance Prelude.Eq ResourceTagProperty
+instance Prelude.Show ResourceTagProperty
+instance JSON.ToJSON ResourceTagProperty
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/ScpActionDefinitionProperty.hs b/gen/Stratosphere/Budgets/BudgetsAction/ScpActionDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/ScpActionDefinitionProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.Budgets.BudgetsAction.ScpActionDefinitionProperty (
+        ScpActionDefinitionProperty(..), mkScpActionDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ScpActionDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-scpactiondefinition.html>
+    ScpActionDefinitionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-scpactiondefinition.html#cfn-budgets-budgetsaction-scpactiondefinition-policyid>
+                                 policyId :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-scpactiondefinition.html#cfn-budgets-budgetsaction-scpactiondefinition-targetids>
+                                 targetIds :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkScpActionDefinitionProperty ::
+  Value Prelude.Text
+  -> ValueList Prelude.Text -> ScpActionDefinitionProperty
+mkScpActionDefinitionProperty policyId targetIds
+  = ScpActionDefinitionProperty
+      {haddock_workaround_ = (), policyId = policyId,
+       targetIds = targetIds}
+instance ToResourceProperties ScpActionDefinitionProperty where
+  toResourceProperties ScpActionDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::BudgetsAction.ScpActionDefinition",
+         supportsTags = Prelude.False,
+         properties = ["PolicyId" JSON..= policyId,
+                       "TargetIds" JSON..= targetIds]}
+instance JSON.ToJSON ScpActionDefinitionProperty where
+  toJSON ScpActionDefinitionProperty {..}
+    = JSON.object
+        ["PolicyId" JSON..= policyId, "TargetIds" JSON..= targetIds]
+instance Property "PolicyId" ScpActionDefinitionProperty where
+  type PropertyType "PolicyId" ScpActionDefinitionProperty = Value Prelude.Text
+  set newValue ScpActionDefinitionProperty {..}
+    = ScpActionDefinitionProperty {policyId = newValue, ..}
+instance Property "TargetIds" ScpActionDefinitionProperty where
+  type PropertyType "TargetIds" ScpActionDefinitionProperty = ValueList Prelude.Text
+  set newValue ScpActionDefinitionProperty {..}
+    = ScpActionDefinitionProperty {targetIds = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/ScpActionDefinitionProperty.hs-boot b/gen/Stratosphere/Budgets/BudgetsAction/ScpActionDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/ScpActionDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.BudgetsAction.ScpActionDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ScpActionDefinitionProperty :: Prelude.Type
+instance ToResourceProperties ScpActionDefinitionProperty
+instance Prelude.Eq ScpActionDefinitionProperty
+instance Prelude.Show ScpActionDefinitionProperty
+instance JSON.ToJSON ScpActionDefinitionProperty
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/SsmActionDefinitionProperty.hs b/gen/Stratosphere/Budgets/BudgetsAction/SsmActionDefinitionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/SsmActionDefinitionProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.Budgets.BudgetsAction.SsmActionDefinitionProperty (
+        SsmActionDefinitionProperty(..), mkSsmActionDefinitionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SsmActionDefinitionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-ssmactiondefinition.html>
+    SsmActionDefinitionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-ssmactiondefinition.html#cfn-budgets-budgetsaction-ssmactiondefinition-instanceids>
+                                 instanceIds :: (ValueList Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-ssmactiondefinition.html#cfn-budgets-budgetsaction-ssmactiondefinition-region>
+                                 region :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-ssmactiondefinition.html#cfn-budgets-budgetsaction-ssmactiondefinition-subtype>
+                                 subtype :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSsmActionDefinitionProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> SsmActionDefinitionProperty
+mkSsmActionDefinitionProperty instanceIds region subtype
+  = SsmActionDefinitionProperty
+      {haddock_workaround_ = (), instanceIds = instanceIds,
+       region = region, subtype = subtype}
+instance ToResourceProperties SsmActionDefinitionProperty where
+  toResourceProperties SsmActionDefinitionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::BudgetsAction.SsmActionDefinition",
+         supportsTags = Prelude.False,
+         properties = ["InstanceIds" JSON..= instanceIds,
+                       "Region" JSON..= region, "Subtype" JSON..= subtype]}
+instance JSON.ToJSON SsmActionDefinitionProperty where
+  toJSON SsmActionDefinitionProperty {..}
+    = JSON.object
+        ["InstanceIds" JSON..= instanceIds, "Region" JSON..= region,
+         "Subtype" JSON..= subtype]
+instance Property "InstanceIds" SsmActionDefinitionProperty where
+  type PropertyType "InstanceIds" SsmActionDefinitionProperty = ValueList Prelude.Text
+  set newValue SsmActionDefinitionProperty {..}
+    = SsmActionDefinitionProperty {instanceIds = newValue, ..}
+instance Property "Region" SsmActionDefinitionProperty where
+  type PropertyType "Region" SsmActionDefinitionProperty = Value Prelude.Text
+  set newValue SsmActionDefinitionProperty {..}
+    = SsmActionDefinitionProperty {region = newValue, ..}
+instance Property "Subtype" SsmActionDefinitionProperty where
+  type PropertyType "Subtype" SsmActionDefinitionProperty = Value Prelude.Text
+  set newValue SsmActionDefinitionProperty {..}
+    = SsmActionDefinitionProperty {subtype = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/SsmActionDefinitionProperty.hs-boot b/gen/Stratosphere/Budgets/BudgetsAction/SsmActionDefinitionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/SsmActionDefinitionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.BudgetsAction.SsmActionDefinitionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SsmActionDefinitionProperty :: Prelude.Type
+instance ToResourceProperties SsmActionDefinitionProperty
+instance Prelude.Eq SsmActionDefinitionProperty
+instance Prelude.Show SsmActionDefinitionProperty
+instance JSON.ToJSON SsmActionDefinitionProperty
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/SubscriberProperty.hs b/gen/Stratosphere/Budgets/BudgetsAction/SubscriberProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/SubscriberProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.Budgets.BudgetsAction.SubscriberProperty (
+        SubscriberProperty(..), mkSubscriberProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubscriberProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-subscriber.html>
+    SubscriberProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-subscriber.html#cfn-budgets-budgetsaction-subscriber-address>
+                        address :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-budgets-budgetsaction-subscriber.html#cfn-budgets-budgetsaction-subscriber-type>
+                        type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubscriberProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> SubscriberProperty
+mkSubscriberProperty address type'
+  = SubscriberProperty
+      {haddock_workaround_ = (), address = address, type' = type'}
+instance ToResourceProperties SubscriberProperty where
+  toResourceProperties SubscriberProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::Budgets::BudgetsAction.Subscriber",
+         supportsTags = Prelude.False,
+         properties = ["Address" JSON..= address, "Type" JSON..= type']}
+instance JSON.ToJSON SubscriberProperty where
+  toJSON SubscriberProperty {..}
+    = JSON.object ["Address" JSON..= address, "Type" JSON..= type']
+instance Property "Address" SubscriberProperty where
+  type PropertyType "Address" SubscriberProperty = Value Prelude.Text
+  set newValue SubscriberProperty {..}
+    = SubscriberProperty {address = newValue, ..}
+instance Property "Type" SubscriberProperty where
+  type PropertyType "Type" SubscriberProperty = Value Prelude.Text
+  set newValue SubscriberProperty {..}
+    = SubscriberProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/Budgets/BudgetsAction/SubscriberProperty.hs-boot b/gen/Stratosphere/Budgets/BudgetsAction/SubscriberProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/Budgets/BudgetsAction/SubscriberProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.Budgets.BudgetsAction.SubscriberProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SubscriberProperty :: Prelude.Type
+instance ToResourceProperties SubscriberProperty
+instance Prelude.Eq SubscriberProperty
+instance Prelude.Show SubscriberProperty
+instance JSON.ToJSON SubscriberProperty
diff --git a/stratosphere-budgets.cabal b/stratosphere-budgets.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-budgets.cabal
@@ -0,0 +1,95 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-budgets
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS Budgets.
+description:    Integration into stratosphere to generate resources and properties for AWS Budgets
+category:       AWS, Cloud, Budgets
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.Budgets.Budget
+      Stratosphere.Budgets.Budget.AutoAdjustDataProperty
+      Stratosphere.Budgets.Budget.BudgetDataProperty
+      Stratosphere.Budgets.Budget.CostCategoryValuesProperty
+      Stratosphere.Budgets.Budget.CostTypesProperty
+      Stratosphere.Budgets.Budget.ExpressionDimensionValuesProperty
+      Stratosphere.Budgets.Budget.ExpressionProperty
+      Stratosphere.Budgets.Budget.HistoricalOptionsProperty
+      Stratosphere.Budgets.Budget.NotificationProperty
+      Stratosphere.Budgets.Budget.NotificationWithSubscribersProperty
+      Stratosphere.Budgets.Budget.ResourceTagProperty
+      Stratosphere.Budgets.Budget.SpendProperty
+      Stratosphere.Budgets.Budget.SubscriberProperty
+      Stratosphere.Budgets.Budget.TagValuesProperty
+      Stratosphere.Budgets.Budget.TimePeriodProperty
+      Stratosphere.Budgets.BudgetsAction
+      Stratosphere.Budgets.BudgetsAction.ActionThresholdProperty
+      Stratosphere.Budgets.BudgetsAction.DefinitionProperty
+      Stratosphere.Budgets.BudgetsAction.IamActionDefinitionProperty
+      Stratosphere.Budgets.BudgetsAction.ResourceTagProperty
+      Stratosphere.Budgets.BudgetsAction.ScpActionDefinitionProperty
+      Stratosphere.Budgets.BudgetsAction.SsmActionDefinitionProperty
+      Stratosphere.Budgets.BudgetsAction.SubscriberProperty
+  other-modules:
+      Paths_stratosphere_budgets
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
