diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,86 @@
 
 ---
 
+## [0.18.0] - 2026-09-29
+
+Module-naming systematization release: every kernel and package module moves onto a uniform
+`hydra.core.*` / `hydra.<pkg>.*` grammar, completing the package ⊃ module ⊃ definition containment
+tower. The rename touches every module, definition, and cross-host reference in the codebase; this
+release exists primarily to ship it as its own coordinated batch. Also lands the translingual regex
+primitive pipeline and several silent-correctness fixes in the coder layer.
+
+### Highlights
+
+- **Module-name grammar systematization** ([#729](https://github.com/CategoricalData/hydra/issues/729)):
+  every `hydra.*` module renamed onto a uniform package-derived prefix — kernel modules move to
+  `hydra.core.*`, package modules to `hydra.<pkg>.*` — closing the long-standing inconsistency where
+  a package name had no structural relationship to the module names it contained. The rename spans
+  every host (Haskell, Java, Python, Scala, TypeScript, all four Lisp dialects) and required fixing
+  stale namespace references, overlay-directory paths, and `hostOverrides` shims across every driver
+  and bootstrap script that had hardcoded the old grammar. Further consolidation (a structurally
+  enforced package↔prefix law) is tracked for 0.18.1. The kernel package itself is still published as
+  `hydra-kernel` (its modules are under `hydra.core.*`); the `hydra-core` package rename #729 called for
+  is under review because that name is taken on PyPI and npm
+  ([#770](https://github.com/CategoricalData/hydra/issues/770)).
+- **Translingual regex primitives** ([#603](https://github.com/CategoricalData/hydra/issues/603)):
+  `hydra.lib.regex` primitives (`find`, `findAll`, `matches`, `replace`, `replaceAll`, `split`) now run
+  every pattern through the shared `hydra.regex` parse/print pipeline instead of handing raw pattern
+  strings to each host's native engine, so a pattern means the same thing on every host. Includes a
+  host-independent conformance suite and a leftmost-longest alternation fix in the PCRE/POSIX printers.
+- **Silent-corruption fixes across the coder layer**
+  ([#744](https://github.com/CategoricalData/hydra/issues/744),
+  [#765](https://github.com/CategoricalData/hydra/issues/765),
+  [#649](https://github.com/CategoricalData/hydra/issues/649)): fixed data-corrupting bugs in the
+  JSON-Schema/Avro/GraphQL/GraphSON/Protobuf coders (extended integer widths, map-key handling), the
+  kernel's encode/decode generators (reversed type-parameter order on 2+-param polymorphic types), and
+  the Python coder (silently dropping a module's types when types and terms share a file path).
+- **Self-hosted specification docs** ([#723](https://github.com/CategoricalData/hydra/issues/723)):
+  the module-reference pages under `docs/specification/` are now generated directly from the kernel
+  (`bin/regenerate-spec.sh`) via a new metadata-only doc coder, rather than hand-maintained.
+
+### New features
+
+- **[#603](https://github.com/CategoricalData/hydra/issues/603)** host-independent regex conformance
+  suite covering the minimal-core grammar (literals, classes, quantifiers, alternation, anchors,
+  grouping) across all 9 hosts.
+- **[#723](https://github.com/CategoricalData/hydra/issues/723)** `hydra.markdown` type module and
+  `generateModuleDoc`, the metadata-only doc coder backing the self-generated spec pages.
+- **[#382](https://github.com/CategoricalData/hydra/issues/382)** the Rust coder is split out of
+  `hydra-ext` into its own first-class `hydra-rust` package.
+
+### Bug fixes
+
+- **[#744](https://github.com/CategoricalData/hydra/issues/744)** silent data corruption in
+  JSON-Schema/Avro/GraphQL/GraphSON/Protobuf coders for extended integer widths and map-key handling.
+- **[#765](https://github.com/CategoricalData/hydra/issues/765)** kernel encode/decode generators
+  emitted reversed type-parameter order for 2+-param polymorphic types.
+- **[#649](https://github.com/CategoricalData/hydra/issues/649)** Python coder silently dropped a
+  module's types when types and terms targeted the same output file path.
+- **[#572](https://github.com/CategoricalData/hydra/issues/572)** TypeScript kernel-JSON test
+  bridge's compact-form decode heuristic mishandled nullary union arms.
+- **[#761](https://github.com/CategoricalData/hydra/issues/761)** cold-seed generation ignored
+  `hostOverrides.java=local`, silently pulling the published Java host jar instead.
+- **[#736](https://github.com/CategoricalData/hydra/issues/736)** Java build now pins JDK 11 via a
+  Gradle toolchain block, instead of depending on ambient `JAVA_HOME`.
+
+### Improvements
+
+- **[#327](https://github.com/CategoricalData/hydra/issues/327)** new `hydra.diff` schema-diff type
+  module; `Term.Inject` comparison is now by variant name.
+- **[#573](https://github.com/CategoricalData/hydra/issues/573)** per-registry publish sets (Hackage,
+  Maven, PyPI, npm) are now derived from the package registry itself instead of 13 hand-maintained
+  lists — closes a recurring class of silent release-time drift.
+- **[#735](https://github.com/CategoricalData/hydra/issues/735)** cross-host decimal-scale test
+  filtering now driven by a translingual `scaleDistinct` capability tag instead of hand-copied
+  per-host skip lists.
+
+### Documentation
+
+- **[#655](https://github.com/CategoricalData/hydra/issues/655)** documented the overlay-emission
+  "implementation wins" decision for bare primitive references (`docs/overlays.md`).
+
+---
+
 ## [0.17.7] - 2026-09-14
 
 Correctness-hardening point release on the 0.17.x line, consolidating the 0.17.6 breaking batch. It
diff --git a/hydra-typescript.cabal b/hydra-typescript.cabal
--- a/hydra-typescript.cabal
+++ b/hydra-typescript.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hydra-typescript
-version:        0.17.7
+version:        0.18.0
 synopsis:       Hydra's TypeScript coder: emit TypeScript source from Hydra modules
 description:    Hydra is an implementation of the LambdaGraph data model, which takes advantage of an isomorphism between labeled hypergraphs and typed lambda calculus: in Hydra, "graphs are programs, and programs are graphs". TypeScript support for Hydra
 category:       Data
@@ -27,13 +27,13 @@
 
 library
   exposed-modules:
-      Hydra.Dsl.TypeScript.Syntax
-      Hydra.Overlay.Haskell.Dsl.TypeScript.Helpers
-      Hydra.TypeScript.Coder
-      Hydra.TypeScript.Language
-      Hydra.TypeScript.Operators
-      Hydra.TypeScript.Serde
-      Hydra.TypeScript.Syntax
+      Hydra.Typescript.Coder
+      Hydra.Typescript.Dsl.Syntax
+      Hydra.Typescript.Language
+      Hydra.Typescript.Operators
+      Hydra.Typescript.Overlay.Haskell.Dsl.TypeScript.Helpers
+      Hydra.Typescript.Serde
+      Hydra.Typescript.Syntax
   other-modules:
       Paths_hydra_typescript
   hs-source-dirs:
@@ -41,6 +41,6 @@
   build-depends:
       base >=4.19.0 && <4.22
     , containers >=0.6.7 && <0.8
-    , hydra-kernel ==0.17.7
+    , hydra-kernel ==0.18.0
     , scientific >=0.3.7 && <0.4
   default-language: Haskell2010
diff --git a/src/main/haskell/Hydra/Dsl/TypeScript/Syntax.hs b/src/main/haskell/Hydra/Dsl/TypeScript/Syntax.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Dsl/TypeScript/Syntax.hs
+++ /dev/null
@@ -1,7269 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | DSL functions for hydra.typeScript.syntax
-
-module Hydra.Dsl.TypeScript.Syntax where
-
-import qualified Hydra.Core as Core
-import qualified Hydra.TypeScript.Syntax as Syntax
-import qualified Hydra.Typed as Typed
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
-import qualified Data.Scientific as Sci
-import Data.Void
-import qualified Data.Int as I
-
--- | DSL name token for hydra.typeScript.syntax.ArrayElement
-arrayElementArrayElement :: Typed.TypedName Syntax.ArrayElement
-arrayElementArrayElement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ArrayElement")
-
--- | DSL injection for the expression variant of hydra.typeScript.syntax.ArrayElement
-arrayElementExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ArrayElement
-arrayElementExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrayElement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the hole variant of hydra.typeScript.syntax.ArrayElement
-arrayElementHole :: Typed.TypedTerm Syntax.ArrayElement
-arrayElementHole =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrayElement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "hole"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the spread variant of hydra.typeScript.syntax.ArrayElement
-arrayElementSpread :: Typed.TypedTerm Syntax.SpreadElement -> Typed.TypedTerm Syntax.ArrayElement
-arrayElementSpread x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrayElement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "spread"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for the hydra.typeScript.syntax.ArrayTypeExpression wrapper
-arrayTypeExpression :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.ArrayTypeExpression
-arrayTypeExpression x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.typeScript.syntax.ArrayTypeExpression"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ArrayTypeExpression
-arrayTypeExpressionArrayTypeExpression :: Typed.TypedName Syntax.ArrayTypeExpression
-arrayTypeExpressionArrayTypeExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ArrayTypeExpression")
-
--- | DSL name token for hydra.typeScript.syntax.ArrowFunctionBody
-arrowFunctionBodyArrowFunctionBody :: Typed.TypedName Syntax.ArrowFunctionBody
-arrowFunctionBodyArrowFunctionBody = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ArrowFunctionBody")
-
--- | DSL injection for the block variant of hydra.typeScript.syntax.ArrowFunctionBody
-arrowFunctionBodyBlock :: Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.ArrowFunctionBody
-arrowFunctionBodyBlock x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionBody"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "block"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the expression variant of hydra.typeScript.syntax.ArrowFunctionBody
-arrowFunctionBodyExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ArrowFunctionBody
-arrowFunctionBodyExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionBody"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.ArrowFunctionExpression
-arrowFunctionExpression :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.ArrowFunctionBody -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ArrowFunctionExpression
-arrowFunctionExpression params body async =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Typed.unTypedTerm params)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Typed.unTypedTerm async)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.ArrowFunctionExpression
-arrowFunctionExpressionArrowFunctionExpression :: Typed.TypedName Syntax.ArrowFunctionExpression
-arrowFunctionExpressionArrowFunctionExpression =
-    Typed.TypedName (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression")
-
--- | DSL accessor for the async field of hydra.typeScript.syntax.ArrowFunctionExpression
-arrowFunctionExpressionAsync :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Bool
-arrowFunctionExpressionAsync x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-        Core.projectionFieldName = (Core.Name "async")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.ArrowFunctionExpression
-arrowFunctionExpressionBody :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Syntax.ArrowFunctionBody
-arrowFunctionExpressionBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the params field of hydra.typeScript.syntax.ArrowFunctionExpression
-arrowFunctionExpressionParams :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm [Syntax.Pattern]
-arrowFunctionExpressionParams x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-        Core.projectionFieldName = (Core.Name "params")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the async field of hydra.typeScript.syntax.ArrowFunctionExpression
-arrowFunctionExpressionWithAsync :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ArrowFunctionExpression
-arrowFunctionExpressionWithAsync original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.ArrowFunctionExpression
-arrowFunctionExpressionWithBody :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Syntax.ArrowFunctionBody -> Typed.TypedTerm Syntax.ArrowFunctionExpression
-arrowFunctionExpressionWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the params field of hydra.typeScript.syntax.ArrowFunctionExpression
-arrowFunctionExpressionWithParams :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.ArrowFunctionExpression
-arrowFunctionExpressionWithParams original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.AsExpression
-asExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.AsExpression
-asExpression expression type_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AsExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm expression)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.AsExpression
-asExpressionAsExpression :: Typed.TypedName Syntax.AsExpression
-asExpressionAsExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.AsExpression")
-
--- | DSL accessor for the expression field of hydra.typeScript.syntax.AsExpression
-asExpressionExpression :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.Expression
-asExpressionExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AsExpression"),
-        Core.projectionFieldName = (Core.Name "expression")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.typeScript.syntax.AsExpression
-asExpressionType :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.TypeExpression
-asExpressionType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AsExpression"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the expression field of hydra.typeScript.syntax.AsExpression
-asExpressionWithExpression :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AsExpression
-asExpressionWithExpression original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AsExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AsExpression"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.typeScript.syntax.AsExpression
-asExpressionWithType :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.AsExpression
-asExpressionWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AsExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "expression"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AsExpression"),
-              Core.projectionFieldName = (Core.Name "expression")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.AssignmentExpression
-assignmentExpression :: Typed.TypedTerm Syntax.AssignmentOperator -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentExpression
-assignmentExpression operator left right =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm operator)},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm left)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm right)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.AssignmentExpression
-assignmentExpressionAssignmentExpression :: Typed.TypedName Syntax.AssignmentExpression
-assignmentExpressionAssignmentExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.AssignmentExpression")
-
--- | DSL accessor for the left field of hydra.typeScript.syntax.AssignmentExpression
-assignmentExpressionLeft :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Pattern
-assignmentExpressionLeft x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-        Core.projectionFieldName = (Core.Name "left")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the operator field of hydra.typeScript.syntax.AssignmentExpression
-assignmentExpressionOperator :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.AssignmentOperator
-assignmentExpressionOperator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-        Core.projectionFieldName = (Core.Name "operator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the right field of hydra.typeScript.syntax.AssignmentExpression
-assignmentExpressionRight :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression
-assignmentExpressionRight x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-        Core.projectionFieldName = (Core.Name "right")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the left field of hydra.typeScript.syntax.AssignmentExpression
-assignmentExpressionWithLeft :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.AssignmentExpression
-assignmentExpressionWithLeft original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the operator field of hydra.typeScript.syntax.AssignmentExpression
-assignmentExpressionWithOperator :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.AssignmentOperator -> Typed.TypedTerm Syntax.AssignmentExpression
-assignmentExpressionWithOperator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the right field of hydra.typeScript.syntax.AssignmentExpression
-assignmentExpressionWithRight :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentExpression
-assignmentExpressionWithRight original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentExpression"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the addAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorAddAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorAddAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "addAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the andAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorAndAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorAndAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "andAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the assign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "assign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorAssignmentOperator :: Typed.TypedName Syntax.AssignmentOperator
-assignmentOperatorAssignmentOperator = Typed.TypedName (Core.Name "hydra.typeScript.syntax.AssignmentOperator")
-
--- | DSL injection for the bitwiseAndAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorBitwiseAndAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorBitwiseAndAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "bitwiseAndAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the bitwiseOrAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorBitwiseOrAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorBitwiseOrAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "bitwiseOrAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the bitwiseXorAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorBitwiseXorAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorBitwiseXorAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "bitwiseXorAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the divideAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorDivideAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorDivideAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "divideAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the exponentiateAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorExponentiateAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorExponentiateAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "exponentiateAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the leftShiftAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorLeftShiftAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorLeftShiftAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "leftShiftAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the moduloAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorModuloAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorModuloAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "moduloAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the multiplyAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorMultiplyAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorMultiplyAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "multiplyAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the nullishAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorNullishAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorNullishAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "nullishAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the orAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorOrAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorOrAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "orAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the rightShiftAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorRightShiftAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorRightShiftAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "rightShiftAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the subtractAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorSubtractAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorSubtractAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "subtractAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the unsignedRightShiftAssign variant of hydra.typeScript.syntax.AssignmentOperator
-assignmentOperatorUnsignedRightShiftAssign :: Typed.TypedTerm Syntax.AssignmentOperator
-assignmentOperatorUnsignedRightShiftAssign =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unsignedRightShiftAssign"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for hydra.typeScript.syntax.AssignmentPattern
-assignmentPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentPattern
-assignmentPattern left right =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm left)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm right)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.AssignmentPattern
-assignmentPatternAssignmentPattern :: Typed.TypedName Syntax.AssignmentPattern
-assignmentPatternAssignmentPattern = Typed.TypedName (Core.Name "hydra.typeScript.syntax.AssignmentPattern")
-
--- | DSL accessor for the left field of hydra.typeScript.syntax.AssignmentPattern
-assignmentPatternLeft :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Pattern
-assignmentPatternLeft x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentPattern"),
-        Core.projectionFieldName = (Core.Name "left")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the right field of hydra.typeScript.syntax.AssignmentPattern
-assignmentPatternRight :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Expression
-assignmentPatternRight x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentPattern"),
-        Core.projectionFieldName = (Core.Name "right")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the left field of hydra.typeScript.syntax.AssignmentPattern
-assignmentPatternWithLeft :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.AssignmentPattern
-assignmentPatternWithLeft original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentPattern"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the right field of hydra.typeScript.syntax.AssignmentPattern
-assignmentPatternWithRight :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentPattern
-assignmentPatternWithRight original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.AssignmentPattern"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.BinaryExpression
-binaryExpression :: Typed.TypedTerm Syntax.BinaryOperator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpression
-binaryExpression operator left right =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm operator)},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm left)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm right)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.BinaryExpression
-binaryExpressionBinaryExpression :: Typed.TypedName Syntax.BinaryExpression
-binaryExpressionBinaryExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.BinaryExpression")
-
--- | DSL accessor for the left field of hydra.typeScript.syntax.BinaryExpression
-binaryExpressionLeft :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression
-binaryExpressionLeft x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-        Core.projectionFieldName = (Core.Name "left")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the operator field of hydra.typeScript.syntax.BinaryExpression
-binaryExpressionOperator :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.BinaryOperator
-binaryExpressionOperator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-        Core.projectionFieldName = (Core.Name "operator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the right field of hydra.typeScript.syntax.BinaryExpression
-binaryExpressionRight :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression
-binaryExpressionRight x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-        Core.projectionFieldName = (Core.Name "right")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the left field of hydra.typeScript.syntax.BinaryExpression
-binaryExpressionWithLeft :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpression
-binaryExpressionWithLeft original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the operator field of hydra.typeScript.syntax.BinaryExpression
-binaryExpressionWithOperator :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.BinaryOperator -> Typed.TypedTerm Syntax.BinaryExpression
-binaryExpressionWithOperator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the right field of hydra.typeScript.syntax.BinaryExpression
-binaryExpressionWithRight :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpression
-binaryExpressionWithRight original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryExpression"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the add variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorAdd :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorAdd =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "add"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the and variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorAnd :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorAnd =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "and"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.typeScript.syntax.BinaryOperator
-binaryOperatorBinaryOperator :: Typed.TypedName Syntax.BinaryOperator
-binaryOperatorBinaryOperator = Typed.TypedName (Core.Name "hydra.typeScript.syntax.BinaryOperator")
-
--- | DSL injection for the bitwiseAnd variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorBitwiseAnd :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorBitwiseAnd =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "bitwiseAnd"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the bitwiseOr variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorBitwiseOr :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorBitwiseOr =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "bitwiseOr"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the bitwiseXor variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorBitwiseXor :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorBitwiseXor =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "bitwiseXor"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the divide variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorDivide :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorDivide =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "divide"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the equal variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorEqual :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorEqual =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "equal"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the exponentiate variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorExponentiate :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorExponentiate =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "exponentiate"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the greaterThan variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorGreaterThan :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorGreaterThan =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "greaterThan"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the greaterThanOrEqual variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorGreaterThanOrEqual :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorGreaterThanOrEqual =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "greaterThanOrEqual"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the in variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorIn :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorIn =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "in"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the instanceof variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorInstanceof :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorInstanceof =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "instanceof"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the leftShift variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorLeftShift :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorLeftShift =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "leftShift"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the lessThan variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorLessThan :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorLessThan =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "lessThan"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the lessThanOrEqual variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorLessThanOrEqual :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorLessThanOrEqual =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "lessThanOrEqual"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the modulo variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorModulo :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorModulo =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "modulo"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the multiply variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorMultiply :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorMultiply =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "multiply"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the notEqual variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorNotEqual :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorNotEqual =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "notEqual"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the nullishCoalescing variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorNullishCoalescing :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorNullishCoalescing =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "nullishCoalescing"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the or variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorOr :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorOr =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "or"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the rightShift variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorRightShift :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorRightShift =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "rightShift"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the strictEqual variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorStrictEqual :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorStrictEqual =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "strictEqual"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the strictNotEqual variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorStrictNotEqual :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorStrictNotEqual =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "strictNotEqual"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the subtract variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorSubtract :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorSubtract =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "subtract"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the unsignedRightShift variant of hydra.typeScript.syntax.BinaryOperator
-binaryOperatorUnsignedRightShift :: Typed.TypedTerm Syntax.BinaryOperator
-binaryOperatorUnsignedRightShift =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.BinaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unsignedRightShift"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for hydra.typeScript.syntax.CallExpression
-callExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.CallExpression
-callExpression callee arguments optional =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "callee"),
-          Core.fieldTerm = (Typed.unTypedTerm callee)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm arguments)},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Typed.unTypedTerm optional)}]}))
-
--- | DSL accessor for the arguments field of hydra.typeScript.syntax.CallExpression
-callExpressionArguments :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm [Syntax.Expression]
-callExpressionArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-        Core.projectionFieldName = (Core.Name "arguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.CallExpression
-callExpressionCallExpression :: Typed.TypedName Syntax.CallExpression
-callExpressionCallExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.CallExpression")
-
--- | DSL accessor for the callee field of hydra.typeScript.syntax.CallExpression
-callExpressionCallee :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Syntax.Expression
-callExpressionCallee x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-        Core.projectionFieldName = (Core.Name "callee")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the optional field of hydra.typeScript.syntax.CallExpression
-callExpressionOptional :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Bool
-callExpressionOptional x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-        Core.projectionFieldName = (Core.Name "optional")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the arguments field of hydra.typeScript.syntax.CallExpression
-callExpressionWithArguments :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.CallExpression
-callExpressionWithArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "callee"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-              Core.projectionFieldName = (Core.Name "callee")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the callee field of hydra.typeScript.syntax.CallExpression
-callExpressionWithCallee :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.CallExpression
-callExpressionWithCallee original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "callee"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the optional field of hydra.typeScript.syntax.CallExpression
-callExpressionWithOptional :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.CallExpression
-callExpressionWithOptional original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "callee"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-              Core.projectionFieldName = (Core.Name "callee")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CallExpression"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.CatchClause
-catchClause :: Typed.TypedTerm (Maybe Syntax.Pattern) -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.CatchClause
-catchClause param body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.CatchClause"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "param"),
-          Core.fieldTerm = (Typed.unTypedTerm param)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.CatchClause
-catchClauseBody :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm Syntax.BlockStatement
-catchClauseBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CatchClause"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.CatchClause
-catchClauseCatchClause :: Typed.TypedName Syntax.CatchClause
-catchClauseCatchClause = Typed.TypedName (Core.Name "hydra.typeScript.syntax.CatchClause")
-
--- | DSL accessor for the param field of hydra.typeScript.syntax.CatchClause
-catchClauseParam :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm (Maybe Syntax.Pattern)
-catchClauseParam x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CatchClause"),
-        Core.projectionFieldName = (Core.Name "param")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.CatchClause
-catchClauseWithBody :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.CatchClause
-catchClauseWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.CatchClause"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "param"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CatchClause"),
-              Core.projectionFieldName = (Core.Name "param")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the param field of hydra.typeScript.syntax.CatchClause
-catchClauseWithParam :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm (Maybe Syntax.Pattern) -> Typed.TypedTerm Syntax.CatchClause
-catchClauseWithParam original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.CatchClause"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "param"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.CatchClause"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.ClassDeclaration
-classDeclaration :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm Syntax.ClassDeclaration
-classDeclaration id superClass body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm id)},
-        Core.Field {
-          Core.fieldName = (Core.Name "superClass"),
-          Core.fieldTerm = (Typed.unTypedTerm superClass)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.ClassDeclaration
-classDeclarationBody :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.ClassBody
-classDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ClassDeclaration
-classDeclarationClassDeclaration :: Typed.TypedName Syntax.ClassDeclaration
-classDeclarationClassDeclaration = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ClassDeclaration")
-
--- | DSL accessor for the id field of hydra.typeScript.syntax.ClassDeclaration
-classDeclarationId :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.Identifier
-classDeclarationId x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "id")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the superClass field of hydra.typeScript.syntax.ClassDeclaration
-classDeclarationSuperClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm (Maybe Syntax.Expression)
-classDeclarationSuperClass x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-        Core.projectionFieldName = (Core.Name "superClass")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.ClassDeclaration
-classDeclarationWithBody :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm Syntax.ClassDeclaration
-classDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "superClass"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "superClass")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.ClassDeclarationWithComments
-classDeclarationWithComments :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.ClassDeclarationWithComments
-classDeclarationWithComments body comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.ClassDeclarationWithComments
-classDeclarationWithCommentsBody :: Typed.TypedTerm Syntax.ClassDeclarationWithComments -> Typed.TypedTerm Syntax.ClassDeclaration
-classDeclarationWithCommentsBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ClassDeclarationWithComments
-classDeclarationWithCommentsClassDeclarationWithComments :: Typed.TypedName Syntax.ClassDeclarationWithComments
-classDeclarationWithCommentsClassDeclarationWithComments =
-    Typed.TypedName (Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments")
-
--- | DSL accessor for the comments field of hydra.typeScript.syntax.ClassDeclarationWithComments
-classDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.ClassDeclarationWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
-classDeclarationWithCommentsComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.ClassDeclarationWithComments
-classDeclarationWithCommentsWithBody :: Typed.TypedTerm Syntax.ClassDeclarationWithComments -> Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.ClassDeclarationWithComments
-classDeclarationWithCommentsWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the comments field of hydra.typeScript.syntax.ClassDeclarationWithComments
-classDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.ClassDeclarationWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.ClassDeclarationWithComments
-classDeclarationWithCommentsWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the id field of hydra.typeScript.syntax.ClassDeclaration
-classDeclarationWithId :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ClassDeclaration
-classDeclarationWithId original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "superClass"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "superClass")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the superClass field of hydra.typeScript.syntax.ClassDeclaration
-classDeclarationWithSuperClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ClassDeclaration
-classDeclarationWithSuperClass original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "superClass"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ClassDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the block variant of hydra.typeScript.syntax.Comment
-commentBlock :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Comment
-commentBlock x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Comment"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "block"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.Comment
-commentComment :: Typed.TypedName Syntax.Comment
-commentComment = Typed.TypedName (Core.Name "hydra.typeScript.syntax.Comment")
-
--- | DSL injection for the documentation variant of hydra.typeScript.syntax.Comment
-commentDocumentation :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm Syntax.Comment
-commentDocumentation x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Comment"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "documentation"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the line variant of hydra.typeScript.syntax.Comment
-commentLine :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Comment
-commentLine x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Comment"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "line"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.ConditionalExpression
-conditionalExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression
-conditionalExpression test consequent alternate =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm test)},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Typed.unTypedTerm consequent)},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternate"),
-          Core.fieldTerm = (Typed.unTypedTerm alternate)}]}))
-
--- | DSL accessor for the alternate field of hydra.typeScript.syntax.ConditionalExpression
-conditionalExpressionAlternate :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression
-conditionalExpressionAlternate x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-        Core.projectionFieldName = (Core.Name "alternate")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ConditionalExpression
-conditionalExpressionConditionalExpression :: Typed.TypedName Syntax.ConditionalExpression
-conditionalExpressionConditionalExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ConditionalExpression")
-
--- | DSL accessor for the consequent field of hydra.typeScript.syntax.ConditionalExpression
-conditionalExpressionConsequent :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression
-conditionalExpressionConsequent x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-        Core.projectionFieldName = (Core.Name "consequent")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the test field of hydra.typeScript.syntax.ConditionalExpression
-conditionalExpressionTest :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression
-conditionalExpressionTest x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-        Core.projectionFieldName = (Core.Name "test")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the alternate field of hydra.typeScript.syntax.ConditionalExpression
-conditionalExpressionWithAlternate :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression
-conditionalExpressionWithAlternate original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-              Core.projectionFieldName = (Core.Name "consequent")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternate"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the consequent field of hydra.typeScript.syntax.ConditionalExpression
-conditionalExpressionWithConsequent :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression
-conditionalExpressionWithConsequent original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternate"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-              Core.projectionFieldName = (Core.Name "alternate")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the test field of hydra.typeScript.syntax.ConditionalExpression
-conditionalExpressionWithTest :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression
-conditionalExpressionWithTest original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-              Core.projectionFieldName = (Core.Name "consequent")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternate"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ConditionalExpression"),
-              Core.projectionFieldName = (Core.Name "alternate")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.DoWhileStatement
-doWhileStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DoWhileStatement
-doWhileStatement body test =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DoWhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm test)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.DoWhileStatement
-doWhileStatementBody :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Statement
-doWhileStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DoWhileStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.DoWhileStatement
-doWhileStatementDoWhileStatement :: Typed.TypedName Syntax.DoWhileStatement
-doWhileStatementDoWhileStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.DoWhileStatement")
-
--- | DSL accessor for the test field of hydra.typeScript.syntax.DoWhileStatement
-doWhileStatementTest :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Expression
-doWhileStatementTest x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DoWhileStatement"),
-        Core.projectionFieldName = (Core.Name "test")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.DoWhileStatement
-doWhileStatementWithBody :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.DoWhileStatement
-doWhileStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DoWhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DoWhileStatement"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the test field of hydra.typeScript.syntax.DoWhileStatement
-doWhileStatementWithTest :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DoWhileStatement
-doWhileStatementWithTest original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DoWhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DoWhileStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.DocumentationComment
-documentationComment :: Typed.TypedTerm String -> Typed.TypedTerm [Syntax.DocumentationTag] -> Typed.TypedTerm Syntax.DocumentationComment
-documentationComment description tags =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationComment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "description"),
-          Core.fieldTerm = (Typed.unTypedTerm description)},
-        Core.Field {
-          Core.fieldName = (Core.Name "tags"),
-          Core.fieldTerm = (Typed.unTypedTerm tags)}]}))
-
--- | DSL accessor for the description field of hydra.typeScript.syntax.DocumentationComment
-documentationCommentDescription :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm String
-documentationCommentDescription x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationComment"),
-        Core.projectionFieldName = (Core.Name "description")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.DocumentationComment
-documentationCommentDocumentationComment :: Typed.TypedName Syntax.DocumentationComment
-documentationCommentDocumentationComment = Typed.TypedName (Core.Name "hydra.typeScript.syntax.DocumentationComment")
-
--- | DSL accessor for the tags field of hydra.typeScript.syntax.DocumentationComment
-documentationCommentTags :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm [Syntax.DocumentationTag]
-documentationCommentTags x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationComment"),
-        Core.projectionFieldName = (Core.Name "tags")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the description field of hydra.typeScript.syntax.DocumentationComment
-documentationCommentWithDescription :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.DocumentationComment
-documentationCommentWithDescription original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationComment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "description"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "tags"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationComment"),
-              Core.projectionFieldName = (Core.Name "tags")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the tags field of hydra.typeScript.syntax.DocumentationComment
-documentationCommentWithTags :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm [Syntax.DocumentationTag] -> Typed.TypedTerm Syntax.DocumentationComment
-documentationCommentWithTags original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationComment"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "description"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationComment"),
-              Core.projectionFieldName = (Core.Name "description")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "tags"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.DocumentationTag
-documentationTag :: Typed.TypedTerm String -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.DocumentationTag
-documentationTag name type_ paramName description =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "paramName"),
-          Core.fieldTerm = (Typed.unTypedTerm paramName)},
-        Core.Field {
-          Core.fieldName = (Core.Name "description"),
-          Core.fieldTerm = (Typed.unTypedTerm description)}]}))
-
--- | DSL accessor for the description field of hydra.typeScript.syntax.DocumentationTag
-documentationTagDescription :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm String
-documentationTagDescription x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-        Core.projectionFieldName = (Core.Name "description")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.DocumentationTag
-documentationTagDocumentationTag :: Typed.TypedName Syntax.DocumentationTag
-documentationTagDocumentationTag = Typed.TypedName (Core.Name "hydra.typeScript.syntax.DocumentationTag")
-
--- | DSL accessor for the name field of hydra.typeScript.syntax.DocumentationTag
-documentationTagName :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm String
-documentationTagName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the paramName field of hydra.typeScript.syntax.DocumentationTag
-documentationTagParamName :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm (Maybe Syntax.Identifier)
-documentationTagParamName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-        Core.projectionFieldName = (Core.Name "paramName")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.typeScript.syntax.DocumentationTag
-documentationTagType :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm (Maybe Syntax.TypeExpression)
-documentationTagType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the description field of hydra.typeScript.syntax.DocumentationTag
-documentationTagWithDescription :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.DocumentationTag
-documentationTagWithDescription original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "paramName"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "paramName")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "description"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.typeScript.syntax.DocumentationTag
-documentationTagWithName :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.DocumentationTag
-documentationTagWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "paramName"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "paramName")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "description"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "description")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the paramName field of hydra.typeScript.syntax.DocumentationTag
-documentationTagWithParamName :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.DocumentationTag
-documentationTagWithParamName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "paramName"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "description"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "description")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.typeScript.syntax.DocumentationTag
-documentationTagWithType :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm Syntax.DocumentationTag
-documentationTagWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "paramName"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "paramName")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "description"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.DocumentationTag"),
-              Core.projectionFieldName = (Core.Name "description")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.ExportAllDeclaration
-exportAllDeclaration :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.ExportAllDeclaration
-exportAllDeclaration exported source =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ExportAllDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "exported"),
-          Core.fieldTerm = (Typed.unTypedTerm exported)},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Typed.unTypedTerm source)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.ExportAllDeclaration
-exportAllDeclarationExportAllDeclaration :: Typed.TypedName Syntax.ExportAllDeclaration
-exportAllDeclarationExportAllDeclaration = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ExportAllDeclaration")
-
--- | DSL accessor for the exported field of hydra.typeScript.syntax.ExportAllDeclaration
-exportAllDeclarationExported :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm (Maybe Syntax.Identifier)
-exportAllDeclarationExported x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportAllDeclaration"),
-        Core.projectionFieldName = (Core.Name "exported")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the source field of hydra.typeScript.syntax.ExportAllDeclaration
-exportAllDeclarationSource :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm Syntax.StringLiteral
-exportAllDeclarationSource x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportAllDeclaration"),
-        Core.projectionFieldName = (Core.Name "source")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the exported field of hydra.typeScript.syntax.ExportAllDeclaration
-exportAllDeclarationWithExported :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ExportAllDeclaration
-exportAllDeclarationWithExported original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ExportAllDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "exported"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportAllDeclaration"),
-              Core.projectionFieldName = (Core.Name "source")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the source field of hydra.typeScript.syntax.ExportAllDeclaration
-exportAllDeclarationWithSource :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.ExportAllDeclaration
-exportAllDeclarationWithSource original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ExportAllDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "exported"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportAllDeclaration"),
-              Core.projectionFieldName = (Core.Name "exported")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the all variant of hydra.typeScript.syntax.ExportDeclaration
-exportDeclarationAll :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm Syntax.ExportDeclaration
-exportDeclarationAll x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "all"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the declaration variant of hydra.typeScript.syntax.ExportDeclaration
-exportDeclarationDeclaration :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ExportDeclaration
-exportDeclarationDeclaration x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "declaration"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the default variant of hydra.typeScript.syntax.ExportDeclaration
-exportDeclarationDefault :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ExportDeclaration
-exportDeclarationDefault x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "default"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.ExportDeclaration
-exportDeclarationExportDeclaration :: Typed.TypedName Syntax.ExportDeclaration
-exportDeclarationExportDeclaration = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ExportDeclaration")
-
--- | DSL injection for the named variant of hydra.typeScript.syntax.ExportDeclaration
-exportDeclarationNamed :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm Syntax.ExportDeclaration
-exportDeclarationNamed x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportDeclaration"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "named"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.ExportSpecifier
-exportSpecifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExportSpecifier
-exportSpecifier local exported =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ExportSpecifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "local"),
-          Core.fieldTerm = (Typed.unTypedTerm local)},
-        Core.Field {
-          Core.fieldName = (Core.Name "exported"),
-          Core.fieldTerm = (Typed.unTypedTerm exported)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.ExportSpecifier
-exportSpecifierExportSpecifier :: Typed.TypedName Syntax.ExportSpecifier
-exportSpecifierExportSpecifier = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ExportSpecifier")
-
--- | DSL accessor for the exported field of hydra.typeScript.syntax.ExportSpecifier
-exportSpecifierExported :: Typed.TypedTerm Syntax.ExportSpecifier -> Typed.TypedTerm Syntax.Identifier
-exportSpecifierExported x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportSpecifier"),
-        Core.projectionFieldName = (Core.Name "exported")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the local field of hydra.typeScript.syntax.ExportSpecifier
-exportSpecifierLocal :: Typed.TypedTerm Syntax.ExportSpecifier -> Typed.TypedTerm Syntax.Identifier
-exportSpecifierLocal x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportSpecifier"),
-        Core.projectionFieldName = (Core.Name "local")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the exported field of hydra.typeScript.syntax.ExportSpecifier
-exportSpecifierWithExported :: Typed.TypedTerm Syntax.ExportSpecifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExportSpecifier
-exportSpecifierWithExported original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ExportSpecifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "local"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportSpecifier"),
-              Core.projectionFieldName = (Core.Name "local")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "exported"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the local field of hydra.typeScript.syntax.ExportSpecifier
-exportSpecifierWithLocal :: Typed.TypedTerm Syntax.ExportSpecifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExportSpecifier
-exportSpecifierWithLocal original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ExportSpecifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "local"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "exported"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ExportSpecifier"),
-              Core.projectionFieldName = (Core.Name "exported")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the array variant of hydra.typeScript.syntax.Expression
-expressionArray :: Typed.TypedTerm Syntax.ArrayExpression -> Typed.TypedTerm Syntax.Expression
-expressionArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "array"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the arrow variant of hydra.typeScript.syntax.Expression
-expressionArrow :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Syntax.Expression
-expressionArrow x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "arrow"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the asExpression variant of hydra.typeScript.syntax.Expression
-expressionAsExpression :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.Expression
-expressionAsExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "asExpression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the assignment variant of hydra.typeScript.syntax.Expression
-expressionAssignment :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression
-expressionAssignment x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "assignment"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the await variant of hydra.typeScript.syntax.Expression
-expressionAwait :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression
-expressionAwait x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "await"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the binary variant of hydra.typeScript.syntax.Expression
-expressionBinary :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression
-expressionBinary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "binary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the call variant of hydra.typeScript.syntax.Expression
-expressionCall :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Syntax.Expression
-expressionCall x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "call"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the conditional variant of hydra.typeScript.syntax.Expression
-expressionConditional :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression
-expressionConditional x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "conditional"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.Expression
-expressionExpression :: Typed.TypedName Syntax.Expression
-expressionExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.Expression")
-
--- | DSL injection for the function variant of hydra.typeScript.syntax.Expression
-expressionFunction :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.Expression
-expressionFunction x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "function"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the identifier variant of hydra.typeScript.syntax.Expression
-expressionIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Expression
-expressionIdentifier x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "identifier"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the literal variant of hydra.typeScript.syntax.Expression
-expressionLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.Expression
-expressionLiteral x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "literal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the member variant of hydra.typeScript.syntax.Expression
-expressionMember :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression
-expressionMember x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "member"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the new variant of hydra.typeScript.syntax.Expression
-expressionNew :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Syntax.Expression
-expressionNew x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "new"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the object variant of hydra.typeScript.syntax.Expression
-expressionObject :: Typed.TypedTerm Syntax.ObjectExpression -> Typed.TypedTerm Syntax.Expression
-expressionObject x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "object"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the parenthesized variant of hydra.typeScript.syntax.Expression
-expressionParenthesized :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression
-expressionParenthesized x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "parenthesized"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the sequence variant of hydra.typeScript.syntax.Expression
-expressionSequence :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Expression
-expressionSequence x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "sequence"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the spread variant of hydra.typeScript.syntax.Expression
-expressionSpread :: Typed.TypedTerm Syntax.SpreadElement -> Typed.TypedTerm Syntax.Expression
-expressionSpread x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "spread"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the this variant of hydra.typeScript.syntax.Expression
-expressionThis :: Typed.TypedTerm Syntax.Expression
-expressionThis =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "this"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the unary variant of hydra.typeScript.syntax.Expression
-expressionUnary :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.Expression
-expressionUnary x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unary"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the yield variant of hydra.typeScript.syntax.Expression
-expressionYield :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.Expression
-expressionYield x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Expression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "yield"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.ForInLeft
-forInLeftForInLeft :: Typed.TypedName Syntax.ForInLeft
-forInLeftForInLeft = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ForInLeft")
-
--- | DSL injection for the pattern variant of hydra.typeScript.syntax.ForInLeft
-forInLeftPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.ForInLeft
-forInLeftPattern x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInLeft"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "pattern"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the variable variant of hydra.typeScript.syntax.ForInLeft
-forInLeftVariable :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.ForInLeft
-forInLeftVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInLeft"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.ForInStatement
-forInStatement :: Typed.TypedTerm Syntax.ForInLeft -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForInStatement
-forInStatement left right body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm left)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm right)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.ForInStatement
-forInStatementBody :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Statement
-forInStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ForInStatement
-forInStatementForInStatement :: Typed.TypedName Syntax.ForInStatement
-forInStatementForInStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ForInStatement")
-
--- | DSL accessor for the left field of hydra.typeScript.syntax.ForInStatement
-forInStatementLeft :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.ForInLeft
-forInStatementLeft x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-        Core.projectionFieldName = (Core.Name "left")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the right field of hydra.typeScript.syntax.ForInStatement
-forInStatementRight :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Expression
-forInStatementRight x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-        Core.projectionFieldName = (Core.Name "right")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.ForInStatement
-forInStatementWithBody :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForInStatement
-forInStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the left field of hydra.typeScript.syntax.ForInStatement
-forInStatementWithLeft :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.ForInLeft -> Typed.TypedTerm Syntax.ForInStatement
-forInStatementWithLeft original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the right field of hydra.typeScript.syntax.ForInStatement
-forInStatementWithRight :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ForInStatement
-forInStatementWithRight original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the expression variant of hydra.typeScript.syntax.ForInit
-forInitExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ForInit
-forInitExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInit"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.ForInit
-forInitForInit :: Typed.TypedName Syntax.ForInit
-forInitForInit = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ForInit")
-
--- | DSL injection for the variable variant of hydra.typeScript.syntax.ForInit
-forInitVariable :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.ForInit
-forInitVariable x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ForInit"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variable"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.ForOfStatement
-forOfStatement :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ForInLeft -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForOfStatement
-forOfStatement await left right body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "await"),
-          Core.fieldTerm = (Typed.unTypedTerm await)},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm left)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm right)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the await field of hydra.typeScript.syntax.ForOfStatement
-forOfStatementAwait :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Bool
-forOfStatementAwait x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-        Core.projectionFieldName = (Core.Name "await")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.ForOfStatement
-forOfStatementBody :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Statement
-forOfStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ForOfStatement
-forOfStatementForOfStatement :: Typed.TypedName Syntax.ForOfStatement
-forOfStatementForOfStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ForOfStatement")
-
--- | DSL accessor for the left field of hydra.typeScript.syntax.ForOfStatement
-forOfStatementLeft :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.ForInLeft
-forOfStatementLeft x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-        Core.projectionFieldName = (Core.Name "left")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the right field of hydra.typeScript.syntax.ForOfStatement
-forOfStatementRight :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Expression
-forOfStatementRight x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-        Core.projectionFieldName = (Core.Name "right")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the await field of hydra.typeScript.syntax.ForOfStatement
-forOfStatementWithAwait :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ForOfStatement
-forOfStatementWithAwait original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "await"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.ForOfStatement
-forOfStatementWithBody :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForOfStatement
-forOfStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "await"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "await")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the left field of hydra.typeScript.syntax.ForOfStatement
-forOfStatementWithLeft :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.ForInLeft -> Typed.TypedTerm Syntax.ForOfStatement
-forOfStatementWithLeft original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "await"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "await")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "right")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the right field of hydra.typeScript.syntax.ForOfStatement
-forOfStatementWithRight :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ForOfStatement
-forOfStatementWithRight original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "await"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "await")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "left"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "left")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "right"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForOfStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.ForStatement
-forStatement :: Typed.TypedTerm (Maybe Syntax.ForInit) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForStatement
-forStatement init test update body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Typed.unTypedTerm init)},
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm test)},
-        Core.Field {
-          Core.fieldName = (Core.Name "update"),
-          Core.fieldTerm = (Typed.unTypedTerm update)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.ForStatement
-forStatementBody :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Statement
-forStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ForStatement
-forStatementForStatement :: Typed.TypedName Syntax.ForStatement
-forStatementForStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ForStatement")
-
--- | DSL accessor for the init field of hydra.typeScript.syntax.ForStatement
-forStatementInit :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.ForInit)
-forStatementInit x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-        Core.projectionFieldName = (Core.Name "init")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the test field of hydra.typeScript.syntax.ForStatement
-forStatementTest :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
-forStatementTest x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-        Core.projectionFieldName = (Core.Name "test")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the update field of hydra.typeScript.syntax.ForStatement
-forStatementUpdate :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
-forStatementUpdate x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-        Core.projectionFieldName = (Core.Name "update")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.ForStatement
-forStatementWithBody :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForStatement
-forStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "init")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "update"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "update")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the init field of hydra.typeScript.syntax.ForStatement
-forStatementWithInit :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.ForInit) -> Typed.TypedTerm Syntax.ForStatement
-forStatementWithInit original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "update"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "update")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the test field of hydra.typeScript.syntax.ForStatement
-forStatementWithTest :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ForStatement
-forStatementWithTest original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "init")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "update"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "update")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the update field of hydra.typeScript.syntax.ForStatement
-forStatementWithUpdate :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ForStatement
-forStatementWithUpdate original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "init")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "update"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ForStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.FunctionDeclaration
-functionDeclaration :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionDeclaration
-functionDeclaration id params body async generator =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm id)},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Typed.unTypedTerm params)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Typed.unTypedTerm async)},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Typed.unTypedTerm generator)}]}))
-
--- | DSL accessor for the async field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationAsync :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Bool
-functionDeclarationAsync x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-        Core.projectionFieldName = (Core.Name "async")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationBody :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.BlockStatement
-functionDeclarationBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationFunctionDeclaration :: Typed.TypedName Syntax.FunctionDeclaration
-functionDeclarationFunctionDeclaration = Typed.TypedName (Core.Name "hydra.typeScript.syntax.FunctionDeclaration")
-
--- | DSL accessor for the generator field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationGenerator :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Bool
-functionDeclarationGenerator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-        Core.projectionFieldName = (Core.Name "generator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the id field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationId :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.Identifier
-functionDeclarationId x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-        Core.projectionFieldName = (Core.Name "id")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the params field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationParams :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm [Syntax.Pattern]
-functionDeclarationParams x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-        Core.projectionFieldName = (Core.Name "params")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the async field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationWithAsync :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionDeclaration
-functionDeclarationWithAsync original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "generator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationWithBody :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.FunctionDeclaration
-functionDeclarationWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "generator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.FunctionDeclarationWithComments
-functionDeclarationWithComments :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.FunctionDeclarationWithComments
-functionDeclarationWithComments body comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.FunctionDeclarationWithComments
-functionDeclarationWithCommentsBody :: Typed.TypedTerm Syntax.FunctionDeclarationWithComments -> Typed.TypedTerm Syntax.FunctionDeclaration
-functionDeclarationWithCommentsBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the comments field of hydra.typeScript.syntax.FunctionDeclarationWithComments
-functionDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.FunctionDeclarationWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
-functionDeclarationWithCommentsComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.FunctionDeclarationWithComments
-functionDeclarationWithCommentsFunctionDeclarationWithComments :: Typed.TypedName Syntax.FunctionDeclarationWithComments
-functionDeclarationWithCommentsFunctionDeclarationWithComments =
-    Typed.TypedName (Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments")
-
--- | DSL updater for the body field of hydra.typeScript.syntax.FunctionDeclarationWithComments
-functionDeclarationWithCommentsWithBody :: Typed.TypedTerm Syntax.FunctionDeclarationWithComments -> Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.FunctionDeclarationWithComments
-functionDeclarationWithCommentsWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the comments field of hydra.typeScript.syntax.FunctionDeclarationWithComments
-functionDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.FunctionDeclarationWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.FunctionDeclarationWithComments
-functionDeclarationWithCommentsWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the generator field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationWithGenerator :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionDeclaration
-functionDeclarationWithGenerator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the id field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationWithId :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.FunctionDeclaration
-functionDeclarationWithId original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "generator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the params field of hydra.typeScript.syntax.FunctionDeclaration
-functionDeclarationWithParams :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.FunctionDeclaration
-functionDeclarationWithParams original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionDeclaration"),
-              Core.projectionFieldName = (Core.Name "generator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.FunctionExpression
-functionExpression :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionExpression
-functionExpression id params body async generator =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm id)},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Typed.unTypedTerm params)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Typed.unTypedTerm async)},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Typed.unTypedTerm generator)}]}))
-
--- | DSL accessor for the async field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionAsync :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Bool
-functionExpressionAsync x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-        Core.projectionFieldName = (Core.Name "async")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionBody :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.BlockStatement
-functionExpressionBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.FunctionExpression
-functionExpressionFunctionExpression :: Typed.TypedName Syntax.FunctionExpression
-functionExpressionFunctionExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.FunctionExpression")
-
--- | DSL accessor for the generator field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionGenerator :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Bool
-functionExpressionGenerator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-        Core.projectionFieldName = (Core.Name "generator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the id field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionId :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm (Maybe Syntax.Identifier)
-functionExpressionId x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-        Core.projectionFieldName = (Core.Name "id")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the params field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionParams :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm [Syntax.Pattern]
-functionExpressionParams x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-        Core.projectionFieldName = (Core.Name "params")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the async field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionWithAsync :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionExpression
-functionExpressionWithAsync original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "generator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionWithBody :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.FunctionExpression
-functionExpressionWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "generator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the generator field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionWithGenerator :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionExpression
-functionExpressionWithGenerator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the id field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionWithId :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.FunctionExpression
-functionExpressionWithId original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "params")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "generator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the params field of hydra.typeScript.syntax.FunctionExpression
-functionExpressionWithParams :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.FunctionExpression
-functionExpressionWithParams original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "params"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "async"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "async")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "generator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionExpression"),
-              Core.projectionFieldName = (Core.Name "generator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.FunctionTypeExpression
-functionTypeExpression :: Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.FunctionTypeExpression
-functionTypeExpression typeParameters parameters returnType =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm typeParameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm parameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "returnType"),
-          Core.fieldTerm = (Typed.unTypedTerm returnType)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.FunctionTypeExpression
-functionTypeExpressionFunctionTypeExpression :: Typed.TypedName Syntax.FunctionTypeExpression
-functionTypeExpressionFunctionTypeExpression =
-    Typed.TypedName (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression")
-
--- | DSL accessor for the parameters field of hydra.typeScript.syntax.FunctionTypeExpression
-functionTypeExpressionParameters :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm [Syntax.TypeExpression]
-functionTypeExpressionParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-        Core.projectionFieldName = (Core.Name "parameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the returnType field of hydra.typeScript.syntax.FunctionTypeExpression
-functionTypeExpressionReturnType :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-functionTypeExpressionReturnType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-        Core.projectionFieldName = (Core.Name "returnType")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeParameters field of hydra.typeScript.syntax.FunctionTypeExpression
-functionTypeExpressionTypeParameters :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm [Syntax.TypeParameter]
-functionTypeExpressionTypeParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-        Core.projectionFieldName = (Core.Name "typeParameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the parameters field of hydra.typeScript.syntax.FunctionTypeExpression
-functionTypeExpressionWithParameters :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.FunctionTypeExpression
-functionTypeExpressionWithParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-              Core.projectionFieldName = (Core.Name "typeParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "returnType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-              Core.projectionFieldName = (Core.Name "returnType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the returnType field of hydra.typeScript.syntax.FunctionTypeExpression
-functionTypeExpressionWithReturnType :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.FunctionTypeExpression
-functionTypeExpressionWithReturnType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-              Core.projectionFieldName = (Core.Name "typeParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "returnType"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the typeParameters field of hydra.typeScript.syntax.FunctionTypeExpression
-functionTypeExpressionWithTypeParameters :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.FunctionTypeExpression
-functionTypeExpressionWithTypeParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "parameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-              Core.projectionFieldName = (Core.Name "parameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "returnType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"),
-              Core.projectionFieldName = (Core.Name "returnType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.typeScript.syntax.Identifier wrapper
-identifier :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Identifier
-identifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.typeScript.syntax.Identifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.Identifier
-identifierIdentifier :: Typed.TypedName Syntax.Identifier
-identifierIdentifier = Typed.TypedName (Core.Name "hydra.typeScript.syntax.Identifier")
-
--- | DSL constructor for hydra.typeScript.syntax.IfStatement
-ifStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm (Maybe Syntax.Statement) -> Typed.TypedTerm Syntax.IfStatement
-ifStatement test consequent alternate =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm test)},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Typed.unTypedTerm consequent)},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternate"),
-          Core.fieldTerm = (Typed.unTypedTerm alternate)}]}))
-
--- | DSL accessor for the alternate field of hydra.typeScript.syntax.IfStatement
-ifStatementAlternate :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm (Maybe Syntax.Statement)
-ifStatementAlternate x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-        Core.projectionFieldName = (Core.Name "alternate")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the consequent field of hydra.typeScript.syntax.IfStatement
-ifStatementConsequent :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Statement
-ifStatementConsequent x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-        Core.projectionFieldName = (Core.Name "consequent")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.IfStatement
-ifStatementIfStatement :: Typed.TypedName Syntax.IfStatement
-ifStatementIfStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.IfStatement")
-
--- | DSL accessor for the test field of hydra.typeScript.syntax.IfStatement
-ifStatementTest :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Expression
-ifStatementTest x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-        Core.projectionFieldName = (Core.Name "test")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the alternate field of hydra.typeScript.syntax.IfStatement
-ifStatementWithAlternate :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm (Maybe Syntax.Statement) -> Typed.TypedTerm Syntax.IfStatement
-ifStatementWithAlternate original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-              Core.projectionFieldName = (Core.Name "consequent")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternate"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the consequent field of hydra.typeScript.syntax.IfStatement
-ifStatementWithConsequent :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfStatement
-ifStatementWithConsequent original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternate"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-              Core.projectionFieldName = (Core.Name "alternate")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the test field of hydra.typeScript.syntax.IfStatement
-ifStatementWithTest :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfStatement
-ifStatementWithTest original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-              Core.projectionFieldName = (Core.Name "consequent")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "alternate"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.IfStatement"),
-              Core.projectionFieldName = (Core.Name "alternate")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the default variant of hydra.typeScript.syntax.ImportClause
-importClauseDefault :: Typed.TypedTerm Syntax.ImportDefaultSpecifier -> Typed.TypedTerm Syntax.ImportClause
-importClauseDefault x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportClause"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "default"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.ImportClause
-importClauseImportClause :: Typed.TypedName Syntax.ImportClause
-importClauseImportClause = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ImportClause")
-
--- | DSL injection for the named variant of hydra.typeScript.syntax.ImportClause
-importClauseNamed :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.ImportClause
-importClauseNamed x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportClause"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "named"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the namespace variant of hydra.typeScript.syntax.ImportClause
-importClauseNamespace :: Typed.TypedTerm Syntax.ImportNamespaceSpecifier -> Typed.TypedTerm Syntax.ImportClause
-importClauseNamespace x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportClause"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "namespace"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.ImportDeclaration
-importDeclaration :: Typed.TypedTerm [Syntax.ImportClause] -> Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.ImportDeclaration
-importDeclaration specifiers source =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ImportDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "specifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm specifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Typed.unTypedTerm source)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.ImportDeclaration
-importDeclarationImportDeclaration :: Typed.TypedName Syntax.ImportDeclaration
-importDeclarationImportDeclaration = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ImportDeclaration")
-
--- | DSL accessor for the source field of hydra.typeScript.syntax.ImportDeclaration
-importDeclarationSource :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm Syntax.StringLiteral
-importDeclarationSource x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportDeclaration"),
-        Core.projectionFieldName = (Core.Name "source")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the specifiers field of hydra.typeScript.syntax.ImportDeclaration
-importDeclarationSpecifiers :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm [Syntax.ImportClause]
-importDeclarationSpecifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportDeclaration"),
-        Core.projectionFieldName = (Core.Name "specifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the source field of hydra.typeScript.syntax.ImportDeclaration
-importDeclarationWithSource :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.ImportDeclaration
-importDeclarationWithSource original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ImportDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "specifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportDeclaration"),
-              Core.projectionFieldName = (Core.Name "specifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the specifiers field of hydra.typeScript.syntax.ImportDeclaration
-importDeclarationWithSpecifiers :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm [Syntax.ImportClause] -> Typed.TypedTerm Syntax.ImportDeclaration
-importDeclarationWithSpecifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ImportDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "specifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportDeclaration"),
-              Core.projectionFieldName = (Core.Name "source")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.typeScript.syntax.ImportDefaultSpecifier wrapper
-importDefaultSpecifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportDefaultSpecifier
-importDefaultSpecifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.typeScript.syntax.ImportDefaultSpecifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ImportDefaultSpecifier
-importDefaultSpecifierImportDefaultSpecifier :: Typed.TypedName Syntax.ImportDefaultSpecifier
-importDefaultSpecifierImportDefaultSpecifier =
-    Typed.TypedName (Core.Name "hydra.typeScript.syntax.ImportDefaultSpecifier")
-
--- | DSL constructor for the hydra.typeScript.syntax.ImportNamespaceSpecifier wrapper
-importNamespaceSpecifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportNamespaceSpecifier
-importNamespaceSpecifier x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.typeScript.syntax.ImportNamespaceSpecifier"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ImportNamespaceSpecifier
-importNamespaceSpecifierImportNamespaceSpecifier :: Typed.TypedName Syntax.ImportNamespaceSpecifier
-importNamespaceSpecifierImportNamespaceSpecifier =
-    Typed.TypedName (Core.Name "hydra.typeScript.syntax.ImportNamespaceSpecifier")
-
--- | DSL constructor for hydra.typeScript.syntax.ImportSpecifier
-importSpecifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportSpecifier
-importSpecifier imported local =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ImportSpecifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "imported"),
-          Core.fieldTerm = (Typed.unTypedTerm imported)},
-        Core.Field {
-          Core.fieldName = (Core.Name "local"),
-          Core.fieldTerm = (Typed.unTypedTerm local)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.ImportSpecifier
-importSpecifierImportSpecifier :: Typed.TypedName Syntax.ImportSpecifier
-importSpecifierImportSpecifier = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ImportSpecifier")
-
--- | DSL accessor for the imported field of hydra.typeScript.syntax.ImportSpecifier
-importSpecifierImported :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.Identifier
-importSpecifierImported x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportSpecifier"),
-        Core.projectionFieldName = (Core.Name "imported")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the local field of hydra.typeScript.syntax.ImportSpecifier
-importSpecifierLocal :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.Identifier
-importSpecifierLocal x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportSpecifier"),
-        Core.projectionFieldName = (Core.Name "local")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the imported field of hydra.typeScript.syntax.ImportSpecifier
-importSpecifierWithImported :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportSpecifier
-importSpecifierWithImported original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ImportSpecifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "imported"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "local"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportSpecifier"),
-              Core.projectionFieldName = (Core.Name "local")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the local field of hydra.typeScript.syntax.ImportSpecifier
-importSpecifierWithLocal :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportSpecifier
-importSpecifierWithLocal original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ImportSpecifier"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "imported"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ImportSpecifier"),
-              Core.projectionFieldName = (Core.Name "imported")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "local"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclaration :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm [Syntax.PropertySignature] -> Typed.TypedTerm Syntax.InterfaceDeclaration
-interfaceDeclaration name typeParameters extends members =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm typeParameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Typed.unTypedTerm extends)},
-        Core.Field {
-          Core.fieldName = (Core.Name "members"),
-          Core.fieldTerm = (Typed.unTypedTerm members)}]}))
-
--- | DSL accessor for the extends field of hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationExtends :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeExpression]
-interfaceDeclarationExtends x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "extends")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationInterfaceDeclaration :: Typed.TypedName Syntax.InterfaceDeclaration
-interfaceDeclarationInterfaceDeclaration = Typed.TypedName (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration")
-
--- | DSL accessor for the members field of hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationMembers :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.PropertySignature]
-interfaceDeclarationMembers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "members")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationName :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.Identifier
-interfaceDeclarationName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the typeParameters field of hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationTypeParameters :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
-interfaceDeclarationTypeParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-        Core.projectionFieldName = (Core.Name "typeParameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the extends field of hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationWithExtends :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.InterfaceDeclaration
-interfaceDeclarationWithExtends original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "typeParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "members"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "members")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the members field of hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationWithMembers :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.PropertySignature] -> Typed.TypedTerm Syntax.InterfaceDeclaration
-interfaceDeclarationWithMembers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "typeParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "members"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationWithName :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.InterfaceDeclaration
-interfaceDeclarationWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "typeParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "members"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "members")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the typeParameters field of hydra.typeScript.syntax.InterfaceDeclaration
-interfaceDeclarationWithTypeParameters :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.InterfaceDeclaration
-interfaceDeclarationWithTypeParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "extends"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "extends")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "members"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"),
-              Core.projectionFieldName = (Core.Name "members")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.LabeledStatement
-labeledStatement :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStatement
-labeledStatement label body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.LabeledStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "label"),
-          Core.fieldTerm = (Typed.unTypedTerm label)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.LabeledStatement
-labeledStatementBody :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement
-labeledStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.LabeledStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the label field of hydra.typeScript.syntax.LabeledStatement
-labeledStatementLabel :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Identifier
-labeledStatementLabel x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.LabeledStatement"),
-        Core.projectionFieldName = (Core.Name "label")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.LabeledStatement
-labeledStatementLabeledStatement :: Typed.TypedName Syntax.LabeledStatement
-labeledStatementLabeledStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.LabeledStatement")
-
--- | DSL updater for the body field of hydra.typeScript.syntax.LabeledStatement
-labeledStatementWithBody :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStatement
-labeledStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.LabeledStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "label"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.LabeledStatement"),
-              Core.projectionFieldName = (Core.Name "label")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the label field of hydra.typeScript.syntax.LabeledStatement
-labeledStatementWithLabel :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LabeledStatement
-labeledStatementWithLabel original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.LabeledStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "label"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.LabeledStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the bigInt variant of hydra.typeScript.syntax.Literal
-literalBigInt :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.Literal
-literalBigInt x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "bigInt"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the boolean variant of hydra.typeScript.syntax.Literal
-literalBoolean :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Literal
-literalBoolean x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "boolean"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.Literal
-literalLiteral :: Typed.TypedName Syntax.Literal
-literalLiteral = Typed.TypedName (Core.Name "hydra.typeScript.syntax.Literal")
-
--- | DSL injection for the null variant of hydra.typeScript.syntax.Literal
-literalNull :: Typed.TypedTerm Syntax.Literal
-literalNull =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "null"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the number variant of hydra.typeScript.syntax.Literal
-literalNumber :: Typed.TypedTerm Syntax.NumericLiteral -> Typed.TypedTerm Syntax.Literal
-literalNumber x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "number"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the string variant of hydra.typeScript.syntax.Literal
-literalString :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.Literal
-literalString x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "string"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the template variant of hydra.typeScript.syntax.Literal
-literalTemplate :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm Syntax.Literal
-literalTemplate x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "template"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the undefined variant of hydra.typeScript.syntax.Literal
-literalUndefined :: Typed.TypedTerm Syntax.Literal
-literalUndefined =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Literal"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "undefined"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for hydra.typeScript.syntax.MemberExpression
-memberExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MemberExpression
-memberExpression object property computed optional =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "object"),
-          Core.fieldTerm = (Typed.unTypedTerm object)},
-        Core.Field {
-          Core.fieldName = (Core.Name "property"),
-          Core.fieldTerm = (Typed.unTypedTerm property)},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Typed.unTypedTerm computed)},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Typed.unTypedTerm optional)}]}))
-
--- | DSL accessor for the computed field of hydra.typeScript.syntax.MemberExpression
-memberExpressionComputed :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Bool
-memberExpressionComputed x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-        Core.projectionFieldName = (Core.Name "computed")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.MemberExpression
-memberExpressionMemberExpression :: Typed.TypedName Syntax.MemberExpression
-memberExpressionMemberExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.MemberExpression")
-
--- | DSL accessor for the object field of hydra.typeScript.syntax.MemberExpression
-memberExpressionObject :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression
-memberExpressionObject x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-        Core.projectionFieldName = (Core.Name "object")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the optional field of hydra.typeScript.syntax.MemberExpression
-memberExpressionOptional :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Bool
-memberExpressionOptional x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-        Core.projectionFieldName = (Core.Name "optional")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the property field of hydra.typeScript.syntax.MemberExpression
-memberExpressionProperty :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression
-memberExpressionProperty x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-        Core.projectionFieldName = (Core.Name "property")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the computed field of hydra.typeScript.syntax.MemberExpression
-memberExpressionWithComputed :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MemberExpression
-memberExpressionWithComputed original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "object"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "object")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "property"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "property")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the object field of hydra.typeScript.syntax.MemberExpression
-memberExpressionWithObject :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.MemberExpression
-memberExpressionWithObject original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "object"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "property"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "property")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the optional field of hydra.typeScript.syntax.MemberExpression
-memberExpressionWithOptional :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MemberExpression
-memberExpressionWithOptional original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "object"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "object")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "property"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "property")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the property field of hydra.typeScript.syntax.MemberExpression
-memberExpressionWithProperty :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.MemberExpression
-memberExpressionWithProperty original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "object"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "object")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "property"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MemberExpression"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.MethodDefinition
-methodDefinition :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.MethodKind -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodDefinition
-methodDefinition key value kind computed static =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Typed.unTypedTerm key)},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm value)},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Typed.unTypedTerm kind)},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Typed.unTypedTerm computed)},
-        Core.Field {
-          Core.fieldName = (Core.Name "static"),
-          Core.fieldTerm = (Typed.unTypedTerm static)}]}))
-
--- | DSL accessor for the computed field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionComputed :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Bool
-methodDefinitionComputed x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-        Core.projectionFieldName = (Core.Name "computed")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the key field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionKey :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.Expression
-methodDefinitionKey x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-        Core.projectionFieldName = (Core.Name "key")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the kind field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionKind :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.MethodKind
-methodDefinitionKind x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-        Core.projectionFieldName = (Core.Name "kind")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.MethodDefinition
-methodDefinitionMethodDefinition :: Typed.TypedName Syntax.MethodDefinition
-methodDefinitionMethodDefinition = Typed.TypedName (Core.Name "hydra.typeScript.syntax.MethodDefinition")
-
--- | DSL accessor for the static field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionStatic :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Bool
-methodDefinitionStatic x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-        Core.projectionFieldName = (Core.Name "static")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the value field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionValue :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.FunctionExpression
-methodDefinitionValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the computed field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionWithComputed :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodDefinition
-methodDefinitionWithComputed original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "static"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "static")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the key field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionWithKey :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.MethodDefinition
-methodDefinitionWithKey original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "static"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "static")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the kind field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionWithKind :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.MethodKind -> Typed.TypedTerm Syntax.MethodDefinition
-methodDefinitionWithKind original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "static"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "static")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the static field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionWithStatic :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodDefinition
-methodDefinitionWithStatic original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "static"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the value field of hydra.typeScript.syntax.MethodDefinition
-methodDefinitionWithValue :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.MethodDefinition
-methodDefinitionWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "static"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodDefinition"),
-              Core.projectionFieldName = (Core.Name "static")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the constructor variant of hydra.typeScript.syntax.MethodKind
-methodKindConstructor :: Typed.TypedTerm Syntax.MethodKind
-methodKindConstructor =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "constructor"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the get variant of hydra.typeScript.syntax.MethodKind
-methodKindGet :: Typed.TypedTerm Syntax.MethodKind
-methodKindGet =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "get"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the method variant of hydra.typeScript.syntax.MethodKind
-methodKindMethod :: Typed.TypedTerm Syntax.MethodKind
-methodKindMethod =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "method"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.typeScript.syntax.MethodKind
-methodKindMethodKind :: Typed.TypedName Syntax.MethodKind
-methodKindMethodKind = Typed.TypedName (Core.Name "hydra.typeScript.syntax.MethodKind")
-
--- | DSL injection for the set variant of hydra.typeScript.syntax.MethodKind
-methodKindSet :: Typed.TypedTerm Syntax.MethodKind
-methodKindSet =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.MethodKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "set"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the export variant of hydra.typeScript.syntax.ModuleItem
-moduleItemExport :: Typed.TypedTerm Syntax.ExportDeclaration -> Typed.TypedTerm Syntax.ModuleItem
-moduleItemExport x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItem"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "export"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the import variant of hydra.typeScript.syntax.ModuleItem
-moduleItemImport :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm Syntax.ModuleItem
-moduleItemImport x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItem"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "import"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the interface variant of hydra.typeScript.syntax.ModuleItem
-moduleItemInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.ModuleItem
-moduleItemInterface x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItem"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "interface"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.ModuleItem
-moduleItemModuleItem :: Typed.TypedName Syntax.ModuleItem
-moduleItemModuleItem = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ModuleItem")
-
--- | DSL injection for the statement variant of hydra.typeScript.syntax.ModuleItem
-moduleItemStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ModuleItem
-moduleItemStatement x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItem"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "statement"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the typeAlias variant of hydra.typeScript.syntax.ModuleItem
-moduleItemTypeAlias :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.ModuleItem
-moduleItemTypeAlias x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItem"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typeAlias"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.ModuleItemWithComments
-moduleItemWithComments :: Typed.TypedTerm Syntax.ModuleItem -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.ModuleItemWithComments
-moduleItemWithComments body comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItemWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.ModuleItemWithComments
-moduleItemWithCommentsBody :: Typed.TypedTerm Syntax.ModuleItemWithComments -> Typed.TypedTerm Syntax.ModuleItem
-moduleItemWithCommentsBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItemWithComments"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the comments field of hydra.typeScript.syntax.ModuleItemWithComments
-moduleItemWithCommentsComments :: Typed.TypedTerm Syntax.ModuleItemWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
-moduleItemWithCommentsComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItemWithComments"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ModuleItemWithComments
-moduleItemWithCommentsModuleItemWithComments :: Typed.TypedName Syntax.ModuleItemWithComments
-moduleItemWithCommentsModuleItemWithComments =
-    Typed.TypedName (Core.Name "hydra.typeScript.syntax.ModuleItemWithComments")
-
--- | DSL updater for the body field of hydra.typeScript.syntax.ModuleItemWithComments
-moduleItemWithCommentsWithBody :: Typed.TypedTerm Syntax.ModuleItemWithComments -> Typed.TypedTerm Syntax.ModuleItem -> Typed.TypedTerm Syntax.ModuleItemWithComments
-moduleItemWithCommentsWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItemWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItemWithComments"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the comments field of hydra.typeScript.syntax.ModuleItemWithComments
-moduleItemWithCommentsWithComments :: Typed.TypedTerm Syntax.ModuleItemWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.ModuleItemWithComments
-moduleItemWithCommentsWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItemWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ModuleItemWithComments"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.NamedExport
-namedExport :: Typed.TypedTerm [Syntax.ExportSpecifier] -> Typed.TypedTerm (Maybe Syntax.StringLiteral) -> Typed.TypedTerm Syntax.NamedExport
-namedExport specifiers source =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.NamedExport"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "specifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm specifiers)},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Typed.unTypedTerm source)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.NamedExport
-namedExportNamedExport :: Typed.TypedName Syntax.NamedExport
-namedExportNamedExport = Typed.TypedName (Core.Name "hydra.typeScript.syntax.NamedExport")
-
--- | DSL accessor for the source field of hydra.typeScript.syntax.NamedExport
-namedExportSource :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm (Maybe Syntax.StringLiteral)
-namedExportSource x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.NamedExport"),
-        Core.projectionFieldName = (Core.Name "source")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the specifiers field of hydra.typeScript.syntax.NamedExport
-namedExportSpecifiers :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm [Syntax.ExportSpecifier]
-namedExportSpecifiers x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.NamedExport"),
-        Core.projectionFieldName = (Core.Name "specifiers")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the source field of hydra.typeScript.syntax.NamedExport
-namedExportWithSource :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm (Maybe Syntax.StringLiteral) -> Typed.TypedTerm Syntax.NamedExport
-namedExportWithSource original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.NamedExport"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "specifiers"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.NamedExport"),
-              Core.projectionFieldName = (Core.Name "specifiers")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the specifiers field of hydra.typeScript.syntax.NamedExport
-namedExportWithSpecifiers :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm [Syntax.ExportSpecifier] -> Typed.TypedTerm Syntax.NamedExport
-namedExportWithSpecifiers original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.NamedExport"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "specifiers"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "source"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.NamedExport"),
-              Core.projectionFieldName = (Core.Name "source")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the float variant of hydra.typeScript.syntax.NumericLiteral
-numericLiteralFloat :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.NumericLiteral
-numericLiteralFloat x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.NumericLiteral"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "float"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the integer variant of hydra.typeScript.syntax.NumericLiteral
-numericLiteralInteger :: Typed.TypedTerm I.Int64 -> Typed.TypedTerm Syntax.NumericLiteral
-numericLiteralInteger x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.NumericLiteral"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "integer"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.NumericLiteral
-numericLiteralNumericLiteral :: Typed.TypedName Syntax.NumericLiteral
-numericLiteralNumericLiteral = Typed.TypedName (Core.Name "hydra.typeScript.syntax.NumericLiteral")
-
--- | DSL constructor for hydra.typeScript.syntax.ObjectPattern
-objectPattern :: Typed.TypedTerm [Syntax.ObjectPatternProperty] -> Typed.TypedTerm Syntax.ObjectPattern
-objectPattern properties =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ObjectPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "properties"),
-          Core.fieldTerm = (Typed.unTypedTerm properties)}]}))
-
--- | DSL name token for hydra.typeScript.syntax.ObjectPattern
-objectPatternObjectPattern :: Typed.TypedName Syntax.ObjectPattern
-objectPatternObjectPattern = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ObjectPattern")
-
--- | DSL accessor for the properties field of hydra.typeScript.syntax.ObjectPattern
-objectPatternProperties :: Typed.TypedTerm Syntax.ObjectPattern -> Typed.TypedTerm [Syntax.ObjectPatternProperty]
-objectPatternProperties x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ObjectPattern"),
-        Core.projectionFieldName = (Core.Name "properties")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ObjectPatternProperty
-objectPatternPropertyObjectPatternProperty :: Typed.TypedName Syntax.ObjectPatternProperty
-objectPatternPropertyObjectPatternProperty = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ObjectPatternProperty")
-
--- | DSL injection for the property variant of hydra.typeScript.syntax.ObjectPatternProperty
-objectPatternPropertyProperty :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.ObjectPatternProperty
-objectPatternPropertyProperty x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ObjectPatternProperty"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "property"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the rest variant of hydra.typeScript.syntax.ObjectPatternProperty
-objectPatternPropertyRest :: Typed.TypedTerm Syntax.RestElement -> Typed.TypedTerm Syntax.ObjectPatternProperty
-objectPatternPropertyRest x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.ObjectPatternProperty"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "rest"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL updater for the properties field of hydra.typeScript.syntax.ObjectPattern
-objectPatternWithProperties :: Typed.TypedTerm Syntax.ObjectPattern -> Typed.TypedTerm [Syntax.ObjectPatternProperty] -> Typed.TypedTerm Syntax.ObjectPattern
-objectPatternWithProperties original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ObjectPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "properties"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.ParameterizedTypeExpression
-parameterizedTypeExpression :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.ParameterizedTypeExpression
-parameterizedTypeExpression base arguments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "base"),
-          Core.fieldTerm = (Typed.unTypedTerm base)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm arguments)}]}))
-
--- | DSL accessor for the arguments field of hydra.typeScript.syntax.ParameterizedTypeExpression
-parameterizedTypeExpressionArguments :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm [Syntax.TypeExpression]
-parameterizedTypeExpressionArguments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression"),
-        Core.projectionFieldName = (Core.Name "arguments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the base field of hydra.typeScript.syntax.ParameterizedTypeExpression
-parameterizedTypeExpressionBase :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-parameterizedTypeExpressionBase x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression"),
-        Core.projectionFieldName = (Core.Name "base")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ParameterizedTypeExpression
-parameterizedTypeExpressionParameterizedTypeExpression :: Typed.TypedName Syntax.ParameterizedTypeExpression
-parameterizedTypeExpressionParameterizedTypeExpression =
-    Typed.TypedName (Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression")
-
--- | DSL updater for the arguments field of hydra.typeScript.syntax.ParameterizedTypeExpression
-parameterizedTypeExpressionWithArguments :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.ParameterizedTypeExpression
-parameterizedTypeExpressionWithArguments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "base"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression"),
-              Core.projectionFieldName = (Core.Name "base")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the base field of hydra.typeScript.syntax.ParameterizedTypeExpression
-parameterizedTypeExpressionWithBase :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.ParameterizedTypeExpression
-parameterizedTypeExpressionWithBase original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "base"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "arguments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression"),
-              Core.projectionFieldName = (Core.Name "arguments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL injection for the array variant of hydra.typeScript.syntax.Pattern
-patternArray :: Typed.TypedTerm Syntax.ArrayPattern -> Typed.TypedTerm Syntax.Pattern
-patternArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "array"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the assignment variant of hydra.typeScript.syntax.Pattern
-patternAssignment :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Pattern
-patternAssignment x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "assignment"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the identifier variant of hydra.typeScript.syntax.Pattern
-patternIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Pattern
-patternIdentifier x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "identifier"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the object variant of hydra.typeScript.syntax.Pattern
-patternObject :: Typed.TypedTerm Syntax.ObjectPattern -> Typed.TypedTerm Syntax.Pattern
-patternObject x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "object"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.Pattern
-patternPattern :: Typed.TypedName Syntax.Pattern
-patternPattern = Typed.TypedName (Core.Name "hydra.typeScript.syntax.Pattern")
-
--- | DSL injection for the rest variant of hydra.typeScript.syntax.Pattern
-patternRest :: Typed.TypedTerm Syntax.RestElement -> Typed.TypedTerm Syntax.Pattern
-patternRest x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "rest"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the typed variant of hydra.typeScript.syntax.Pattern
-patternTyped :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern
-patternTyped x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Pattern"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typed"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.Program
-program :: Typed.TypedTerm [Syntax.ModuleItem] -> Typed.TypedTerm Syntax.SourceType -> Typed.TypedTerm Syntax.Program
-program body sourceType =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Program"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "sourceType"),
-          Core.fieldTerm = (Typed.unTypedTerm sourceType)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.Program
-programBody :: Typed.TypedTerm Syntax.Program -> Typed.TypedTerm [Syntax.ModuleItem]
-programBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Program"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.Program
-programProgram :: Typed.TypedName Syntax.Program
-programProgram = Typed.TypedName (Core.Name "hydra.typeScript.syntax.Program")
-
--- | DSL accessor for the sourceType field of hydra.typeScript.syntax.Program
-programSourceType :: Typed.TypedTerm Syntax.Program -> Typed.TypedTerm Syntax.SourceType
-programSourceType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Program"),
-        Core.projectionFieldName = (Core.Name "sourceType")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the body field of hydra.typeScript.syntax.Program
-programWithBody :: Typed.TypedTerm Syntax.Program -> Typed.TypedTerm [Syntax.ModuleItem] -> Typed.TypedTerm Syntax.Program
-programWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Program"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "sourceType"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Program"),
-              Core.projectionFieldName = (Core.Name "sourceType")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the sourceType field of hydra.typeScript.syntax.Program
-programWithSourceType :: Typed.TypedTerm Syntax.Program -> Typed.TypedTerm Syntax.SourceType -> Typed.TypedTerm Syntax.Program
-programWithSourceType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Program"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Program"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "sourceType"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.Property
-property :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.PropertyKind -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Property
-property key value kind computed shorthand =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Typed.unTypedTerm key)},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm value)},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Typed.unTypedTerm kind)},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Typed.unTypedTerm computed)},
-        Core.Field {
-          Core.fieldName = (Core.Name "shorthand"),
-          Core.fieldTerm = (Typed.unTypedTerm shorthand)}]}))
-
--- | DSL accessor for the computed field of hydra.typeScript.syntax.Property
-propertyComputed :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Bool
-propertyComputed x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-        Core.projectionFieldName = (Core.Name "computed")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the key field of hydra.typeScript.syntax.Property
-propertyKey :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.Expression
-propertyKey x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-        Core.projectionFieldName = (Core.Name "key")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the kind field of hydra.typeScript.syntax.Property
-propertyKind :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.PropertyKind
-propertyKind x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-        Core.projectionFieldName = (Core.Name "kind")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL injection for the get variant of hydra.typeScript.syntax.PropertyKind
-propertyKindGet :: Typed.TypedTerm Syntax.PropertyKind
-propertyKindGet =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertyKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "get"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the init variant of hydra.typeScript.syntax.PropertyKind
-propertyKindInit :: Typed.TypedTerm Syntax.PropertyKind
-propertyKindInit =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertyKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "init"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.typeScript.syntax.PropertyKind
-propertyKindPropertyKind :: Typed.TypedName Syntax.PropertyKind
-propertyKindPropertyKind = Typed.TypedName (Core.Name "hydra.typeScript.syntax.PropertyKind")
-
--- | DSL injection for the set variant of hydra.typeScript.syntax.PropertyKind
-propertyKindSet :: Typed.TypedTerm Syntax.PropertyKind
-propertyKindSet =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertyKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "set"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.typeScript.syntax.Property
-propertyProperty :: Typed.TypedName Syntax.Property
-propertyProperty = Typed.TypedName (Core.Name "hydra.typeScript.syntax.Property")
-
--- | DSL accessor for the shorthand field of hydra.typeScript.syntax.Property
-propertyShorthand :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Bool
-propertyShorthand x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-        Core.projectionFieldName = (Core.Name "shorthand")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for hydra.typeScript.syntax.PropertySignature
-propertySignature :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.PropertySignature
-propertySignature name type_ optional readonly comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Typed.unTypedTerm optional)},
-        Core.Field {
-          Core.fieldName = (Core.Name "readonly"),
-          Core.fieldTerm = (Typed.unTypedTerm readonly)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the comments field of hydra.typeScript.syntax.PropertySignature
-propertySignatureComments :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
-propertySignatureComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.typeScript.syntax.PropertySignature
-propertySignatureName :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Syntax.Identifier
-propertySignatureName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the optional field of hydra.typeScript.syntax.PropertySignature
-propertySignatureOptional :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Bool
-propertySignatureOptional x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-        Core.projectionFieldName = (Core.Name "optional")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.PropertySignature
-propertySignaturePropertySignature :: Typed.TypedName Syntax.PropertySignature
-propertySignaturePropertySignature = Typed.TypedName (Core.Name "hydra.typeScript.syntax.PropertySignature")
-
--- | DSL accessor for the readonly field of hydra.typeScript.syntax.PropertySignature
-propertySignatureReadonly :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Bool
-propertySignatureReadonly x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-        Core.projectionFieldName = (Core.Name "readonly")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.typeScript.syntax.PropertySignature
-propertySignatureType :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Syntax.TypeExpression
-propertySignatureType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the comments field of hydra.typeScript.syntax.PropertySignature
-propertySignatureWithComments :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.PropertySignature
-propertySignatureWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "readonly"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "readonly")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.typeScript.syntax.PropertySignature
-propertySignatureWithName :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.PropertySignature
-propertySignatureWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "readonly"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "readonly")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the optional field of hydra.typeScript.syntax.PropertySignature
-propertySignatureWithOptional :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.PropertySignature
-propertySignatureWithOptional original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "readonly"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "readonly")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the readonly field of hydra.typeScript.syntax.PropertySignature
-propertySignatureWithReadonly :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.PropertySignature
-propertySignatureWithReadonly original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "readonly"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.typeScript.syntax.PropertySignature
-propertySignatureWithType :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.PropertySignature
-propertySignatureWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "optional"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "optional")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "readonly"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "readonly")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.PropertySignature"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL accessor for the value field of hydra.typeScript.syntax.Property
-propertyValue :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.Expression
-propertyValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the computed field of hydra.typeScript.syntax.Property
-propertyWithComputed :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Property
-propertyWithComputed original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "shorthand"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "shorthand")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the key field of hydra.typeScript.syntax.Property
-propertyWithKey :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Property
-propertyWithKey original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "shorthand"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "shorthand")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the kind field of hydra.typeScript.syntax.Property
-propertyWithKind :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.PropertyKind -> Typed.TypedTerm Syntax.Property
-propertyWithKind original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "shorthand"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "shorthand")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the shorthand field of hydra.typeScript.syntax.Property
-propertyWithShorthand :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Property
-propertyWithShorthand original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "shorthand"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the value field of hydra.typeScript.syntax.Property
-propertyWithValue :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Property
-propertyWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "key"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "key")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "computed"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "computed")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "shorthand"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.Property"),
-              Core.projectionFieldName = (Core.Name "shorthand")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.typeScript.syntax.RestElement wrapper
-restElement :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.RestElement
-restElement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.typeScript.syntax.RestElement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.RestElement
-restElementRestElement :: Typed.TypedName Syntax.RestElement
-restElementRestElement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.RestElement")
-
--- | DSL injection for the module variant of hydra.typeScript.syntax.SourceType
-sourceTypeModule :: Typed.TypedTerm Syntax.SourceType
-sourceTypeModule =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.SourceType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "module"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the script variant of hydra.typeScript.syntax.SourceType
-sourceTypeScript :: Typed.TypedTerm Syntax.SourceType
-sourceTypeScript =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.SourceType"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "script"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.typeScript.syntax.SourceType
-sourceTypeSourceType :: Typed.TypedName Syntax.SourceType
-sourceTypeSourceType = Typed.TypedName (Core.Name "hydra.typeScript.syntax.SourceType")
-
--- | DSL constructor for the hydra.typeScript.syntax.SpreadElement wrapper
-spreadElement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SpreadElement
-spreadElement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.typeScript.syntax.SpreadElement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.SpreadElement
-spreadElementSpreadElement :: Typed.TypedName Syntax.SpreadElement
-spreadElementSpreadElement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.SpreadElement")
-
--- | DSL injection for the block variant of hydra.typeScript.syntax.Statement
-statementBlock :: Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.Statement
-statementBlock x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "block"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the break variant of hydra.typeScript.syntax.Statement
-statementBreak :: Typed.TypedTerm Syntax.BreakStatement -> Typed.TypedTerm Syntax.Statement
-statementBreak x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "break"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the classDeclaration variant of hydra.typeScript.syntax.Statement
-statementClassDeclaration :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.Statement
-statementClassDeclaration x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "classDeclaration"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the continue variant of hydra.typeScript.syntax.Statement
-statementContinue :: Typed.TypedTerm Syntax.ContinueStatement -> Typed.TypedTerm Syntax.Statement
-statementContinue x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "continue"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the debugger variant of hydra.typeScript.syntax.Statement
-statementDebugger :: Typed.TypedTerm Syntax.Statement
-statementDebugger =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "debugger"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the doWhile variant of hydra.typeScript.syntax.Statement
-statementDoWhile :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Statement
-statementDoWhile x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "doWhile"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the empty variant of hydra.typeScript.syntax.Statement
-statementEmpty :: Typed.TypedTerm Syntax.Statement
-statementEmpty =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "empty"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the expression variant of hydra.typeScript.syntax.Statement
-statementExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement
-statementExpression x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "expression"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the for variant of hydra.typeScript.syntax.Statement
-statementFor :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Statement
-statementFor x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "for"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the forIn variant of hydra.typeScript.syntax.Statement
-statementForIn :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Statement
-statementForIn x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "forIn"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the forOf variant of hydra.typeScript.syntax.Statement
-statementForOf :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Statement
-statementForOf x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "forOf"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the functionDeclaration variant of hydra.typeScript.syntax.Statement
-statementFunctionDeclaration :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.Statement
-statementFunctionDeclaration x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "functionDeclaration"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the if variant of hydra.typeScript.syntax.Statement
-statementIf :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Statement
-statementIf x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "if"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the labeled variant of hydra.typeScript.syntax.Statement
-statementLabeled :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement
-statementLabeled x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "labeled"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the return variant of hydra.typeScript.syntax.Statement
-statementReturn :: Typed.TypedTerm Syntax.ReturnStatement -> Typed.TypedTerm Syntax.Statement
-statementReturn x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "return"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.Statement
-statementStatement :: Typed.TypedName Syntax.Statement
-statementStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.Statement")
-
--- | DSL injection for the switch variant of hydra.typeScript.syntax.Statement
-statementSwitch :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Statement
-statementSwitch x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "switch"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the throw variant of hydra.typeScript.syntax.Statement
-statementThrow :: Typed.TypedTerm Syntax.ThrowStatement -> Typed.TypedTerm Syntax.Statement
-statementThrow x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "throw"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the try variant of hydra.typeScript.syntax.Statement
-statementTry :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.Statement
-statementTry x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "try"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the variableDeclaration variant of hydra.typeScript.syntax.Statement
-statementVariableDeclaration :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.Statement
-statementVariableDeclaration x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "variableDeclaration"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the while variant of hydra.typeScript.syntax.Statement
-statementWhile :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Statement
-statementWhile x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.Statement"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "while"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL constructor for hydra.typeScript.syntax.StatementWithComments
-statementWithComments :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.StatementWithComments
-statementWithComments body comments =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.StatementWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm comments)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.StatementWithComments
-statementWithCommentsBody :: Typed.TypedTerm Syntax.StatementWithComments -> Typed.TypedTerm Syntax.Statement
-statementWithCommentsBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.StatementWithComments"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the comments field of hydra.typeScript.syntax.StatementWithComments
-statementWithCommentsComments :: Typed.TypedTerm Syntax.StatementWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
-statementWithCommentsComments x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.StatementWithComments"),
-        Core.projectionFieldName = (Core.Name "comments")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.StatementWithComments
-statementWithCommentsStatementWithComments :: Typed.TypedName Syntax.StatementWithComments
-statementWithCommentsStatementWithComments = Typed.TypedName (Core.Name "hydra.typeScript.syntax.StatementWithComments")
-
--- | DSL updater for the body field of hydra.typeScript.syntax.StatementWithComments
-statementWithCommentsWithBody :: Typed.TypedTerm Syntax.StatementWithComments -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.StatementWithComments
-statementWithCommentsWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.StatementWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.StatementWithComments"),
-              Core.projectionFieldName = (Core.Name "comments")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the comments field of hydra.typeScript.syntax.StatementWithComments
-statementWithCommentsWithComments :: Typed.TypedTerm Syntax.StatementWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.StatementWithComments
-statementWithCommentsWithComments original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.StatementWithComments"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.StatementWithComments"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "comments"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.StringLiteral
-stringLiteral :: Typed.TypedTerm String -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.StringLiteral
-stringLiteral value singleQuote =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.StringLiteral"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm value)},
-        Core.Field {
-          Core.fieldName = (Core.Name "singleQuote"),
-          Core.fieldTerm = (Typed.unTypedTerm singleQuote)}]}))
-
--- | DSL accessor for the singleQuote field of hydra.typeScript.syntax.StringLiteral
-stringLiteralSingleQuote :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Bool
-stringLiteralSingleQuote x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.StringLiteral"),
-        Core.projectionFieldName = (Core.Name "singleQuote")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.StringLiteral
-stringLiteralStringLiteral :: Typed.TypedName Syntax.StringLiteral
-stringLiteralStringLiteral = Typed.TypedName (Core.Name "hydra.typeScript.syntax.StringLiteral")
-
--- | DSL accessor for the value field of hydra.typeScript.syntax.StringLiteral
-stringLiteralValue :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm String
-stringLiteralValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.StringLiteral"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the singleQuote field of hydra.typeScript.syntax.StringLiteral
-stringLiteralWithSingleQuote :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.StringLiteral
-stringLiteralWithSingleQuote original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.StringLiteral"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.StringLiteral"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "singleQuote"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the value field of hydra.typeScript.syntax.StringLiteral
-stringLiteralWithValue :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.StringLiteral
-stringLiteralWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.StringLiteral"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "singleQuote"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.StringLiteral"),
-              Core.projectionFieldName = (Core.Name "singleQuote")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.SwitchCase
-switchCase :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.SwitchCase
-switchCase test consequent =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.SwitchCase"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm test)},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Typed.unTypedTerm consequent)}]}))
-
--- | DSL accessor for the consequent field of hydra.typeScript.syntax.SwitchCase
-switchCaseConsequent :: Typed.TypedTerm Syntax.SwitchCase -> Typed.TypedTerm [Syntax.Statement]
-switchCaseConsequent x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.SwitchCase"),
-        Core.projectionFieldName = (Core.Name "consequent")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.SwitchCase
-switchCaseSwitchCase :: Typed.TypedName Syntax.SwitchCase
-switchCaseSwitchCase = Typed.TypedName (Core.Name "hydra.typeScript.syntax.SwitchCase")
-
--- | DSL accessor for the test field of hydra.typeScript.syntax.SwitchCase
-switchCaseTest :: Typed.TypedTerm Syntax.SwitchCase -> Typed.TypedTerm (Maybe Syntax.Expression)
-switchCaseTest x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.SwitchCase"),
-        Core.projectionFieldName = (Core.Name "test")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the consequent field of hydra.typeScript.syntax.SwitchCase
-switchCaseWithConsequent :: Typed.TypedTerm Syntax.SwitchCase -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.SwitchCase
-switchCaseWithConsequent original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.SwitchCase"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.SwitchCase"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the test field of hydra.typeScript.syntax.SwitchCase
-switchCaseWithTest :: Typed.TypedTerm Syntax.SwitchCase -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SwitchCase
-switchCaseWithTest original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.SwitchCase"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "consequent"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.SwitchCase"),
-              Core.projectionFieldName = (Core.Name "consequent")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.SwitchStatement
-switchStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm [Syntax.SwitchCase] -> Typed.TypedTerm Syntax.SwitchStatement
-switchStatement discriminant cases =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.SwitchStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "discriminant"),
-          Core.fieldTerm = (Typed.unTypedTerm discriminant)},
-        Core.Field {
-          Core.fieldName = (Core.Name "cases"),
-          Core.fieldTerm = (Typed.unTypedTerm cases)}]}))
-
--- | DSL accessor for the cases field of hydra.typeScript.syntax.SwitchStatement
-switchStatementCases :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm [Syntax.SwitchCase]
-switchStatementCases x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.SwitchStatement"),
-        Core.projectionFieldName = (Core.Name "cases")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the discriminant field of hydra.typeScript.syntax.SwitchStatement
-switchStatementDiscriminant :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Expression
-switchStatementDiscriminant x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.SwitchStatement"),
-        Core.projectionFieldName = (Core.Name "discriminant")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.SwitchStatement
-switchStatementSwitchStatement :: Typed.TypedName Syntax.SwitchStatement
-switchStatementSwitchStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.SwitchStatement")
-
--- | DSL updater for the cases field of hydra.typeScript.syntax.SwitchStatement
-switchStatementWithCases :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm [Syntax.SwitchCase] -> Typed.TypedTerm Syntax.SwitchStatement
-switchStatementWithCases original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.SwitchStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "discriminant"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.SwitchStatement"),
-              Core.projectionFieldName = (Core.Name "discriminant")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "cases"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the discriminant field of hydra.typeScript.syntax.SwitchStatement
-switchStatementWithDiscriminant :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchStatement
-switchStatementWithDiscriminant original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.SwitchStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "discriminant"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "cases"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.SwitchStatement"),
-              Core.projectionFieldName = (Core.Name "cases")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.TemplateElement
-templateElement :: Typed.TypedTerm String -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.TemplateElement
-templateElement value tail =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TemplateElement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm value)},
-        Core.Field {
-          Core.fieldName = (Core.Name "tail"),
-          Core.fieldTerm = (Typed.unTypedTerm tail)}]}))
-
--- | DSL accessor for the tail field of hydra.typeScript.syntax.TemplateElement
-templateElementTail :: Typed.TypedTerm Syntax.TemplateElement -> Typed.TypedTerm Bool
-templateElementTail x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TemplateElement"),
-        Core.projectionFieldName = (Core.Name "tail")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.TemplateElement
-templateElementTemplateElement :: Typed.TypedName Syntax.TemplateElement
-templateElementTemplateElement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.TemplateElement")
-
--- | DSL accessor for the value field of hydra.typeScript.syntax.TemplateElement
-templateElementValue :: Typed.TypedTerm Syntax.TemplateElement -> Typed.TypedTerm String
-templateElementValue x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TemplateElement"),
-        Core.projectionFieldName = (Core.Name "value")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the tail field of hydra.typeScript.syntax.TemplateElement
-templateElementWithTail :: Typed.TypedTerm Syntax.TemplateElement -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.TemplateElement
-templateElementWithTail original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TemplateElement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TemplateElement"),
-              Core.projectionFieldName = (Core.Name "value")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "tail"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the value field of hydra.typeScript.syntax.TemplateElement
-templateElementWithValue :: Typed.TypedTerm Syntax.TemplateElement -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.TemplateElement
-templateElementWithValue original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TemplateElement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "value"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "tail"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TemplateElement"),
-              Core.projectionFieldName = (Core.Name "tail")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.TemplateLiteral
-templateLiteral :: Typed.TypedTerm [Syntax.TemplateElement] -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.TemplateLiteral
-templateLiteral quasis expressions =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TemplateLiteral"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "quasis"),
-          Core.fieldTerm = (Typed.unTypedTerm quasis)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expressions"),
-          Core.fieldTerm = (Typed.unTypedTerm expressions)}]}))
-
--- | DSL accessor for the expressions field of hydra.typeScript.syntax.TemplateLiteral
-templateLiteralExpressions :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm [Syntax.Expression]
-templateLiteralExpressions x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TemplateLiteral"),
-        Core.projectionFieldName = (Core.Name "expressions")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the quasis field of hydra.typeScript.syntax.TemplateLiteral
-templateLiteralQuasis :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm [Syntax.TemplateElement]
-templateLiteralQuasis x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TemplateLiteral"),
-        Core.projectionFieldName = (Core.Name "quasis")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.TemplateLiteral
-templateLiteralTemplateLiteral :: Typed.TypedName Syntax.TemplateLiteral
-templateLiteralTemplateLiteral = Typed.TypedName (Core.Name "hydra.typeScript.syntax.TemplateLiteral")
-
--- | DSL updater for the expressions field of hydra.typeScript.syntax.TemplateLiteral
-templateLiteralWithExpressions :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.TemplateLiteral
-templateLiteralWithExpressions original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TemplateLiteral"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "quasis"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TemplateLiteral"),
-              Core.projectionFieldName = (Core.Name "quasis")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "expressions"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the quasis field of hydra.typeScript.syntax.TemplateLiteral
-templateLiteralWithQuasis :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm [Syntax.TemplateElement] -> Typed.TypedTerm Syntax.TemplateLiteral
-templateLiteralWithQuasis original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TemplateLiteral"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "quasis"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "expressions"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TemplateLiteral"),
-              Core.projectionFieldName = (Core.Name "expressions")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.typeScript.syntax.ThrowStatement wrapper
-throwStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ThrowStatement
-throwStatement x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.typeScript.syntax.ThrowStatement"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.ThrowStatement
-throwStatementThrowStatement :: Typed.TypedName Syntax.ThrowStatement
-throwStatementThrowStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.ThrowStatement")
-
--- | DSL constructor for hydra.typeScript.syntax.TryStatement
-tryStatement :: Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm (Maybe Syntax.CatchClause) -> Typed.TypedTerm (Maybe Syntax.BlockStatement) -> Typed.TypedTerm Syntax.TryStatement
-tryStatement block handler finalizer =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm block)},
-        Core.Field {
-          Core.fieldName = (Core.Name "handler"),
-          Core.fieldTerm = (Typed.unTypedTerm handler)},
-        Core.Field {
-          Core.fieldName = (Core.Name "finalizer"),
-          Core.fieldTerm = (Typed.unTypedTerm finalizer)}]}))
-
--- | DSL accessor for the block field of hydra.typeScript.syntax.TryStatement
-tryStatementBlock :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.BlockStatement
-tryStatementBlock x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-        Core.projectionFieldName = (Core.Name "block")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the finalizer field of hydra.typeScript.syntax.TryStatement
-tryStatementFinalizer :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm (Maybe Syntax.BlockStatement)
-tryStatementFinalizer x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-        Core.projectionFieldName = (Core.Name "finalizer")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the handler field of hydra.typeScript.syntax.TryStatement
-tryStatementHandler :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm (Maybe Syntax.CatchClause)
-tryStatementHandler x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-        Core.projectionFieldName = (Core.Name "handler")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.TryStatement
-tryStatementTryStatement :: Typed.TypedName Syntax.TryStatement
-tryStatementTryStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.TryStatement")
-
--- | DSL updater for the block field of hydra.typeScript.syntax.TryStatement
-tryStatementWithBlock :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.TryStatement
-tryStatementWithBlock original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "handler"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-              Core.projectionFieldName = (Core.Name "handler")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "finalizer"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-              Core.projectionFieldName = (Core.Name "finalizer")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the finalizer field of hydra.typeScript.syntax.TryStatement
-tryStatementWithFinalizer :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm (Maybe Syntax.BlockStatement) -> Typed.TypedTerm Syntax.TryStatement
-tryStatementWithFinalizer original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "handler"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-              Core.projectionFieldName = (Core.Name "handler")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "finalizer"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the handler field of hydra.typeScript.syntax.TryStatement
-tryStatementWithHandler :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm (Maybe Syntax.CatchClause) -> Typed.TypedTerm Syntax.TryStatement
-tryStatementWithHandler original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "block"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-              Core.projectionFieldName = (Core.Name "block")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "handler"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "finalizer"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TryStatement"),
-              Core.projectionFieldName = (Core.Name "finalizer")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.TypeAliasDeclaration
-typeAliasDeclaration :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeAliasDeclaration
-typeAliasDeclaration name typeParameters type_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm typeParameters)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))
-
--- | DSL accessor for the name field of hydra.typeScript.syntax.TypeAliasDeclaration
-typeAliasDeclarationName :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.Identifier
-typeAliasDeclarationName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.typeScript.syntax.TypeAliasDeclaration
-typeAliasDeclarationType :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.TypeExpression
-typeAliasDeclarationType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.TypeAliasDeclaration
-typeAliasDeclarationTypeAliasDeclaration :: Typed.TypedName Syntax.TypeAliasDeclaration
-typeAliasDeclarationTypeAliasDeclaration = Typed.TypedName (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration")
-
--- | DSL accessor for the typeParameters field of hydra.typeScript.syntax.TypeAliasDeclaration
-typeAliasDeclarationTypeParameters :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
-typeAliasDeclarationTypeParameters x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-        Core.projectionFieldName = (Core.Name "typeParameters")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL updater for the name field of hydra.typeScript.syntax.TypeAliasDeclaration
-typeAliasDeclarationWithName :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeAliasDeclaration
-typeAliasDeclarationWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-              Core.projectionFieldName = (Core.Name "typeParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.typeScript.syntax.TypeAliasDeclaration
-typeAliasDeclarationWithType :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeAliasDeclaration
-typeAliasDeclarationWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-              Core.projectionFieldName = (Core.Name "typeParameters")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the typeParameters field of hydra.typeScript.syntax.TypeAliasDeclaration
-typeAliasDeclarationWithTypeParameters :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.TypeAliasDeclaration
-typeAliasDeclarationWithTypeParameters original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "typeParameters"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for the hydra.typeScript.syntax.TypeAnnotation wrapper
-typeAnnotation :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeAnnotation
-typeAnnotation x =
-    Typed.TypedTerm (Core.TermWrap (Core.WrappedTerm {
-      Core.wrappedTermTypeName = (Core.Name "hydra.typeScript.syntax.TypeAnnotation"),
-      Core.wrappedTermBody = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.TypeAnnotation
-typeAnnotationTypeAnnotation :: Typed.TypedName Syntax.TypeAnnotation
-typeAnnotationTypeAnnotation = Typed.TypedName (Core.Name "hydra.typeScript.syntax.TypeAnnotation")
-
--- | DSL injection for the any variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionAny :: Typed.TypedTerm Syntax.TypeExpression
-typeExpressionAny =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "any"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the array variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionArray :: Typed.TypedTerm Syntax.ArrayTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionArray x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "array"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the function variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionFunction :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionFunction x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "function"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the identifier variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionIdentifier x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "identifier"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the intersection variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionIntersection :: Typed.TypedTerm Syntax.IntersectionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionIntersection x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "intersection"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the literal variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionLiteral x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "literal"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the never variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionNever :: Typed.TypedTerm Syntax.TypeExpression
-typeExpressionNever =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "never"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the object variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionObject :: Typed.TypedTerm Syntax.ObjectTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionObject x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "object"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the optional variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionOptional :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionOptional x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "optional"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the parameterized variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionParameterized :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionParameterized x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "parameterized"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the readonly variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionReadonly :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionReadonly x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "readonly"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the tuple variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionTuple :: Typed.TypedTerm Syntax.TupleTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionTuple x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "tuple"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL name token for hydra.typeScript.syntax.TypeExpression
-typeExpressionTypeExpression :: Typed.TypedName Syntax.TypeExpression
-typeExpressionTypeExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.TypeExpression")
-
--- | DSL injection for the union variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionUnion :: Typed.TypedTerm Syntax.UnionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-typeExpressionUnion x =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "union"),
-        Core.fieldTerm = (Typed.unTypedTerm x)}}))
-
--- | DSL injection for the unknown variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionUnknown :: Typed.TypedTerm Syntax.TypeExpression
-typeExpressionUnknown =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "unknown"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the void variant of hydra.typeScript.syntax.TypeExpression
-typeExpressionVoid :: Typed.TypedTerm Syntax.TypeExpression
-typeExpressionVoid =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeExpression"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "void"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for hydra.typeScript.syntax.TypeParameter
-typeParameter :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm Syntax.TypeParameter
-typeParameter name constraint default_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm name)},
-        Core.Field {
-          Core.fieldName = (Core.Name "constraint"),
-          Core.fieldTerm = (Typed.unTypedTerm constraint)},
-        Core.Field {
-          Core.fieldName = (Core.Name "default"),
-          Core.fieldTerm = (Typed.unTypedTerm default_)}]}))
-
--- | DSL accessor for the constraint field of hydra.typeScript.syntax.TypeParameter
-typeParameterConstraint :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeExpression)
-typeParameterConstraint x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-        Core.projectionFieldName = (Core.Name "constraint")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the default field of hydra.typeScript.syntax.TypeParameter
-typeParameterDefault :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeExpression)
-typeParameterDefault x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-        Core.projectionFieldName = (Core.Name "default")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the name field of hydra.typeScript.syntax.TypeParameter
-typeParameterName :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm Syntax.Identifier
-typeParameterName x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-        Core.projectionFieldName = (Core.Name "name")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.TypeParameter
-typeParameterTypeParameter :: Typed.TypedName Syntax.TypeParameter
-typeParameterTypeParameter = Typed.TypedName (Core.Name "hydra.typeScript.syntax.TypeParameter")
-
--- | DSL updater for the constraint field of hydra.typeScript.syntax.TypeParameter
-typeParameterWithConstraint :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm Syntax.TypeParameter
-typeParameterWithConstraint original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constraint"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "default"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "default")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the default field of hydra.typeScript.syntax.TypeParameter
-typeParameterWithDefault :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm Syntax.TypeParameter
-typeParameterWithDefault original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "name")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "constraint"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "constraint")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "default"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the name field of hydra.typeScript.syntax.TypeParameter
-typeParameterWithName :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeParameter
-typeParameterWithName original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "name"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "constraint"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "constraint")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "default"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypeParameter"),
-              Core.projectionFieldName = (Core.Name "default")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.TypedPattern
-typedPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypedPattern
-typedPattern pattern type_ =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypedPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Typed.unTypedTerm pattern)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm type_)}]}))
-
--- | DSL accessor for the pattern field of hydra.typeScript.syntax.TypedPattern
-typedPatternPattern :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern
-typedPatternPattern x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypedPattern"),
-        Core.projectionFieldName = (Core.Name "pattern")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the type field of hydra.typeScript.syntax.TypedPattern
-typedPatternType :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.TypeExpression
-typedPatternType x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypedPattern"),
-        Core.projectionFieldName = (Core.Name "type")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.TypedPattern
-typedPatternTypedPattern :: Typed.TypedName Syntax.TypedPattern
-typedPatternTypedPattern = Typed.TypedName (Core.Name "hydra.typeScript.syntax.TypedPattern")
-
--- | DSL updater for the pattern field of hydra.typeScript.syntax.TypedPattern
-typedPatternWithPattern :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.TypedPattern
-typedPatternWithPattern original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypedPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypedPattern"),
-              Core.projectionFieldName = (Core.Name "type")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the type field of hydra.typeScript.syntax.TypedPattern
-typedPatternWithType :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypedPattern
-typedPatternWithType original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.TypedPattern"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "pattern"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.TypedPattern"),
-              Core.projectionFieldName = (Core.Name "pattern")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "type"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL accessor for the body of hydra.typeScript.syntax.ArrayTypeExpression
-unArrayTypeExpression :: Typed.TypedTerm Syntax.ArrayTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
-unArrayTypeExpression x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.typeScript.syntax.ArrayTypeExpression")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.typeScript.syntax.Identifier
-unIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm String
-unIdentifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.typeScript.syntax.Identifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.typeScript.syntax.ImportDefaultSpecifier
-unImportDefaultSpecifier :: Typed.TypedTerm Syntax.ImportDefaultSpecifier -> Typed.TypedTerm Syntax.Identifier
-unImportDefaultSpecifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.typeScript.syntax.ImportDefaultSpecifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.typeScript.syntax.ImportNamespaceSpecifier
-unImportNamespaceSpecifier :: Typed.TypedTerm Syntax.ImportNamespaceSpecifier -> Typed.TypedTerm Syntax.Identifier
-unImportNamespaceSpecifier x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.typeScript.syntax.ImportNamespaceSpecifier")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.typeScript.syntax.RestElement
-unRestElement :: Typed.TypedTerm Syntax.RestElement -> Typed.TypedTerm Syntax.Pattern
-unRestElement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.typeScript.syntax.RestElement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.typeScript.syntax.SpreadElement
-unSpreadElement :: Typed.TypedTerm Syntax.SpreadElement -> Typed.TypedTerm Syntax.Expression
-unSpreadElement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.typeScript.syntax.SpreadElement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.typeScript.syntax.ThrowStatement
-unThrowStatement :: Typed.TypedTerm Syntax.ThrowStatement -> Typed.TypedTerm Syntax.Expression
-unThrowStatement x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.typeScript.syntax.ThrowStatement")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the body of hydra.typeScript.syntax.TypeAnnotation
-unTypeAnnotation :: Typed.TypedTerm Syntax.TypeAnnotation -> Typed.TypedTerm Syntax.TypeExpression
-unTypeAnnotation x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermUnwrap (Core.Name "hydra.typeScript.syntax.TypeAnnotation")),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL constructor for hydra.typeScript.syntax.UnaryExpression
-unaryExpression :: Typed.TypedTerm Syntax.UnaryOperator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpression operator argument prefix =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm operator)},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Typed.unTypedTerm argument)},
-        Core.Field {
-          Core.fieldName = (Core.Name "prefix"),
-          Core.fieldTerm = (Typed.unTypedTerm prefix)}]}))
-
--- | DSL accessor for the argument field of hydra.typeScript.syntax.UnaryExpression
-unaryExpressionArgument :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.Expression
-unaryExpressionArgument x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-        Core.projectionFieldName = (Core.Name "argument")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the operator field of hydra.typeScript.syntax.UnaryExpression
-unaryExpressionOperator :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryOperator
-unaryExpressionOperator x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-        Core.projectionFieldName = (Core.Name "operator")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the prefix field of hydra.typeScript.syntax.UnaryExpression
-unaryExpressionPrefix :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Bool
-unaryExpressionPrefix x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-        Core.projectionFieldName = (Core.Name "prefix")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.UnaryExpression
-unaryExpressionUnaryExpression :: Typed.TypedName Syntax.UnaryExpression
-unaryExpressionUnaryExpression = Typed.TypedName (Core.Name "hydra.typeScript.syntax.UnaryExpression")
-
--- | DSL updater for the argument field of hydra.typeScript.syntax.UnaryExpression
-unaryExpressionWithArgument :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpressionWithArgument original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "prefix"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-              Core.projectionFieldName = (Core.Name "prefix")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the operator field of hydra.typeScript.syntax.UnaryExpression
-unaryExpressionWithOperator :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryOperator -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpressionWithOperator original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-              Core.projectionFieldName = (Core.Name "argument")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "prefix"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-              Core.projectionFieldName = (Core.Name "prefix")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the prefix field of hydra.typeScript.syntax.UnaryExpression
-unaryExpressionWithPrefix :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.UnaryExpression
-unaryExpressionWithPrefix original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "operator"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-              Core.projectionFieldName = (Core.Name "operator")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "argument"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryExpression"),
-              Core.projectionFieldName = (Core.Name "argument")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "prefix"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the bitwiseNot variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorBitwiseNot :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorBitwiseNot =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "bitwiseNot"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the decrement variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorDecrement :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorDecrement =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "decrement"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the delete variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorDelete :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorDelete =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "delete"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the increment variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorIncrement :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorIncrement =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "increment"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the negate variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorNegate :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorNegate =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "negate"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the not variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorNot :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorNot =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "not"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the plus variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorPlus :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorPlus =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "plus"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the typeof variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorTypeof :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorTypeof =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "typeof"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.typeScript.syntax.UnaryOperator
-unaryOperatorUnaryOperator :: Typed.TypedName Syntax.UnaryOperator
-unaryOperatorUnaryOperator = Typed.TypedName (Core.Name "hydra.typeScript.syntax.UnaryOperator")
-
--- | DSL injection for the void variant of hydra.typeScript.syntax.UnaryOperator
-unaryOperatorVoid :: Typed.TypedTerm Syntax.UnaryOperator
-unaryOperatorVoid =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.UnaryOperator"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "void"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL constructor for hydra.typeScript.syntax.VariableDeclaration
-variableDeclaration :: Typed.TypedTerm Syntax.VariableKind -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.VariableDeclaration
-variableDeclaration kind declarations =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Typed.unTypedTerm kind)},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarations"),
-          Core.fieldTerm = (Typed.unTypedTerm declarations)}]}))
-
--- | DSL accessor for the declarations field of hydra.typeScript.syntax.VariableDeclaration
-variableDeclarationDeclarations :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator]
-variableDeclarationDeclarations x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclaration"),
-        Core.projectionFieldName = (Core.Name "declarations")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the kind field of hydra.typeScript.syntax.VariableDeclaration
-variableDeclarationKind :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.VariableKind
-variableDeclarationKind x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclaration"),
-        Core.projectionFieldName = (Core.Name "kind")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.VariableDeclaration
-variableDeclarationVariableDeclaration :: Typed.TypedName Syntax.VariableDeclaration
-variableDeclarationVariableDeclaration = Typed.TypedName (Core.Name "hydra.typeScript.syntax.VariableDeclaration")
-
--- | DSL updater for the declarations field of hydra.typeScript.syntax.VariableDeclaration
-variableDeclarationWithDeclarations :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.VariableDeclaration
-variableDeclarationWithDeclarations original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclaration"),
-              Core.projectionFieldName = (Core.Name "kind")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarations"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the kind field of hydra.typeScript.syntax.VariableDeclaration
-variableDeclarationWithKind :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.VariableKind -> Typed.TypedTerm Syntax.VariableDeclaration
-variableDeclarationWithKind original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclaration"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "kind"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "declarations"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclaration"),
-              Core.projectionFieldName = (Core.Name "declarations")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL constructor for hydra.typeScript.syntax.VariableDeclarator
-variableDeclarator :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.VariableDeclarator
-variableDeclarator id init =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm id)},
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Typed.unTypedTerm init)}]}))
-
--- | DSL accessor for the id field of hydra.typeScript.syntax.VariableDeclarator
-variableDeclaratorId :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm Syntax.Pattern
-variableDeclaratorId x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclarator"),
-        Core.projectionFieldName = (Core.Name "id")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the init field of hydra.typeScript.syntax.VariableDeclarator
-variableDeclaratorInit :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm (Maybe Syntax.Expression)
-variableDeclaratorInit x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclarator"),
-        Core.projectionFieldName = (Core.Name "init")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.VariableDeclarator
-variableDeclaratorVariableDeclarator :: Typed.TypedName Syntax.VariableDeclarator
-variableDeclaratorVariableDeclarator = Typed.TypedName (Core.Name "hydra.typeScript.syntax.VariableDeclarator")
-
--- | DSL updater for the id field of hydra.typeScript.syntax.VariableDeclarator
-variableDeclaratorWithId :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.VariableDeclarator
-variableDeclaratorWithId original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclarator"),
-              Core.projectionFieldName = (Core.Name "init")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
-
--- | DSL updater for the init field of hydra.typeScript.syntax.VariableDeclarator
-variableDeclaratorWithInit :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.VariableDeclarator
-variableDeclaratorWithInit original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclarator"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "id"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableDeclarator"),
-              Core.projectionFieldName = (Core.Name "id")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "init"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL injection for the const variant of hydra.typeScript.syntax.VariableKind
-variableKindConst :: Typed.TypedTerm Syntax.VariableKind
-variableKindConst =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "const"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the let variant of hydra.typeScript.syntax.VariableKind
-variableKindLet :: Typed.TypedTerm Syntax.VariableKind
-variableKindLet =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "let"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL injection for the var variant of hydra.typeScript.syntax.VariableKind
-variableKindVar :: Typed.TypedTerm Syntax.VariableKind
-variableKindVar =
-    Typed.TypedTerm (Core.TermInject (Core.Injection {
-      Core.injectionTypeName = (Core.Name "hydra.typeScript.syntax.VariableKind"),
-      Core.injectionField = Core.Field {
-        Core.fieldName = (Core.Name "var"),
-        Core.fieldTerm = Core.TermUnit}}))
-
--- | DSL name token for hydra.typeScript.syntax.VariableKind
-variableKindVariableKind :: Typed.TypedName Syntax.VariableKind
-variableKindVariableKind = Typed.TypedName (Core.Name "hydra.typeScript.syntax.VariableKind")
-
--- | DSL constructor for hydra.typeScript.syntax.WhileStatement
-whileStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.WhileStatement
-whileStatement test body =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.WhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm test)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm body)}]}))
-
--- | DSL accessor for the body field of hydra.typeScript.syntax.WhileStatement
-whileStatementBody :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Statement
-whileStatementBody x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.WhileStatement"),
-        Core.projectionFieldName = (Core.Name "body")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL accessor for the test field of hydra.typeScript.syntax.WhileStatement
-whileStatementTest :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Expression
-whileStatementTest x =
-    Typed.TypedTerm (Core.TermApplication (Core.Application {
-      Core.applicationFunction = (Core.TermProject (Core.Projection {
-        Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.WhileStatement"),
-        Core.projectionFieldName = (Core.Name "test")})),
-      Core.applicationArgument = (Typed.unTypedTerm x)}))
-
--- | DSL name token for hydra.typeScript.syntax.WhileStatement
-whileStatementWhileStatement :: Typed.TypedName Syntax.WhileStatement
-whileStatementWhileStatement = Typed.TypedName (Core.Name "hydra.typeScript.syntax.WhileStatement")
-
--- | DSL updater for the body field of hydra.typeScript.syntax.WhileStatement
-whileStatementWithBody :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.WhileStatement
-whileStatementWithBody original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.WhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.WhileStatement"),
-              Core.projectionFieldName = (Core.Name "test")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))
-
--- | DSL updater for the test field of hydra.typeScript.syntax.WhileStatement
-whileStatementWithTest :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.WhileStatement
-whileStatementWithTest original newVal =
-    Typed.TypedTerm (Core.TermRecord (Core.Record {
-      Core.recordTypeName = (Core.Name "hydra.typeScript.syntax.WhileStatement"),
-      Core.recordFields = [
-        Core.Field {
-          Core.fieldName = (Core.Name "test"),
-          Core.fieldTerm = (Typed.unTypedTerm newVal)},
-        Core.Field {
-          Core.fieldName = (Core.Name "body"),
-          Core.fieldTerm = (Core.TermApplication (Core.Application {
-            Core.applicationFunction = (Core.TermProject (Core.Projection {
-              Core.projectionTypeName = (Core.Name "hydra.typeScript.syntax.WhileStatement"),
-              Core.projectionFieldName = (Core.Name "body")})),
-            Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))
diff --git a/src/main/haskell/Hydra/Overlay/Haskell/Dsl/TypeScript/Helpers.hs b/src/main/haskell/Hydra/Overlay/Haskell/Dsl/TypeScript/Helpers.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/Overlay/Haskell/Dsl/TypeScript/Helpers.hs
+++ /dev/null
@@ -1,623 +0,0 @@
--- | A DSL for constructing TypeScript syntax trees in Haskell.
-module Hydra.Overlay.Haskell.Dsl.TypeScript.Helpers where
-
-import Hydra.TypeScript.Syntax
-import qualified Data.Int as I
-
-
--- * Identifiers
-
--- | Create an identifier
--- Example: ident "foo"
-ident :: String -> Identifier
-ident = Identifier
-
--- | Create a qualified name from a list of strings
--- Example: qualifiedName ["module", "submodule", "name"]
-qualifiedName :: [String] -> QualifiedName
-qualifiedName = fmap Identifier
-
-
--- * Literals
-
--- | Create a string literal with double quotes
--- Example: stringLit "hello"
-stringLit :: String -> Literal
-stringLit s = LiteralString $ StringLiteral s False
-
--- | Create a string literal with single quotes
--- Example: stringLitSingle "hello"
-stringLitSingle :: String -> Literal
-stringLitSingle s = LiteralString $ StringLiteral s True
-
--- | Create an integer literal
--- Example: intLit 42
-intLit :: I.Int64 -> Literal
-intLit = LiteralNumber . NumericLiteralInteger
-
--- | Create a floating-point literal
--- Example: floatLit 3.14
-floatLit :: Double -> Literal
-floatLit = LiteralNumber . NumericLiteralFloat
-
--- | Create a boolean literal
--- Example: boolLit True
-boolLit :: Bool -> Literal
-boolLit = LiteralBoolean
-
--- | The null literal
-nullLit :: Literal
-nullLit = LiteralNull
-
--- | The undefined literal
-undefinedLit :: Literal
-undefinedLit = LiteralUndefined
-
--- | Create a BigInt literal
--- Example: bigIntLit 123
-bigIntLit :: Integer -> Literal
-bigIntLit = LiteralBigInt
-
-
--- * Expressions
-
--- | Create an identifier expression
--- Example: identExpr "foo"
-identExpr :: String -> Expression
-identExpr = ExpressionIdentifier . ident
-
--- | Create a literal expression
--- Example: litExpr (stringLit "hello")
-litExpr :: Literal -> Expression
-litExpr = ExpressionLiteral
-
--- | Create a string expression
--- Example: stringExpr "hello"
-stringExpr :: String -> Expression
-stringExpr = litExpr . stringLit
-
--- | Create an integer expression
--- Example: intExpr 42
-intExpr :: I.Int64 -> Expression
-intExpr = litExpr . intLit
-
--- | Create a floating-point expression
--- Example: floatExpr 3.14
-floatExpr :: Double -> Expression
-floatExpr = litExpr . floatLit
-
--- | Create a boolean expression
--- Example: boolExpr True
-boolExpr :: Bool -> Expression
-boolExpr = litExpr . boolLit
-
--- | The null expression
-nullExpr :: Expression
-nullExpr = litExpr nullLit
-
--- | The undefined expression
-undefinedExpr :: Expression
-undefinedExpr = litExpr undefinedLit
-
--- | Create an array expression
--- Example: arrayExpr [intExpr 1, intExpr 2, intExpr 3]
-arrayExpr :: [Expression] -> Expression
-arrayExpr = ExpressionArray . fmap ArrayElementExpression
-
--- | Create an object expression from key-value pairs
--- Example: objectExpr [("name", stringExpr "John"), ("age", intExpr 30)]
-objectExpr :: [(String, Expression)] -> Expression
-objectExpr pairs = ExpressionObject $ fmap toProperty pairs
-  where
-    toProperty (k, v) = Property (identExpr k) v PropertyKindInit False False
-
--- | Create a function call expression
--- Example: callExpr (identExpr "foo") [intExpr 1, intExpr 2]
-callExpr :: Expression -> [Expression] -> Expression
-callExpr callee args = ExpressionCall $ CallExpression callee args False
-
--- | Create an optional chaining call expression
--- Example: optionalCallExpr (identExpr "foo") [intExpr 1]
-optionalCallExpr :: Expression -> [Expression] -> Expression
-optionalCallExpr callee args = ExpressionCall $ CallExpression callee args True
-
--- | Create a member access expression (obj.prop)
--- Example: memberExpr (identExpr "obj") "prop"
-memberExpr :: Expression -> String -> Expression
-memberExpr obj prop = ExpressionMember $ MemberExpression obj (identExpr prop) False False
-
--- | Create a computed member access expression (obj[expr])
--- Example: computedMemberExpr (identExpr "arr") (intExpr 0)
-computedMemberExpr :: Expression -> Expression -> Expression
-computedMemberExpr obj prop = ExpressionMember $ MemberExpression obj prop True False
-
--- | Create an optional chaining member expression (obj?.prop)
--- Example: optionalMemberExpr (identExpr "obj") "prop"
-optionalMemberExpr :: Expression -> String -> Expression
-optionalMemberExpr obj prop = ExpressionMember $ MemberExpression obj (identExpr prop) False True
-
--- | Create a conditional (ternary) expression
--- Example: condExpr (identExpr "x") (intExpr 1) (intExpr 0)
-condExpr :: Expression -> Expression -> Expression -> Expression
-condExpr test consequent alternate = ExpressionConditional $
-  ConditionalExpression test consequent alternate
-
--- | Create a binary expression
--- Example: binaryExpr BinaryOperatorAdd (intExpr 1) (intExpr 2)
-binaryExpr :: BinaryOperator -> Expression -> Expression -> Expression
-binaryExpr op left right = ExpressionBinary $ BinaryExpression op left right
-
--- | Create an addition expression
--- Example: addExpr (intExpr 1) (intExpr 2)
-addExpr :: Expression -> Expression -> Expression
-addExpr = binaryExpr BinaryOperatorAdd
-
--- | Create a subtraction expression
--- Example: subExpr (intExpr 5) (intExpr 3)
-subExpr :: Expression -> Expression -> Expression
-subExpr = binaryExpr BinaryOperatorSubtract
-
--- | Create a multiplication expression
--- Example: mulExpr (intExpr 3) (intExpr 4)
-mulExpr :: Expression -> Expression -> Expression
-mulExpr = binaryExpr BinaryOperatorMultiply
-
--- | Create a division expression
--- Example: divExpr (intExpr 10) (intExpr 2)
-divExpr :: Expression -> Expression -> Expression
-divExpr = binaryExpr BinaryOperatorDivide
-
--- | Create a strict equality expression (===)
--- Example: eqExpr (identExpr "x") (intExpr 1)
-eqExpr :: Expression -> Expression -> Expression
-eqExpr = binaryExpr BinaryOperatorStrictEqual
-
--- | Create a strict inequality expression (!==)
--- Example: neqExpr (identExpr "x") (intExpr 1)
-neqExpr :: Expression -> Expression -> Expression
-neqExpr = binaryExpr BinaryOperatorStrictNotEqual
-
--- | Create a logical AND expression
--- Example: andExpr (identExpr "a") (identExpr "b")
-andExpr :: Expression -> Expression -> Expression
-andExpr = binaryExpr BinaryOperatorAnd
-
--- | Create a logical OR expression
--- Example: orExpr (identExpr "a") (identExpr "b")
-orExpr :: Expression -> Expression -> Expression
-orExpr = binaryExpr BinaryOperatorOr
-
--- | Create a unary expression
--- Example: unaryExpr UnaryOperatorNot (identExpr "x")
-unaryExpr :: UnaryOperator -> Expression -> Expression
-unaryExpr op arg = ExpressionUnary $ UnaryExpression op arg True
-
--- | Create a logical NOT expression
--- Example: notExpr (identExpr "x")
-notExpr :: Expression -> Expression
-notExpr = unaryExpr UnaryOperatorNot
-
--- | Create a negation expression
--- Example: negateExpr (identExpr "x")
-negateExpr :: Expression -> Expression
-negateExpr = unaryExpr UnaryOperatorNegate
-
--- | Create an assignment expression
--- Example: assignExpr (identPattern "x") (intExpr 42)
-assignExpr :: Pattern -> Expression -> Expression
-assignExpr left right = ExpressionAssignment $
-  AssignmentExpression AssignmentOperatorAssign left right
-
--- | The 'this' expression
-thisExpr :: Expression
-thisExpr = ExpressionThis
-
--- | Create a 'new' expression
--- Example: newExpr (identExpr "Date") []
-newExpr :: Expression -> [Expression] -> Expression
-newExpr callee args = ExpressionNew $ CallExpression callee args False
-
--- | Create an await expression
--- Example: awaitExpr (callExpr (identExpr "fetch") [stringExpr "url"])
-awaitExpr :: Expression -> Expression
-awaitExpr = ExpressionAwait
-
--- | Create a yield expression
--- Example: yieldExpr (Just (intExpr 1))
-yieldExpr :: Maybe Expression -> Expression
-yieldExpr = ExpressionYield
-
--- | Create a spread expression
--- Example: spreadExpr (identExpr "arr")
-spreadExpr :: Expression -> Expression
-spreadExpr = ExpressionSpread . SpreadElement
-
--- | Create a parenthesized expression
--- Example: parenExpr (addExpr (intExpr 1) (intExpr 2))
-parenExpr :: Expression -> Expression
-parenExpr = ExpressionParenthesized
-
-
--- * Arrow Functions
-
--- | Create an arrow function with an expression body
--- Example: arrowExpr ["x", "y"] (addExpr (identExpr "x") (identExpr "y"))
-arrowExpr :: [String] -> Expression -> Expression
-arrowExpr params body = ExpressionArrow $ ArrowFunctionExpression
-  (fmap identPattern params)
-  (ArrowFunctionBodyExpression body)
-  False
-
--- | Create an async arrow function with an expression body
--- Example: asyncArrowExpr ["x"] (awaitExpr (callExpr (identExpr "fetch") [identExpr "x"]))
-asyncArrowExpr :: [String] -> Expression -> Expression
-asyncArrowExpr params body = ExpressionArrow $ ArrowFunctionExpression
-  (fmap identPattern params)
-  (ArrowFunctionBodyExpression body)
-  True
-
--- | Create an arrow function with a block body
--- Example: arrowBlockExpr ["x"] [returnStmt (Just (identExpr "x"))]
-arrowBlockExpr :: [String] -> [Statement] -> Expression
-arrowBlockExpr params body = ExpressionArrow $ ArrowFunctionExpression
-  (fmap identPattern params)
-  (ArrowFunctionBodyBlock body)
-  False
-
-
--- * Patterns
-
--- | Create an identifier pattern
--- Example: identPattern "x"
-identPattern :: String -> Pattern
-identPattern = PatternIdentifier . ident
-
--- | Create an object destructuring pattern
--- Example: objectPattern [identPattern "a", identPattern "b"]
-objectPattern :: [Pattern] -> Pattern
-objectPattern ps = PatternObject $ ObjectPattern $ fmap toProperty ps
-  where
-    toProperty p = case p of
-      PatternIdentifier i -> ObjectPatternPropertyProperty $
-        Property (ExpressionIdentifier i) (ExpressionIdentifier i) PropertyKindInit False True
-      _ -> ObjectPatternPropertyProperty $
-        Property nullExpr (patternToExpr p) PropertyKindInit False False
-    patternToExpr (PatternIdentifier i) = ExpressionIdentifier i
-    patternToExpr _ = nullExpr
-
--- | Create an array destructuring pattern
--- Example: arrayPattern [Just (identPattern "a"), Nothing, Just (identPattern "b")]
-arrayPattern :: [Maybe Pattern] -> Pattern
-arrayPattern = PatternArray
-
--- | Create a rest pattern
--- Example: restPattern "args"
-restPattern :: String -> Pattern
-restPattern = PatternRest . RestElement . identPattern
-
--- | Create a pattern with a default value
--- Example: defaultPattern "x" (intExpr 0)
-defaultPattern :: String -> Expression -> Pattern
-defaultPattern name def = PatternAssignment $
-  AssignmentPattern (identPattern name) def
-
-
--- * Statements
-
--- | Create an expression statement
--- Example: exprStmt (callExpr (identExpr "console.log") [stringExpr "hello"])
-exprStmt :: Expression -> Statement
-exprStmt = StatementExpression
-
--- | Create a block statement
--- Example: blockStmt [exprStmt (intExpr 1), exprStmt (intExpr 2)]
-blockStmt :: [Statement] -> Statement
-blockStmt = StatementBlock
-
--- | Create a return statement
--- Example: returnStmt (Just (intExpr 42))
-returnStmt :: Maybe Expression -> Statement
-returnStmt = StatementReturn
-
--- | Create a throw statement
--- Example: throwStmt (newExpr (identExpr "Error") [stringExpr "oops"])
-throwStmt :: Expression -> Statement
-throwStmt = StatementThrow . ThrowStatement
-
--- | Create a break statement
--- Example: breakStmt Nothing
-breakStmt :: Maybe String -> Statement
-breakStmt = StatementBreak . fmap ident
-
--- | Create a continue statement
--- Example: continueStmt Nothing
-continueStmt :: Maybe String -> Statement
-continueStmt = StatementContinue . fmap ident
-
--- | Create an if statement
--- Example: ifStmt (identExpr "x") (returnStmt (Just (intExpr 1))) Nothing
-ifStmt :: Expression -> Statement -> Maybe Statement -> Statement
-ifStmt test consequent alternate = StatementIf $ IfStatement test consequent alternate
-
--- | Create a while statement
--- Example: whileStmt (boolExpr True) (blockStmt [breakStmt Nothing])
-whileStmt :: Expression -> Statement -> Statement
-whileStmt test body = StatementWhile $ WhileStatement test body
-
--- | Create a for statement
--- Example: forStmt (Just (ForInitVariable (constDecl "i" (intExpr 0)))) (Just (binaryExpr BinaryOperatorLessThan (identExpr "i") (intExpr 10))) (Just (unaryExpr UnaryOperatorIncrement (identExpr "i"))) (blockStmt [])
-forStmt :: Maybe ForInit -> Maybe Expression -> Maybe Expression -> Statement -> Statement
-forStmt init test update body = StatementFor $ ForStatement init test update body
-
--- | Create a for-of statement
--- Example: forOfStmt False (ForInLeftVariable (constDecl "item" Nothing)) (identExpr "items") (blockStmt [])
-forOfStmt :: Bool -> ForInLeft -> Expression -> Statement -> Statement
-forOfStmt await left right body = StatementForOf $ ForOfStatement await left right body
-
--- | Create a try statement
--- Example: tryStmt [exprStmt (callExpr (identExpr "riskyOp") [])] (Just (catchClause (Just (identPattern "e")) [throwStmt (identExpr "e")])) Nothing
-tryStmt :: [Statement] -> Maybe CatchClause -> Maybe [Statement] -> Statement
-tryStmt block handler finalizer = StatementTry $ TryStatement block handler finalizer
-
--- | Create a catch clause
--- Example: catchClause (Just (identPattern "e")) [throwStmt (identExpr "e")]
-catchClause :: Maybe Pattern -> [Statement] -> CatchClause
-catchClause = CatchClause
-
--- | Create a switch statement
--- Example: switchStmt (identExpr "x") [switchCase (Just (intExpr 1)) [returnStmt (Just (stringExpr "one"))], switchCase Nothing [returnStmt (Just (stringExpr "default"))]]
-switchStmt :: Expression -> [SwitchCase] -> Statement
-switchStmt discriminant cases = StatementSwitch $ SwitchStatement discriminant cases
-
--- | Create a switch case
--- Example: switchCase (Just (intExpr 1)) [returnStmt (Just (stringExpr "one"))]
-switchCase :: Maybe Expression -> [Statement] -> SwitchCase
-switchCase = SwitchCase
-
--- | An empty statement
-emptyStmt :: Statement
-emptyStmt = StatementEmpty
-
--- | A debugger statement
-debuggerStmt :: Statement
-debuggerStmt = StatementDebugger
-
-
--- * Variable Declarations
-
--- | Create a const declaration
--- Example: constDecl "x" (Just (intExpr 42))
-constDecl :: String -> Maybe Expression -> VariableDeclaration
-constDecl name init = VariableDeclaration VariableKindConst
-  [VariableDeclarator (identPattern name) init]
-
--- | Create a let declaration
--- Example: letDecl "x" (Just (intExpr 42))
-letDecl :: String -> Maybe Expression -> VariableDeclaration
-letDecl name init = VariableDeclaration VariableKindLet
-  [VariableDeclarator (identPattern name) init]
-
--- | Create a var declaration
--- Example: varDecl "x" (Just (intExpr 42))
-varDecl :: String -> Maybe Expression -> VariableDeclaration
-varDecl name init = VariableDeclaration VariableKindVar
-  [VariableDeclarator (identPattern name) init]
-
--- | Create a variable declaration statement
--- Example: varDeclStmt (constDecl "x" (Just (intExpr 42)))
-varDeclStmt :: VariableDeclaration -> Statement
-varDeclStmt = StatementVariableDeclaration
-
-
--- * Function Declarations
-
--- | Create a function declaration
--- Example: funcDecl "add" ["x", "y"] [returnStmt (Just (addExpr (identExpr "x") (identExpr "y")))]
-funcDecl :: String -> [String] -> [Statement] -> FunctionDeclaration
-funcDecl name params body = FunctionDeclaration
-  (ident name)
-  (fmap identPattern params)
-  body
-  False
-  False
-
--- | Create an async function declaration
--- Example: asyncFuncDecl "fetchData" ["url"] [returnStmt (Just (awaitExpr (callExpr (identExpr "fetch") [identExpr "url"])))]
-asyncFuncDecl :: String -> [String] -> [Statement] -> FunctionDeclaration
-asyncFuncDecl name params body = FunctionDeclaration
-  (ident name)
-  (fmap identPattern params)
-  body
-  True
-  False
-
--- | Create a function declaration statement
--- Example: funcDeclStmt (funcDecl "add" ["x", "y"] [returnStmt (Just (addExpr (identExpr "x") (identExpr "y")))])
-funcDeclStmt :: FunctionDeclaration -> Statement
-funcDeclStmt = StatementFunctionDeclaration
-
-
--- * Class Declarations
-
--- | Create a class declaration
--- Example: classDecl "Person" Nothing [methodDef "greet" [] [returnStmt (Just (stringExpr "hello"))]]
-classDecl :: String -> Maybe Expression -> [MethodDefinition] -> ClassDeclaration
-classDecl name superClass body = ClassDeclaration (ident name) superClass body
-
--- | Create a method definition
--- Example: methodDef "greet" [] [returnStmt (Just (stringExpr "hello"))]
-methodDef :: String -> [String] -> [Statement] -> MethodDefinition
-methodDef name params body = MethodDefinition
-  (identExpr name)
-  (FunctionExpression Nothing (fmap identPattern params) body False False)
-  MethodKindMethod
-  False
-  False
-
--- | Create a constructor definition
--- Example: constructorDef ["name"] [exprStmt (assignExpr (PatternIdentifier (ident "this.name")) (identExpr "name"))]
-constructorDef :: [String] -> [Statement] -> MethodDefinition
-constructorDef params body = MethodDefinition
-  (identExpr "constructor")
-  (FunctionExpression Nothing (fmap identPattern params) body False False)
-  MethodKindConstructor
-  False
-  False
-
--- | Create a static method definition
--- Example: staticMethodDef "create" [] [returnStmt (Just (newExpr (identExpr "Person") []))]
-staticMethodDef :: String -> [String] -> [Statement] -> MethodDefinition
-staticMethodDef name params body = MethodDefinition
-  (identExpr name)
-  (FunctionExpression Nothing (fmap identPattern params) body False False)
-  MethodKindMethod
-  False
-  True
-
--- | Create a class declaration statement
--- Example: classDeclStmt (classDecl "Person" Nothing [])
-classDeclStmt :: ClassDeclaration -> Statement
-classDeclStmt = StatementClassDeclaration
-
-
--- * Module Items
-
--- | Create a statement module item
--- Example: stmtItem (varDeclStmt (constDecl "x" (Just (intExpr 42))))
-stmtItem :: Statement -> ModuleItem
-stmtItem = ModuleItemStatement
-
--- | Create an import declaration
--- Example: importDecl [importNamed "foo" "foo"] "./module.js"
-importDecl :: [ImportClause] -> String -> ImportDeclaration
-importDecl specifiers source = ImportDeclaration specifiers (StringLiteral source False)
-
--- | Create a named import
--- Example: importNamed "foo" "bar"  -- import { foo as bar }
-importNamed :: String -> String -> ImportClause
-importNamed imported local = ImportClauseNamed $
-  ImportSpecifier (ident imported) (ident local)
-
--- | Create a default import
--- Example: importDefault "foo"  -- import foo from ...
-importDefault :: String -> ImportClause
-importDefault = ImportClauseDefault . ImportDefaultSpecifier . ident
-
--- | Create a namespace import
--- Example: importNamespace "foo"  -- import * as foo from ...
-importNamespace :: String -> ImportClause
-importNamespace = ImportClauseNamespace . ImportNamespaceSpecifier . ident
-
--- | Create an import module item
--- Example: importItem (importDecl [importDefault "React"] "react")
-importItem :: ImportDeclaration -> ModuleItem
-importItem = ModuleItemImport
-
--- | Create a named export declaration
--- Example: namedExportDecl [("foo", "foo")] Nothing
-namedExportDecl :: [(String, String)] -> Maybe String -> ExportDeclaration
-namedExportDecl specifiers source = ExportDeclarationNamed $ NamedExport
-  (fmap (\(local, exported) -> ExportSpecifier (ident local) (ident exported)) specifiers)
-  (fmap (\s -> StringLiteral s False) source)
-
--- | Create a default export declaration
--- Example: defaultExportDecl (identExpr "foo")
-defaultExportDecl :: Expression -> ExportDeclaration
-defaultExportDecl = ExportDeclarationDefault
-
--- | Create an export declaration for a statement
--- Example: exportDeclStmt (varDeclStmt (constDecl "x" (Just (intExpr 42))))
-exportDeclStmt :: Statement -> ExportDeclaration
-exportDeclStmt = ExportDeclarationDeclaration
-
--- | Create an export module item
--- Example: exportItem (defaultExportDecl (identExpr "foo"))
-exportItem :: ExportDeclaration -> ModuleItem
-exportItem = ModuleItemExport
-
-
--- * Programs
-
--- | Create a module program
--- Example: moduleProgram [importItem (importDecl [importDefault "foo"] "./foo.js"), stmtItem (varDeclStmt (constDecl "x" (Just (intExpr 42))))]
-moduleProgram :: [ModuleItem] -> Program
-moduleProgram body = Program body SourceTypeModule
-
--- | Create a script program
--- Example: scriptProgram [stmtItem (varDeclStmt (constDecl "x" (Just (intExpr 42))))]
-scriptProgram :: [ModuleItem] -> Program
-scriptProgram body = Program body SourceTypeScript
-
-
--- * Type Expressions
-
--- | Create an identifier type expression
--- Example: identType "string"
-identType :: String -> TypeExpression
-identType = TypeExpressionIdentifier . ident
-
--- | Create an array type expression
--- Example: arrayType (identType "number")
-arrayType :: TypeExpression -> TypeExpression
-arrayType = TypeExpressionArray . ArrayTypeExpression
-
--- | Create a union type expression
--- Example: unionType [identType "string", identType "number"]
-unionType :: [TypeExpression] -> TypeExpression
-unionType = TypeExpressionUnion
-
--- | Create an optional type expression
--- Example: optionalType (identType "string")
-optionalType :: TypeExpression -> TypeExpression
-optionalType = TypeExpressionOptional
-
--- | Create a parameterized type expression
--- Example: paramType (identType "Array") [identType "string"]
-paramType :: TypeExpression -> [TypeExpression] -> TypeExpression
-paramType base args = TypeExpressionParameterized $
-  ParameterizedTypeExpression base args
-
--- | The 'any' type
-anyType :: TypeExpression
-anyType = TypeExpressionAny
-
--- | The 'void' type
-voidType :: TypeExpression
-voidType = TypeExpressionVoid
-
--- | The 'never' type
-neverType :: TypeExpression
-neverType = TypeExpressionNever
-
-
--- * Comments and Documentation
-
--- | Create a line comment
--- Example: lineComment "This is a comment"
-lineComment :: String -> Comment
-lineComment = CommentLine
-
--- | Create a block comment
--- Example: blockComment "This is a\nmultiline comment"
-blockComment :: String -> Comment
-blockComment = CommentBlock
-
--- | Create a documentation comment
--- Example: docComment "Description of the function" [paramTag "x" (Just (identType "number")) "The input value"]
-docComment :: String -> [DocumentationTag] -> Comment
-docComment desc tags = CommentDocumentation $ DocumentationComment desc tags
-
--- | Create a @param documentation tag
--- Example: paramTag "x" (Just (identType "number")) "The input value"
-paramTag :: String -> Maybe TypeExpression -> String -> DocumentationTag
-paramTag name typ desc = DocumentationTag "param" typ (Just $ ident name) desc
-
--- | Create a @returns documentation tag
--- Example: returnsTag (Just (identType "number")) "The result"
-returnsTag :: Maybe TypeExpression -> String -> DocumentationTag
-returnsTag typ desc = DocumentationTag "returns" typ Nothing desc
-
--- | Create a @type documentation tag
--- Example: typeTag (identType "number")
-typeTag :: TypeExpression -> DocumentationTag
-typeTag typ = DocumentationTag "type" (Just typ) Nothing ""
diff --git a/src/main/haskell/Hydra/TypeScript/Coder.hs b/src/main/haskell/Hydra/TypeScript/Coder.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/TypeScript/Coder.hs
+++ /dev/null
@@ -1,1227 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | TypeScript code generator: emits TypeScript type declarations from Hydra modules
-
-module Hydra.TypeScript.Coder where
-
-import qualified Hydra.Analysis as Analysis
-import qualified Hydra.Annotations as Annotations
-import qualified Hydra.Arity as Arity
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Environment as Environment
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Lexical as Lexical
-import qualified Hydra.Overlay.Haskell.Lib.Eithers as Eithers
-import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality
-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
-import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals
-import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic
-import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps
-import qualified Hydra.Overlay.Haskell.Lib.Math as Math
-import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals
-import qualified Hydra.Overlay.Haskell.Lib.Ordering as Ordering
-import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs
-import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets
-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings
-import qualified Hydra.Names as Names
-import qualified Hydra.Packaging as Packaging
-import qualified Hydra.Parsing as Parsing
-import qualified Hydra.Paths as Paths
-import qualified Hydra.Print.Docs as PrintDocs
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Rewriting as Rewriting
-import qualified Hydra.Scoping as Scoping
-import qualified Hydra.Serialization as Serialization
-import qualified Hydra.Sorting as Sorting
-import qualified Hydra.Strip as Strip
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.TypeScript.Language as Language
-import qualified Hydra.TypeScript.Serde as Serde
-import qualified Hydra.TypeScript.Syntax as Syntax
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-import qualified Hydra.Util as Util
-import qualified Hydra.Validation as Validation
-import qualified Hydra.Variables as Variables
-import qualified Hydra.Variants as Variants
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
-import qualified Data.Scientific as Sci
-import Data.Void
-import qualified Data.Map as M
-import qualified Data.Set as S
-
--- | Analyze a term as a TypeScript function, using the Graph as the analysis environment
-analyzeTypeScriptFunction :: Typing.InferenceContext -> Graph.Graph -> Core.Term -> Either t0 (Typing.FunctionStructure Graph.Graph)
-analyzeTypeScriptFunction cx g term = Analysis.analyzeFunctionTerm cx tsEnvGetGraph tsEnvSetGraph g term
-
--- | Collect the bound parameter names from a chain of nested foralls, in outer-to-inner order; stops at the first non-forall type
-collectForallParams :: Core.Type -> [Core.Name]
-collectForallParams t =
-
-      let dt = Strip.deannotateType t
-      in case dt of
-        Core.TypeForall v0 -> Lists.cons (Core.forallTypeParameter v0) (collectForallParams (Core.forallTypeBody v0))
-        _ -> []
-
--- | Collect the names of every type referenced in a type tree that belongs to a different namespace than the current module, for computing the imports needed at the top of the emitted .ts file
-collectImports :: Packaging.ModuleName -> Core.Type -> S.Set Core.Name
-collectImports currentNs t =
-
-      let vars = Variables.freeVariablesInType t
-      in (filterNonLocalNames currentNs vars)
-
--- | Collect type imports referenced inside a term tree (lambda bodies, type applications, let-binding schemes), supplementing the top-level typeScheme walk
-collectInnerTypeImports :: Packaging.ModuleName -> Core.Term -> S.Set Core.Name
-collectInnerTypeImports currentNs term =
-
-      let subs = Rewriting.subterms term
-          ownVars =
-                  case (Strip.deannotateTerm term) of
-                    Core.TermLambda v0 -> Optionals.match (Core.lambdaDomain v0) Sets.empty (\d -> Variables.freeVariablesInType d)
-                    Core.TermTypeApplication v0 -> Variables.freeVariablesInType (Core.typeApplicationTermType v0)
-                    Core.TermTypeLambda _ -> Sets.empty
-                    Core.TermLet v0 -> Lists.foldl (\acc -> \b -> Optionals.match (Core.bindingTypeScheme b) acc (\ts -> Sets.union acc (Variables.freeVariablesInType (Core.typeSchemeBody ts)))) Sets.empty (Core.letBindings v0)
-                    _ -> Sets.empty
-          childVars = Lists.foldl (\acc -> \s -> Sets.union acc (collectInnerTypeImports currentNs s)) Sets.empty subs
-      in (filterNonLocalNames currentNs (Sets.union ownVars childVars))
-
--- | Like collectImports but walks a Term, gathering free term-level variables that resolve to a different module
-collectTermImports :: Packaging.ModuleName -> Core.Term -> S.Set Core.Name
-collectTermImports currentNs t =
-
-      let vars = Variables.freeVariablesInTerm t
-      in (filterNonLocalNames currentNs vars)
-
--- | Decode a canonical decimal digit string into a ((sign, digits), scale) nested pair
-decimalDigitsAndScale :: String -> ((String, String), Int)
-decimalDigitsAndScale s =
-
-      let eParts = Strings.splitOn "e" s
-          mantissa = Optionals.withDefault "" (Lists.head eParts)
-          expText = Optionals.withDefault "" (Lists.head (Lists.drop 1 eParts))
-          expTextUnplussed =
-                  Logic.ifElse (Equality.equal (Optionals.withDefault 0 (Strings.charAt 0 expText)) 43) (Strings.fromList (Lists.drop 1 (Strings.toList expText))) expText
-          expPart = Optionals.withDefault 0 (Literals.parseInt32 expTextUnplussed)
-          isNeg = Equality.equal (Optionals.withDefault 0 (Strings.charAt 0 mantissa)) 45
-          unsigned = Logic.ifElse isNeg (Strings.fromList (Lists.drop 1 (Strings.toList mantissa))) mantissa
-          dotParts = Strings.splitOn "." unsigned
-          intPart = Optionals.withDefault "" (Lists.head dotParts)
-          fracPart = Optionals.withDefault "" (Lists.head (Lists.drop 1 dotParts))
-          rawDigits = Strings.concat2 intPart fracPart
-          rawScale = Math.sub (Strings.length fracPart) expPart
-          sign = Logic.ifElse isNeg "-" ""
-      in (Logic.ifElse (Ordering.lt rawScale 0) ((sign, (Strings.concat2 rawDigits (Strings.fromList (Lists.replicate (Math.negate rawScale) 48)))), 0) ((sign, rawDigits), rawScale))
-
--- | Find the free variables of a term that are referenced eagerly, i.e. outside of any nested lambda body; used to break false dependency cycles caused by DSL-level thunks such as hydra.parsers.lazy
-eagerFreeVariablesInTerm :: Core.Term -> S.Set Core.Name
-eagerFreeVariablesInTerm term =
-
-      let dfltVars =
-              \_ -> Lists.foldl (\s -> \t -> Sets.union s (eagerFreeVariablesInTerm t)) Sets.empty (Rewriting.subterms term)
-      in case term of
-        Core.TermLambda _ -> Sets.empty
-        Core.TermLet v0 -> Sets.difference (dfltVars ()) (Sets.fromList (Lists.map (\b -> Core.bindingName b) (Core.letBindings v0)))
-        Core.TermVariable v0 -> Sets.singleton v0
-        _ -> dfltVars ()
-
--- | Encode a let-binding as a TS statement inside an enclosing function body, hoisting lambda-valued bindings as nested function declarations
-encodeBindingAsStatement :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> Core.Binding -> Syntax.Statement
-encodeBindingAsStatement cx g currentNs b =
-
-      let bname = Core.bindingName b
-          lname = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Names.localNameOf bname)
-          bterm = Core.bindingTerm b
-          dterm = Strip.deannotateTerm bterm
-      in case dterm of
-        Core.TermLambda _ ->
-          let innerFunDecl =
-                  functionDeclarationFromTerm cx g currentNs lname bterm (Optionals.bind (Core.bindingTypeScheme b) (\ts -> Just (Core.typeSchemeBody ts)))
-          in (Syntax.StatementFunctionDeclaration innerFunDecl)
-        _ ->
-          let expr = encodeTerm cx g currentNs bterm
-              declarator =
-                      Syntax.VariableDeclarator {
-                        Syntax.variableDeclaratorId = (Syntax.PatternIdentifier (tsIdent lname)),
-                        Syntax.variableDeclaratorInit = (Just expr)}
-              varDecl =
-                      Syntax.VariableDeclaration {
-                        Syntax.variableDeclarationKind = Syntax.VariableKindConst,
-                        Syntax.variableDeclarationDeclarations = [
-                          declarator]}
-          in (Syntax.StatementVariableDeclaration varDecl)
-
--- | Emit a fully-applied primitive call with selected arguments wrapped in thunks, per a parallel list of laziness flags
-encodeLazyCall :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> Core.Term -> [Core.Term] -> [Bool] -> Syntax.Expression
-encodeLazyCall cx g currentNs headTerm args lazyFlags =
-
-      let headExpr = encodeTerm cx g currentNs headTerm
-          paired = Lists.zip args lazyFlags
-          renderArg =
-                  \p ->
-                    let argTerm = Pairs.first p
-                        isLazy = Pairs.second p
-                        expr = encodeTerm cx g currentNs argTerm
-                    in (Logic.ifElse isLazy (tsArrow [] expr) expr)
-          argExprs = Lists.map renderArg paired
-      in (tsCall headExpr argExprs)
-
--- | Render a Hydra literal as a TypeScript expression
-encodeLiteral :: Core.Literal -> Syntax.Expression
-encodeLiteral lit =
-
-      let litExpr = \lit -> Syntax.ExpressionLiteral lit
-          numLit = \i -> litExpr (Syntax.LiteralNumber (Syntax.NumericLiteralInteger i))
-          floatLit = \f -> litExpr (Syntax.LiteralNumber (Syntax.NumericLiteralFloat f))
-          strLit =
-                  \s -> litExpr (Syntax.LiteralString (Syntax.StringLiteral {
-                    Syntax.stringLiteralValue = s,
-                    Syntax.stringLiteralSingleQuote = False}))
-          boolLit = \b -> litExpr (Syntax.LiteralBoolean b)
-          bigIntCall = \txt -> tsCall (tsExprIdent "BigInt") [
-                strLit txt]
-      in case lit of
-        Core.LiteralBinary v0 -> strLit (Literals.binaryToBase64 v0)
-        Core.LiteralBoolean v0 -> boolLit v0
-        Core.LiteralDecimal v0 ->
-          let parts = decimalDigitsAndScale (Literals.printDecimal v0)
-              signDigits = Pairs.first parts
-              scale = Pairs.second parts
-              coefficientText = Strings.concat2 (Pairs.first signDigits) (Pairs.second signDigits)
-          in (tsObject [
-            ("coefficient", (bigIntCall coefficientText)),
-            ("scale", (numLit (Literals.bigintToInt64 (Literals.int32ToBigint scale))))])
-        Core.LiteralString v0 -> strLit v0
-        Core.LiteralInteger v0 -> case v0 of
-          Core.IntegerValueBigint v1 -> bigIntCall (Literals.printBigint v1)
-          Core.IntegerValueInt8 v1 -> numLit (Literals.bigintToInt64 (Literals.int8ToBigint v1))
-          Core.IntegerValueInt16 v1 -> numLit (Literals.bigintToInt64 (Literals.int16ToBigint v1))
-          Core.IntegerValueInt32 v1 -> numLit (Literals.bigintToInt64 (Literals.int32ToBigint v1))
-          Core.IntegerValueInt64 v1 -> bigIntCall (Literals.printInt64 v1)
-          Core.IntegerValueUint8 v1 -> numLit (Literals.bigintToInt64 (Literals.uint8ToBigint v1))
-          Core.IntegerValueUint16 v1 -> numLit (Literals.bigintToInt64 (Literals.uint16ToBigint v1))
-          Core.IntegerValueUint32 v1 -> numLit (Literals.bigintToInt64 (Literals.uint32ToBigint v1))
-          Core.IntegerValueUint64 v1 -> bigIntCall (Literals.printUint64 v1)
-          _ -> numLit (Literals.bigintToInt64 (Literals.int32ToBigint 0))
-        Core.LiteralFloat v0 -> case v0 of
-          Core.FloatValueFloat32 v1 -> floatLit (Literals.float32ToFloat64 v1)
-          Core.FloatValueFloat64 v1 -> floatLit v1
-          _ -> floatLit 0.0
-        _ -> litExpr Syntax.LiteralNull
-
--- | Map a Hydra literal type to a TypeScript type expression
-encodeLiteralType :: Core.LiteralType -> Syntax.TypeExpression
-encodeLiteralType lt =
-    case lt of
-      Core.LiteralTypeBinary -> tsParamApp1 "ReadonlyArray" (tsNamedType "number")
-      Core.LiteralTypeBoolean -> tsNamedType "boolean"
-      Core.LiteralTypeDecimal -> Syntax.TypeExpressionObject [
-        tsPropSig "coefficient" False (tsNamedType "bigint"),
-        (tsPropSig "scale" False (tsNamedType "number"))]
-      Core.LiteralTypeFloat v0 -> case v0 of
-        Core.FloatTypeFloat32 -> tsNamedType "number"
-        Core.FloatTypeFloat64 -> tsNamedType "number"
-      Core.LiteralTypeInteger v0 -> case v0 of
-        Core.IntegerTypeBigint -> tsNamedType "bigint"
-        Core.IntegerTypeInt8 -> tsNamedType "number"
-        Core.IntegerTypeInt16 -> tsNamedType "number"
-        Core.IntegerTypeInt32 -> tsNamedType "number"
-        Core.IntegerTypeInt64 -> tsNamedType "bigint"
-        Core.IntegerTypeUint8 -> tsNamedType "number"
-        Core.IntegerTypeUint16 -> tsNamedType "number"
-        Core.IntegerTypeUint32 -> tsNamedType "number"
-        Core.IntegerTypeUint64 -> tsNamedType "bigint"
-      Core.LiteralTypeString -> tsNamedType "string"
-
--- | Build a TS function parameter as a pattern, typed unless the domain is the analyze pass's untyped-variable sentinel
-encodeParam :: t0 -> t1 -> Packaging.ModuleName -> Core.Name -> Core.Type -> Syntax.Pattern
-encodeParam cx g currentNs pname dom =
-
-      let nstr = sanitizeParamName pname
-      in case (Strip.deannotateType dom) of
-        Core.TypeVariable _ -> tsTypedIdent nstr Syntax.TypeExpressionAny
-        _ -> tsTypedIdent nstr (encodeTypeOrAny cx g currentNs dom)
-
--- | Render a Hydra term as a TypeScript expression
-encodeTerm :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> Core.Term -> Syntax.Expression
-encodeTerm cx g currentNs term =
-    case term of
-      Core.TermAnnotated v0 -> encodeTerm cx g currentNs (Core.annotatedTermBody v0)
-      Core.TermLiteral v0 -> encodeLiteral v0
-      Core.TermVariable v0 ->
-        let local = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Names.localNameOf v0)
-            varExpr =
-                    Optionals.match (Names.moduleNameOf v0) (tsExprIdent local) (\ns -> Logic.ifElse (Equality.equal (Packaging.unModuleName currentNs) (Packaging.unModuleName ns)) (tsExprIdent local) (
-                      let nsSegs = Lists.drop 1 (Strings.splitOn "." (Packaging.unModuleName ns))
-                          alias = Strings.concat2 "$mod_" (Strings.join "_" nsSegs)
-                      in (tsMember (tsExprIdent alias) local)))
-        in (Optionals.match (Lexical.lookupPrimitive g v0) varExpr (\prim ->
-          let isZeroArityEffect =
-                  Logic.and (Equality.equal (Arity.primitiveArity prim) 0) (Logic.not (Packaging.primitiveDefinitionIsPure (Graph.primitiveDefinition prim)))
-          in (Logic.ifElse isZeroArityEffect (tsCall varExpr []) varExpr)))
-      Core.TermLambda v0 ->
-        let lamTerm = Core.TermLambda v0
-            fsLE = analyzeTypeScriptFunction cx g lamTerm
-            fsL =
-                    Eithers.either (\_err -> Typing.FunctionStructure {
-                      Typing.functionStructureTypeParams = [],
-                      Typing.functionStructureParams = [],
-                      Typing.functionStructureBindings = [],
-                      Typing.functionStructureBody = lamTerm,
-                      Typing.functionStructureDomains = [],
-                      Typing.functionStructureCodomain = Nothing,
-                      Typing.functionStructureEnvironment = g}) (\ok -> ok) fsLE
-            fsLParams = Typing.functionStructureParams fsL
-            fsLDoms = Typing.functionStructureDomains fsL
-            fsLBindings = Typing.functionStructureBindings fsL
-            fsLBody = Typing.functionStructureBody fsL
-            fsLEnv = Typing.functionStructureEnvironment fsL
-            innerBody =
-                    Logic.ifElse (Lists.isEmpty fsLBindings) fsLBody (Core.TermLet (Core.Let {
-                      Core.letBindings = fsLBindings,
-                      Core.letBody = fsLBody}))
-            paramAcc =
-                    Lists.foldl (\acc -> \pn ->
-                      let idx = Pairs.first acc
-                          pats = Pairs.second acc
-                          raw = Names.localNameOf pn
-                          uniq = Logic.ifElse (Equality.equal raw "_") (Strings.concat2 "_" (Literals.printInt32 idx)) raw
-                          pat = tsTypedIdent (Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords uniq) Syntax.TypeExpressionAny
-                      in (Math.add idx 1, (Lists.concat2 pats [
-                        pat]))) (0, []) fsLParams
-            paramPatterns = Pairs.second paramAcc
-            bExpr = encodeTerm cx fsLEnv currentNs innerBody
-        in (tsArrowTyped paramPatterns bExpr)
-      Core.TermApplication v0 ->
-        let asTerm = Core.TermApplication v0
-            flat = flattenApplication asTerm
-            headTerm = Pairs.first flat
-            args = Pairs.second flat
-            mName = termHeadVariable headTerm
-            argc = Lists.length args
-            lazyMaybe =
-                    Optionals.match mName Nothing (\n ->
-                      let lazyFlags = lazyFlagsForPrimitive g n
-                          anyLazy = Lists.foldl (\b -> \f -> Logic.or b f) False lazyFlags
-                      in (Logic.ifElse (Logic.and anyLazy (Equality.equal argc (Lists.length lazyFlags))) (Just (encodeLazyCall cx g currentNs headTerm args lazyFlags)) Nothing))
-        in (Optionals.match lazyMaybe (
-          let dHead = Strip.deannotateAndDetypeTerm headTerm
-              encArgs = Lists.map (encodeTerm cx g currentNs) args
-          in case dHead of
-            Core.TermProject v1 -> Logic.ifElse (Lists.isEmpty encArgs) (
-              let headExpr = encodeTerm cx g currentNs headTerm
-              in headExpr) (
-              let fname = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Core.unName (Core.projectionFieldName v1))
-                  firstA = Optionals.withDefault (tsExprIdent "undefined") (Lists.head encArgs)
-                  restA = Lists.drop 1 encArgs
-                  fieldExpr = tsMember firstA fname
-              in (Logic.ifElse (Lists.isEmpty restA) fieldExpr (tsCall fieldExpr restA)))
-            Core.TermUnwrap _ -> Logic.ifElse (Lists.isEmpty encArgs) (
-              let headExpr = encodeTerm cx g currentNs headTerm
-              in headExpr) (
-              let firstA = Optionals.withDefault (tsExprIdent "undefined") (Lists.head encArgs)
-                  restA = Lists.drop 1 encArgs
-                  valueExpr = tsMember firstA "value"
-              in (Logic.ifElse (Lists.isEmpty restA) valueExpr (tsCall valueExpr restA)))
-            _ ->
-              let headExpr = encodeTerm cx g currentNs headTerm
-              in (tsCall headExpr encArgs)) (\e -> e))
-      Core.TermUnit -> tsUndefined
-      Core.TermList v0 -> tsArray (Lists.map (encodeTerm cx g currentNs) v0)
-      Core.TermSet v0 -> tsNew (tsExprIdent "Set") [
-        tsArray (Lists.map (encodeTerm cx g currentNs) (Sets.toList v0))]
-      Core.TermMap v0 -> tsNew (tsExprIdent "Map") [
-        tsArray (Lists.map (\entry -> tsArray [
-          encodeTerm cx g currentNs (Pairs.first entry),
-          (encodeTerm cx g currentNs (Pairs.second entry))]) (Maps.toList v0))]
-      Core.TermPair v0 -> tsAsAny (tsArray [
-        encodeTerm cx g currentNs (Pairs.first v0),
-        (encodeTerm cx g currentNs (Pairs.second v0))])
-      Core.TermOptional v0 -> Optionals.match v0 (tsAsAny (tsObject [
-        ("tag", (tsExprStr "none"))])) (\v -> tsAsAny (tsObject [
-        ("tag", (tsExprStr "given")),
-        ("value", (encodeTerm cx g currentNs v))]))
-      Core.TermRecord v0 ->
-        let fields = Core.recordFields v0
-        in (tsObject (Lists.map (\f -> (
-          Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Core.unName (Core.fieldName f)),
-          (encodeTerm cx g currentNs (Core.fieldTerm f)))) fields))
-      Core.TermInject v0 ->
-        let fname = Core.unName (Core.fieldName (Core.injectionField v0))
-            fterm = Core.fieldTerm (Core.injectionField v0)
-            isUnit =
-                    case (Strip.deannotateTerm fterm) of
-                      Core.TermUnit -> True
-                      _ -> False
-        in (Logic.ifElse isUnit (tsAsAny (tsObject [
-          ("tag", (tsExprStr fname))])) (tsAsAny (tsObject [
-          ("tag", (tsExprStr fname)),
-          ("value", (encodeTerm cx g currentNs fterm))])))
-      Core.TermWrap v0 -> tsObject [
-        ("value", (encodeTerm cx g currentNs (Core.wrappedTermBody v0)))]
-      Core.TermLet v0 ->
-        let lt2 = thunkLazyLet v0
-            bindings = sortBindingsTopologically (Core.letBindings lt2)
-            body = Core.letBody lt2
-            encodedBody = encodeTerm cx g currentNs body
-            bindingStmts = Lists.map (\b -> encodeBindingAsStatement cx g currentNs b) bindings
-            returnStmt = Syntax.StatementReturn (Just encodedBody)
-            stmts = Lists.concat2 bindingStmts [
-                  returnStmt]
-            iifeArrow =
-                    Syntax.ExpressionArrow (Syntax.ArrowFunctionExpression {
-                      Syntax.arrowFunctionExpressionParams = [],
-                      Syntax.arrowFunctionExpressionBody = (Syntax.ArrowFunctionBodyBlock stmts),
-                      Syntax.arrowFunctionExpressionAsync = False})
-        in (tsCall iifeArrow [])
-      Core.TermTypeApplication v0 -> encodeTerm cx g currentNs (Core.typeApplicationTermBody v0)
-      Core.TermTypeLambda v0 -> encodeTerm cx g currentNs (Core.typeLambdaBody v0)
-      Core.TermProject v0 ->
-        let fname = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Core.unName (Core.projectionFieldName v0))
-        in (tsArrowTyped [
-          tsTypedIdent "x" Syntax.TypeExpressionAny] (tsMember (tsExprIdent "x") fname))
-      Core.TermUnwrap _ -> tsArrowTyped [
-        tsTypedIdent "x" Syntax.TypeExpressionAny] (tsMember (tsExprIdent "x") "value")
-      Core.TermCases v0 ->
-        let armFields = Core.caseStatementCases v0
-            defaultMaybe = Core.caseStatementDefault v0
-            uVar = "u"
-            uExpr = tsAsAny (tsExprIdent uVar)
-            uTag = tsMember uExpr "tag"
-            uValue = tsMember uExpr "value"
-            armCases =
-                    Lists.map (\f ->
-                      let fname = Core.unName (Core.caseAlternativeName f)
-                          armExpr = encodeTerm cx g currentNs (Core.caseAlternativeHandler f)
-                          callExpr = tsCall armExpr [
-                                uValue]
-                      in Syntax.SwitchCase {
-                        Syntax.switchCaseTest = (Just (tsExprStr fname)),
-                        Syntax.switchCaseConsequent = [
-                          Syntax.StatementReturn (Just callExpr)]}) armFields
-            defaultCase =
-                    Optionals.match defaultMaybe (Syntax.SwitchCase {
-                      Syntax.switchCaseTest = Nothing,
-                      Syntax.switchCaseConsequent = [
-                        Syntax.StatementReturn (Just (tsCall (tsExprIdent "(() => { throw new Error('unmatched case'); })") []))]}) (\dt ->
-                      let dExpr = encodeTerm cx g currentNs dt
-                      in Syntax.SwitchCase {
-                        Syntax.switchCaseTest = Nothing,
-                        Syntax.switchCaseConsequent = [
-                          Syntax.StatementReturn (Just dExpr)]})
-            allCases = Lists.concat2 armCases [
-                  defaultCase]
-            switchStmt =
-                    Syntax.StatementSwitch (Syntax.SwitchStatement {
-                      Syntax.switchStatementDiscriminant = uTag,
-                      Syntax.switchStatementCases = allCases})
-        in (Syntax.ExpressionArrow (Syntax.ArrowFunctionExpression {
-          Syntax.arrowFunctionExpressionParams = [
-            Syntax.PatternIdentifier (tsIdent uVar)],
-          Syntax.arrowFunctionExpressionBody = (Syntax.ArrowFunctionBodyBlock [
-            switchStmt]),
-          Syntax.arrowFunctionExpressionAsync = False}))
-      Core.TermEither v0 -> Eithers.either (\l -> tsAsAny (tsObject [
-        ("tag", (tsExprStr "left")),
-        ("value", (encodeTerm cx g currentNs l))])) (\r -> tsAsAny (tsObject [
-        ("tag", (tsExprStr "right")),
-        ("value", (encodeTerm cx g currentNs r))])) v0
-      _ -> tsExprIdent "null"
-
--- | Render a Hydra term definition as a TypeScript module item
-encodeTermDefinition :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> Packaging.TermDefinition -> (Maybe String, Syntax.ModuleItem)
-encodeTermDefinition cx g currentNs td =
-
-      let name = Packaging.termDefinitionName td
-          lname = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Names.localNameOf name)
-          rawTerm = Packaging.termDefinitionBody td
-          mdoc = Eithers.either (\_ -> Nothing) (\x_ -> x_) (Annotations.getTermDescription cx g rawTerm)
-          asExport = \stmt -> Syntax.ModuleItemExport (Syntax.ExportDeclarationDeclaration stmt)
-          mScheme =
-                  Optionals.bind (Packaging.termDefinitionSignature td) (\sig -> Just (Core.typeSchemeBody (Scoping.termSignatureToTypeScheme sig)))
-          dterm = Strip.deannotateTerm rawTerm
-          funDecl = functionDeclarationFromTerm cx g currentNs lname rawTerm mScheme
-          asFunDecl = asExport (Syntax.StatementFunctionDeclaration funDecl)
-          item =
-                  case dterm of
-                    Core.TermLambda _ -> asFunDecl
-                    Core.TermTypeLambda _ -> asFunDecl
-                    _ ->
-                      let expr = encodeTerm cx g currentNs rawTerm
-                          declarator =
-                                  Syntax.VariableDeclarator {
-                                    Syntax.variableDeclaratorId = (Syntax.PatternIdentifier (tsIdent lname)),
-                                    Syntax.variableDeclaratorInit = (Just expr)}
-                          varDecl =
-                                  Syntax.VariableDeclaration {
-                                    Syntax.variableDeclarationKind = Syntax.VariableKindConst,
-                                    Syntax.variableDeclarationDeclarations = [
-                                      declarator]}
-                      in (asExport (Syntax.StatementVariableDeclaration varDecl))
-      in (mdoc, item)
-
--- | Map a Hydra type to a TypeScript type expression
-encodeType :: t0 -> t1 -> Packaging.ModuleName -> Core.Type -> Either t2 Syntax.TypeExpression
-encodeType cx g currentNs t =
-
-      let typ = Strip.deannotateType t
-      in case typ of
-        Core.TypeAnnotated v0 -> encodeType cx g currentNs (Core.annotatedTypeBody v0)
-        Core.TypeApplication v0 ->
-          let fnTyp = Core.applicationTypeFunction v0
-              argTyp = Core.applicationTypeArgument v0
-          in (Eithers.bind (encodeType cx g currentNs fnTyp) (\encFn -> Eithers.bind (encodeType cx g currentNs argTyp) (\encArg -> case encFn of
-            Syntax.TypeExpressionIdentifier _ -> Right (Syntax.TypeExpressionParameterized (Syntax.ParameterizedTypeExpression {
-              Syntax.parameterizedTypeExpressionBase = encFn,
-              Syntax.parameterizedTypeExpressionArguments = [
-                encArg]}))
-            Syntax.TypeExpressionParameterized v1 -> Right (Syntax.TypeExpressionParameterized (Syntax.ParameterizedTypeExpression {
-              Syntax.parameterizedTypeExpressionBase = (Syntax.parameterizedTypeExpressionBase v1),
-              Syntax.parameterizedTypeExpressionArguments = (Lists.concat2 (Syntax.parameterizedTypeExpressionArguments v1) [
-                encArg])}))
-            _ -> Right encFn)))
-        Core.TypeForall v0 -> encodeType cx g currentNs (Core.forallTypeBody v0)
-        Core.TypeUnit -> Right Syntax.TypeExpressionVoid
-        Core.TypeVoid -> Right Syntax.TypeExpressionNever
-        Core.TypeLiteral v0 -> Right (encodeLiteralType v0)
-        Core.TypeList v0 -> Eithers.map (\enc -> tsParamApp1 "ReadonlyArray" enc) (encodeType cx g currentNs v0)
-        Core.TypeSet v0 -> Eithers.map tsReadonlySet (encodeType cx g currentNs v0)
-        Core.TypeMap v0 -> Eithers.bind (encodeType cx g currentNs (Core.mapTypeKeys v0)) (\kt -> Eithers.bind (encodeType cx g currentNs (Core.mapTypeValues v0)) (\vt -> Right (tsReadonlyMap kt vt)))
-        Core.TypeOptional v0 -> Eithers.map (\enc -> Syntax.TypeExpressionUnion [
-          Syntax.TypeExpressionObject [
-            tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
-              Syntax.stringLiteralValue = "given",
-              Syntax.stringLiteralSingleQuote = False}))),
-            (tsPropSig "value" False enc)],
-          (Syntax.TypeExpressionObject [
-            tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
-              Syntax.stringLiteralValue = "none",
-              Syntax.stringLiteralSingleQuote = False})))])]) (encodeType cx g currentNs v0)
-        Core.TypeEither v0 -> Eithers.bind (encodeType cx g currentNs (Core.eitherTypeLeft v0)) (\lt -> Eithers.bind (encodeType cx g currentNs (Core.eitherTypeRight v0)) (\rt ->
-          let leftArm =
-                  Syntax.TypeExpressionObject [
-                    tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
-                      Syntax.stringLiteralValue = "left",
-                      Syntax.stringLiteralSingleQuote = False}))),
-                    (tsPropSig "value" False lt)]
-              rightArm =
-                      Syntax.TypeExpressionObject [
-                        tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
-                          Syntax.stringLiteralValue = "right",
-                          Syntax.stringLiteralSingleQuote = False}))),
-                        (tsPropSig "value" False rt)]
-          in (Right (Syntax.TypeExpressionUnion [
-            leftArm,
-            rightArm]))))
-        Core.TypePair v0 -> Eithers.bind (encodeType cx g currentNs (Core.pairTypeFirst v0)) (\ft -> Eithers.bind (encodeType cx g currentNs (Core.pairTypeSecond v0)) (\st -> Right (tsTuple [
-          ft,
-          st])))
-        Core.TypeFunction v0 -> Eithers.bind (encodeType cx g currentNs (Core.functionTypeDomain v0)) (\dom -> Eithers.bind (encodeType cx g currentNs (Core.functionTypeCodomain v0)) (\cod -> Right (Syntax.TypeExpressionFunction (Syntax.FunctionTypeExpression {
-          Syntax.functionTypeExpressionTypeParameters = [],
-          Syntax.functionTypeExpressionParameters = [
-            dom],
-          Syntax.functionTypeExpressionReturnType = cod}))))
-        Core.TypeVariable v0 ->
-          let lname = Formatting.capitalize (Names.localNameOf v0)
-          in (Optionals.match (Names.moduleNameOf v0) (Right (tsNamedType lname)) (\ns -> Logic.ifElse (Equality.equal (Packaging.unModuleName currentNs) (Packaging.unModuleName ns)) (Right (tsNamedType lname)) (
-            let nsSegs = Lists.drop 1 (Strings.splitOn "." (Packaging.unModuleName ns))
-                typeAlias = Strings.concat2 "$type_" (Strings.join "_" nsSegs)
-            in (Right (tsNamedType (Strings.concat [
-              typeAlias,
-              ".",
-              lname]))))))
-        Core.TypeWrap v0 -> encodeType cx g currentNs v0
-        Core.TypeRecord v0 -> Eithers.bind (Eithers.mapList (\ft ->
-          let fname = Core.unName (Core.fieldTypeName ft)
-              ftyp = Core.fieldTypeType ft
-          in (Eithers.bind (encodeType cx g currentNs ftyp) (\sftyp -> Right (tsPropSig fname False sftyp)))) v0) (\members -> Right (Syntax.TypeExpressionObject members))
-        Core.TypeUnion v0 -> Eithers.bind (Eithers.mapList (\ft ->
-          let fname = Core.unName (Core.fieldTypeName ft)
-              ftyp = Core.fieldTypeType ft
-          in (Eithers.bind (encodeType cx g currentNs ftyp) (\sftyp -> Right (Syntax.TypeExpressionObject [
-            tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
-              Syntax.stringLiteralValue = fname,
-              Syntax.stringLiteralSingleQuote = False}))),
-            (tsPropSig "value" False sftyp)])))) v0) (\arms -> Right (Syntax.TypeExpressionUnion arms))
-
--- | Encode a Hydra type definition as an interface declaration, a discriminated-union type alias, or a plain type alias
-encodeTypeDefinition :: t0 -> Graph.Graph -> Packaging.ModuleName -> Packaging.TypeDefinition -> Either Errors.Error (Maybe String, Syntax.ModuleItem)
-encodeTypeDefinition cx g currentNs tdef =
-
-      let name = Packaging.typeDefinitionName tdef
-          typScheme = Packaging.typeDefinitionBody tdef
-          rawTyp = Core.typeSchemeBody typScheme
-          lname = Formatting.capitalize (Names.localNameOf name)
-      in (Eithers.bind (Annotations.getTypeDescription cx g rawTyp) (\mdoc ->
-        let forallParams = collectForallParams rawTyp
-            typ = stripForalls rawTyp
-            typeParams = Lists.map (\v -> tsParam (Formatting.capitalize (Core.unName v))) forallParams
-            dtyp = Strip.deannotateType typ
-        in case dtyp of
-          Core.TypeRecord v0 -> Eithers.bind (Eithers.mapList (\ft ->
-            let fname = Core.unName (Core.fieldTypeName ft)
-                ftyp = Core.fieldTypeType ft
-            in (Eithers.bind (encodeType cx g currentNs ftyp) (\sftyp -> Eithers.bind (Annotations.commentsFromFieldType cx g ft) (\mfdoc -> Right (tsPropSigWithDoc fname False sftyp (mkDocComment mfdoc)))))) v0) (\members -> Right (
-            mdoc,
-            (Syntax.ModuleItemInterface (Syntax.InterfaceDeclaration {
-              Syntax.interfaceDeclarationName = (tsIdent lname),
-              Syntax.interfaceDeclarationTypeParameters = typeParams,
-              Syntax.interfaceDeclarationExtends = [],
-              Syntax.interfaceDeclarationMembers = members}))))
-          Core.TypeUnion v0 -> Eithers.bind (Eithers.mapList (\ft ->
-            let fname = Core.unName (Core.fieldTypeName ft)
-                ftyp = Core.fieldTypeType ft
-                dtyp2 = Strip.deannotateType ftyp
-            in case dtyp2 of
-              Core.TypeUnit -> Right (Syntax.TypeExpressionObject [
-                tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
-                  Syntax.stringLiteralValue = fname,
-                  Syntax.stringLiteralSingleQuote = False})))])
-              _ -> Eithers.bind (encodeType cx g currentNs ftyp) (\sftyp -> Right (Syntax.TypeExpressionObject [
-                tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
-                  Syntax.stringLiteralValue = fname,
-                  Syntax.stringLiteralSingleQuote = False}))),
-                (tsPropSig "value" False sftyp)]))) v0) (\arms -> Right (
-            mdoc,
-            (Syntax.ModuleItemTypeAlias (Syntax.TypeAliasDeclaration {
-              Syntax.typeAliasDeclarationName = (tsIdent lname),
-              Syntax.typeAliasDeclarationTypeParameters = typeParams,
-              Syntax.typeAliasDeclarationType = (Syntax.TypeExpressionUnion arms)}))))
-          Core.TypeWrap v0 -> Eithers.bind (encodeType cx g currentNs v0) (\sftyp -> Right (
-            mdoc,
-            (Syntax.ModuleItemInterface (Syntax.InterfaceDeclaration {
-              Syntax.interfaceDeclarationName = (tsIdent lname),
-              Syntax.interfaceDeclarationTypeParameters = typeParams,
-              Syntax.interfaceDeclarationExtends = [],
-              Syntax.interfaceDeclarationMembers = [
-                tsPropSig "value" False sftyp]}))))
-          _ -> Eithers.bind (encodeType cx g currentNs typ) (\styp -> Right (
-            mdoc,
-            (Syntax.ModuleItemTypeAlias (Syntax.TypeAliasDeclaration {
-              Syntax.typeAliasDeclarationName = (tsIdent lname),
-              Syntax.typeAliasDeclarationTypeParameters = typeParams,
-              Syntax.typeAliasDeclarationType = styp}))))))
-
--- | Try to encode a Hydra type as a TS type expression, falling back to any if encodeType fails
-encodeTypeOrAny :: t0 -> t1 -> Packaging.ModuleName -> Core.Type -> Syntax.TypeExpression
-encodeTypeOrAny cx g currentNs typ =
-    Eithers.either (\_e -> Syntax.TypeExpressionAny) (\te -> te) (encodeType cx g currentNs typ)
-
--- | Keep only names whose module differs from the current module's
-filterNonLocalNames :: Packaging.ModuleName -> S.Set Core.Name -> S.Set Core.Name
-filterNonLocalNames currentNs names =
-    Sets.fromList (Optionals.givens (Lists.map (\n -> Optionals.match (Names.moduleNameOf n) Nothing (\nameNs -> Logic.ifElse (Equality.equal (Packaging.unModuleName currentNs) (Packaging.unModuleName nameNs)) Nothing (Just n))) (Sets.toList names)))
-
--- | Walk an application spine, returning the innermost head term and its arguments in application order
-flattenApplication :: Core.Term -> (Core.Term, [Core.Term])
-flattenApplication t =
-
-      let dt = Strip.deannotateTerm t
-      in case dt of
-        Core.TermApplication v0 ->
-          let inner = flattenApplication (Core.applicationFunction v0)
-              head_ = Pairs.first inner
-              prevArgs = Pairs.second inner
-          in (head_, (Lists.concat2 prevArgs (Lists.singleton (Core.applicationArgument v0))))
-        _ -> (t, [])
-
--- | Rewrite free occurrences of the given target names from x to x(undefined), forcing a thunked binding created by thunkLazyLet
-forceLazyRefs :: S.Set Core.Name -> Core.Term -> Core.Term
-forceLazyRefs targets0 term0 =
-    Rewriting.rewriteTermWithContext (\recurse0 -> \targets -> \term -> case term of
-      Core.TermVariable v0 -> Logic.ifElse (Sets.member v0 targets) (Core.TermApplication (Core.Application {
-        Core.applicationFunction = (Core.TermVariable v0),
-        Core.applicationArgument = Core.TermUnit})) term
-      Core.TermLambda v0 ->
-        let innerTargets = Sets.delete (Core.lambdaParameter v0) targets
-        in (recurse0 innerTargets term)
-      Core.TermLet v0 ->
-        let boundNames = Sets.fromList (Lists.map Core.bindingName (Core.letBindings v0))
-            innerTargets = Sets.difference targets boundNames
-        in (recurse0 innerTargets term)
-      _ -> recurse0 targets term) targets0 term0
-
--- | Build a TS function declaration from a Hydra term by peeling lambdas and let bindings into explicit parameters, statements, and a body
-functionDeclarationFromTerm :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> String -> Core.Term -> Maybe Core.Type -> Syntax.FunctionDeclaration
-functionDeclarationFromTerm cx g currentNs lname term _mScheme =
-
-      let fsE = analyzeTypeScriptFunction cx g term
-          fs =
-                  Eithers.either (\_err -> Typing.FunctionStructure {
-                    Typing.functionStructureTypeParams = [],
-                    Typing.functionStructureParams = [],
-                    Typing.functionStructureBindings = [],
-                    Typing.functionStructureBody = term,
-                    Typing.functionStructureDomains = [],
-                    Typing.functionStructureCodomain = Nothing,
-                    Typing.functionStructureEnvironment = g}) (\ok -> ok) fsE
-          fsParams = Typing.functionStructureParams fs
-          fsDoms = Typing.functionStructureDomains fs
-          fsBindings0 = Typing.functionStructureBindings fs
-          fsBody0 = Typing.functionStructureBody fs
-          thunked = thunkLazyBindings fsBindings0 fsBody0
-          fsBindings = Pairs.first thunked
-          fsBody = Pairs.second thunked
-          fsEnv = Typing.functionStructureEnvironment fs
-          domPad = Core.TypeVariable (Core.Name "_")
-          fsDomsPadded = Lists.concat2 fsDoms (Lists.replicate (Math.sub (Lists.length fsParams) (Lists.length fsDoms)) domPad)
-          paramPatterns =
-                  Lists.map (\pair -> encodeParam cx fsEnv currentNs (Pairs.first pair) (Pairs.second pair)) (Lists.zip fsParams fsDomsPadded)
-          sortedBindings = sortBindingsTopologically fsBindings
-          bindingStmts = Lists.map (\b -> encodeBindingAsStatement cx fsEnv currentNs b) sortedBindings
-          bodyExpr = encodeTerm cx fsEnv currentNs fsBody
-          returnStmt = Syntax.StatementReturn (Just bodyExpr)
-          block = Lists.concat2 bindingStmts [
-                returnStmt]
-      in Syntax.FunctionDeclaration {
-        Syntax.functionDeclarationId = (tsIdent lname),
-        Syntax.functionDeclarationParams = paramPatterns,
-        Syntax.functionDeclarationBody = block,
-        Syntax.functionDeclarationAsync = False,
-        Syntax.functionDeclarationGenerator = False}
-
--- | Render a set of qualified names as TypeScript import statements grouped by source module
-importsToText :: S.Set String -> String -> Packaging.ModuleName -> S.Set Core.Name -> String
-importsToText overlaySubs kind currentNs names =
-
-      let pairs =
-              Optionals.givens (Lists.map (\n -> Optionals.match (Names.moduleNameOf n) Nothing (\ns -> Logic.ifElse (Equality.equal (Packaging.unModuleName currentNs) (Packaging.unModuleName ns)) Nothing (Just (ns, n)))) (Sets.toList names))
-          transformLocal =
-                  \s -> Logic.ifElse (Equality.equal kind "type") (Formatting.capitalize s) (Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords s)
-          importKeyword = Logic.ifElse (Equality.equal kind "type") "import type" "import"
-          grouped =
-                  Lists.foldl (\acc -> \p ->
-                    let ns = Pairs.first p
-                        n = Pairs.second p
-                        local = transformLocal (Names.localNameOf n)
-                        existing = Optionals.withDefault [] (Maps.lookup ns acc)
-                    in (Maps.insert ns (Lists.cons local existing) acc)) Maps.empty pairs
-          currentSegs = Lists.drop 1 (Strings.splitOn "." (Packaging.unModuleName currentNs))
-          currentDepth = Lists.length currentSegs
-          currentIsTest =
-                  Logic.and (Logic.not (Lists.isEmpty currentSegs)) (Equality.equal (Optionals.withDefault "" (Lists.head currentSegs)) "test")
-          baseUpPrefix =
-                  Logic.ifElse (Equality.equal currentDepth 1) "./" (Strings.concat (Lists.replicate (Math.sub currentDepth 1) "../"))
-          lines =
-                  Lists.map (\entry ->
-                    let ns = Pairs.first entry
-                        locals = Pairs.second entry
-                        targetSegs = Lists.drop 1 (Strings.splitOn "." (Packaging.unModuleName ns))
-                        targetIsTest =
-                                Logic.and (Logic.not (Lists.isEmpty targetSegs)) (Equality.equal (Optionals.withDefault "" (Lists.head targetSegs)) "test")
-                        targetSub = Optionals.withDefault "" (Lists.at 1 targetSegs)
-                        targetPathSegs =
-                                Logic.ifElse (Logic.and (Equality.equal (Optionals.withDefault "" (Lists.head targetSegs)) "lib") (Sets.member targetSub overlaySubs)) (Lists.concat2 [
-                                  "overlay",
-                                  "typescript"] targetSegs) targetSegs
-                        targetPath = Strings.join "/" targetPathSegs
-                        upPrefix =
-                                Logic.ifElse (Logic.and currentIsTest (Logic.not targetIsTest)) (Strings.concat2 baseUpPrefix "../../../main/typescript/hydra/") baseUpPrefix
-                        nsSlug = Strings.join "_" targetSegs
-                        moduleAlias = Logic.ifElse (Equality.equal kind "type") (Strings.concat2 "$type_" nsSlug) (Strings.concat2 "$mod_" nsSlug)
-                    in (Strings.concat [
-                      importKeyword,
-                      " * as ",
-                      moduleAlias,
-                      " from \"",
-                      upPrefix,
-                      targetPath,
-                      ".js\";\n"])) (Maps.toList grouped)
-      in (Strings.concat lines)
-
--- | Look up a primitive by name and return its per-parameter laziness flags in parameter order
-lazyFlagsForPrimitive :: Graph.Graph -> Core.Name -> [Bool]
-lazyFlagsForPrimitive g name =
-    Optionals.match (Maps.lookup name (Graph.graphPrimitives g)) [] (\prim -> Lists.map (\p -> Typing.parameterIsLazy p) (Typing.termSignatureParameters (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition prim))))
-
--- | True when a let-binding's value should be thunked to preserve Haskell's lazy evaluation semantics
-letBindingIsThunkCandidate :: Core.Binding -> Bool
-letBindingIsThunkCandidate b =
-
-      let dterm = Strip.deannotateAndDetypeTerm (Core.bindingTerm b)
-          isLambda =
-                  case dterm of
-                    Core.TermLambda _ -> True
-                    _ -> False
-          freeVars = Variables.freeVariablesInTerm (Core.bindingTerm b)
-          callsShow =
-                  Lists.foldl (\acc -> \n -> Logic.or acc (Optionals.match (Names.moduleNameOf n) False (\mn -> Equality.equal (Lists.take 2 (Strings.splitOn "." (Packaging.unModuleName mn))) [
-                    "hydra",
-                    "show"]))) False (Sets.toList freeVars)
-      in (Logic.and (Logic.not isLambda) callsShow)
-
--- | Build a documentation comment from an optional description string, or nothing if the description is missing or empty
-mkDocComment :: Maybe String -> Maybe Syntax.DocumentationComment
-mkDocComment mdesc =
-    Optionals.match mdesc Nothing (\d -> Logic.ifElse (Equality.equal d "") Nothing (Just (Syntax.DocumentationComment {
-      Syntax.documentationCommentDescription = (PrintDocs.renderDocStringWith tsDocEntityRef d),
-      Syntax.documentationCommentTags = []})))
-
--- | Convert a Hydra module to a map from .ts file path to TypeScript source
-moduleToTypeScript :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map String String)
-moduleToTypeScript overlaySubs mod defs cx g =
-
-      let currentNs = Packaging.moduleName mod
-          partitioned = Environment.partitionDefinitions defs
-          typeDefs = Pairs.first partitioned
-          rawTermDefs = Pairs.second partitioned
-          termDefs = sortTermDefsTopologically currentNs rawTermDefs
-          typeImportsFromTypes =
-                  Lists.foldl (\acc -> \td -> Sets.union acc (collectImports currentNs (Core.typeSchemeBody (Packaging.typeDefinitionBody td)))) Sets.empty typeDefs
-          typeImportsFromTerms =
-                  Lists.foldl (\acc -> \td -> Optionals.match (Packaging.termDefinitionSignature td) acc (\sig -> Sets.union acc (collectImports currentNs (Core.typeSchemeBody (Scoping.termSignatureToTypeScheme sig))))) Sets.empty termDefs
-          typeImportsFromInner =
-                  Lists.foldl (\acc -> \td -> Sets.union acc (collectInnerTypeImports currentNs (Packaging.termDefinitionBody td))) Sets.empty termDefs
-          typeImports = Sets.union (Sets.union typeImportsFromTypes typeImportsFromTerms) typeImportsFromInner
-          termImports =
-                  Lists.foldl (\acc -> \td -> Sets.union acc (collectTermImports currentNs (Packaging.termDefinitionBody td))) Sets.empty termDefs
-          typeImportsBlock = importsToText overlaySubs "type" currentNs typeImports
-          termImportsBlock = importsToText overlaySubs "value" currentNs termImports
-          importsBlock = Strings.concat2 typeImportsBlock termImportsBlock
-      in (Eithers.bind (Eithers.mapList (encodeTypeDefinition cx g currentNs) typeDefs) (\typeItems ->
-        let termItems = Lists.map (encodeTermDefinition cx g currentNs) termDefs
-            allItems = Lists.concat2 typeItems termItems
-            mModuleDoc = Optionals.bind (Packaging.moduleMetadata mod) (\em -> Packaging.entityMetadataDescription em)
-            moduleDocText = Optionals.match mModuleDoc "" (\d -> Strings.concat2 (Serde.toTypeScriptComments d []) "\n\n")
-            header = Strings.concat2 "// Note: this is an automatically generated file. Do not edit.\n\n" moduleDocText
-            renderItem =
-                    \docAndItem ->
-                      let mdoc = Pairs.first docAndItem
-                          item = Pairs.second docAndItem
-                          itemText = printModuleItem item
-                      in (Optionals.match mdoc itemText (\d -> Strings.concat [
-                        Serde.toTypeScriptComments d [],
-                        "\n",
-                        itemText]))
-            body = Strings.join "\n\n" (Lists.map renderItem allItems)
-            filePath = Names.moduleNameToFilePath Util.CaseConventionCamel (File.FileExtension "ts") (Packaging.moduleName mod)
-        in (Right (Maps.singleton filePath (Strings.concat [
-          header,
-          importsBlock,
-          (Logic.ifElse (Equality.equal importsBlock "") "" "\n"),
-          body,
-          (Logic.ifElse (Equality.equal body "") "" "\n")])))))
-
--- | Render an interface declaration
-printInterfaceDeclaration :: Syntax.InterfaceDeclaration -> String
-printInterfaceDeclaration decl =
-
-      let name = Syntax.unIdentifier (Syntax.interfaceDeclarationName decl)
-          params = printTypeParameterList (Syntax.interfaceDeclarationTypeParameters decl)
-          exts = Syntax.interfaceDeclarationExtends decl
-          extClause =
-                  Logic.ifElse (Lists.isEmpty exts) "" (Strings.concat2 " extends " (Strings.join ", " (Lists.map printTypeExpression exts)))
-          members = Syntax.interfaceDeclarationMembers decl
-          renderMember = \ps -> Strings.join "\n  " (Formatting.lines (printPropertySignature ps))
-          body =
-                  Logic.ifElse (Lists.isEmpty members) "" (Strings.concat [
-                    "\n  ",
-                    (Strings.join ";\n  " (Lists.map renderMember members)),
-                    ";\n"])
-      in (Strings.concat [
-        "export interface ",
-        name,
-        params,
-        extClause,
-        " {",
-        body,
-        "}\n"])
-
--- | Render a TypeScript literal as source text
-printLiteral :: Syntax.Literal -> String
-printLiteral lit =
-    case lit of
-      Syntax.LiteralString v0 -> tsEscapeString (Syntax.stringLiteralValue v0)
-      Syntax.LiteralBoolean v0 -> Logic.ifElse v0 "true" "false"
-      Syntax.LiteralNull -> "null"
-      Syntax.LiteralUndefined -> "undefined"
-      _ -> "null"
-
--- | Render a top-level module item
-printModuleItem :: Syntax.ModuleItem -> String
-printModuleItem mi =
-    case mi of
-      Syntax.ModuleItemInterface v0 -> printInterfaceDeclaration v0
-      Syntax.ModuleItemTypeAlias v0 -> printTypeAliasDeclaration v0
-      Syntax.ModuleItemStatement _ -> Serialization.printExpr (Serde.moduleItemToExpr mi)
-      Syntax.ModuleItemImport _ -> Serialization.printExpr (Serde.moduleItemToExpr mi)
-      Syntax.ModuleItemExport _ -> Serialization.printExpr (Serde.moduleItemToExpr mi)
-      _ -> ""
-
--- | Render a property signature, with an optional JSDoc comment prepended
-printPropertySignature :: Syntax.PropertySignature -> String
-printPropertySignature ps =
-
-      let mcomments = Syntax.propertySignatureComments ps
-          line =
-                  Strings.concat [
-                    Logic.ifElse (Syntax.propertySignatureReadonly ps) "readonly " "",
-                    (Syntax.unIdentifier (Syntax.propertySignatureName ps)),
-                    (Logic.ifElse (Syntax.propertySignatureOptional ps) "?" ""),
-                    ": ",
-                    (printTypeExpression (Syntax.propertySignatureType ps))]
-      in (Optionals.match mcomments line (\dc -> Strings.concat [
-        Serde.toTypeScriptComments (Syntax.documentationCommentDescription dc) (Syntax.documentationCommentTags dc),
-        "\n",
-        line]))
-
--- | Render a type alias declaration
-printTypeAliasDeclaration :: Syntax.TypeAliasDeclaration -> String
-printTypeAliasDeclaration decl =
-
-      let name = Syntax.unIdentifier (Syntax.typeAliasDeclarationName decl)
-          params = printTypeParameterList (Syntax.typeAliasDeclarationTypeParameters decl)
-          rhs = printTypeExpression (Syntax.typeAliasDeclarationType decl)
-      in (Strings.concat [
-        "export type ",
-        name,
-        params,
-        " = ",
-        rhs,
-        ";\n"])
-
--- | Render a TypeScript type expression as source text
-printTypeExpression :: Syntax.TypeExpression -> String
-printTypeExpression t =
-    case t of
-      Syntax.TypeExpressionIdentifier v0 -> Syntax.unIdentifier v0
-      Syntax.TypeExpressionLiteral v0 -> printLiteral v0
-      Syntax.TypeExpressionArray v0 -> Strings.concat [
-        "ReadonlyArray<",
-        (printTypeExpression (Syntax.unArrayTypeExpression v0)),
-        ">"]
-      Syntax.TypeExpressionTuple v0 -> Strings.concat [
-        "readonly [",
-        (Strings.join ", " (Lists.map printTypeExpression v0)),
-        "]"]
-      Syntax.TypeExpressionUnion v0 -> Strings.join " | " (Lists.map printTypeExpression v0)
-      Syntax.TypeExpressionIntersection v0 -> Strings.join " & " (Lists.map printTypeExpression v0)
-      Syntax.TypeExpressionParameterized v0 -> Strings.concat [
-        printTypeExpression (Syntax.parameterizedTypeExpressionBase v0),
-        "<",
-        (Strings.join ", " (Lists.map printTypeExpression (Syntax.parameterizedTypeExpressionArguments v0))),
-        ">"]
-      Syntax.TypeExpressionOptional v0 -> Strings.concat [
-        printTypeExpression v0,
-        " | undefined"]
-      Syntax.TypeExpressionReadonly v0 -> Strings.concat2 "readonly " (printTypeExpression v0)
-      Syntax.TypeExpressionObject v0 -> Strings.concat [
-        "{ ",
-        (Strings.join "; " (Lists.map printPropertySignature v0)),
-        " }"]
-      Syntax.TypeExpressionFunction _ -> "((...args: any[]) => any)"
-      Syntax.TypeExpressionAny -> "any"
-      Syntax.TypeExpressionUnknown -> "unknown"
-      Syntax.TypeExpressionVoid -> "void"
-      Syntax.TypeExpressionNever -> "never"
-      _ -> "unknown"
-
--- | Render one generic type parameter, with an optional extends constraint
-printTypeParameter :: Syntax.TypeParameter -> String
-printTypeParameter tp =
-
-      let name = Syntax.unIdentifier (Syntax.typeParameterName tp)
-          constraint = Syntax.typeParameterConstraint tp
-      in (Optionals.match constraint name (\c -> Strings.concat [
-        name,
-        " extends ",
-        (printTypeExpression c)]))
-
--- | Render a generic parameter list, or the empty string when there are no parameters
-printTypeParameterList :: [Syntax.TypeParameter] -> String
-printTypeParameterList tps =
-    Logic.ifElse (Lists.isEmpty tps) "" (Strings.concat [
-      "<",
-      (Strings.join ", " (Lists.map printTypeParameter tps)),
-      ">"])
-
--- | Sanitize a Hydra parameter name into a valid, non-reserved TS identifier
-sanitizeParamName :: Core.Name -> String
-sanitizeParamName n = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Names.localNameOf n)
-
--- | Reorder let-bindings so each appears after the sibling bindings it depends on, avoiding JS temporal-dead-zone errors
-sortBindingsTopologically :: [Core.Binding] -> [Core.Binding]
-sortBindingsTopologically bindings =
-
-      let byName = Maps.fromList (Lists.map (\b -> (Core.bindingName b, b)) bindings)
-          adjacency =
-                  Lists.map (\b ->
-                    let bname = Core.bindingName b
-                        bterm = Core.bindingTerm b
-                        freeVars = Variables.freeVariablesInTerm bterm
-                        deps = Lists.filter (\n -> Maps.member n byName) (Sets.toList freeVars)
-                    in (bname, deps)) bindings
-          sccs = Sorting.topologicalSortComponents adjacency
-      in (Optionals.givens (Lists.map (\n -> Maps.lookup n byName) (Lists.concat sccs)))
-
--- | Reorder term definitions so each appears after the intra-module definitions it depends on
-sortTermDefsTopologically :: t0 -> [Packaging.TermDefinition] -> [Packaging.TermDefinition]
-sortTermDefsTopologically currentNs tdefs =
-
-      let byName = Maps.fromList (Lists.map (\td -> (Packaging.termDefinitionName td, td)) tdefs)
-          adjacency =
-                  Lists.map (\td ->
-                    let tname = Packaging.termDefinitionName td
-                        tterm = Packaging.termDefinitionBody td
-                        freeVars = eagerFreeVariablesInTerm tterm
-                        deps = Lists.filter (\n -> Maps.member n byName) (Sets.toList freeVars)
-                    in (tname, deps)) tdefs
-          sccs = Sorting.topologicalSortComponents adjacency
-      in (Optionals.givens (Lists.map (\n -> Maps.lookup n byName) (Lists.concat sccs)))
-
--- | Strip leading forall quantifiers from a type, returning the innermost body
-stripForalls :: Core.Type -> Core.Type
-stripForalls t =
-
-      let dt = Strip.deannotateType t
-      in case dt of
-        Core.TypeForall v0 -> stripForalls (Core.forallTypeBody v0)
-        _ -> dt
-
--- | If a term reduces, through annotations and type applications, to a variable reference, return its name
-termHeadVariable :: Core.Term -> Maybe Core.Name
-termHeadVariable t =
-
-      let dt = Strip.deannotateTerm t
-      in case dt of
-        Core.TermVariable v0 -> Just v0
-        Core.TermTypeApplication v0 -> termHeadVariable (Core.typeApplicationTermBody v0)
-        _ -> Nothing
-
--- | The bindings-and-body core of thunkLazyLet, shared by the Term_let encoder and the lifted-binding path in functionDeclarationFromTerm
-thunkLazyBindings :: [Core.Binding] -> Core.Term -> ([Core.Binding], Core.Term)
-thunkLazyBindings bindings body =
-
-      let candidates = Lists.filter (\b -> letBindingIsThunkCandidate b) bindings
-      in (Logic.ifElse (Lists.isEmpty candidates) (bindings, body) (
-        let targets = Sets.fromList (Lists.map Core.bindingName candidates)
-            wrapCandidate =
-                    \b -> Logic.ifElse (letBindingIsThunkCandidate b) (Core.Binding {
-                      Core.bindingName = (Core.bindingName b),
-                      Core.bindingTerm = (Core.TermLambda (Core.Lambda {
-                        Core.lambdaParameter = (Core.Name "_"),
-                        Core.lambdaDomain = Nothing,
-                        Core.lambdaBody = (forceLazyRefs targets (Core.bindingTerm b))})),
-                      Core.bindingTypeScheme = (Core.bindingTypeScheme b)}) (Core.Binding {
-                      Core.bindingName = (Core.bindingName b),
-                      Core.bindingTerm = (forceLazyRefs targets (Core.bindingTerm b)),
-                      Core.bindingTypeScheme = (Core.bindingTypeScheme b)})
-        in (Lists.map wrapCandidate bindings, (forceLazyRefs targets body))))
-
--- | Thunk every let-binding for which letBindingIsThunkCandidate holds, and rewrite forced references to it accordingly
-thunkLazyLet :: Core.Let -> Core.Let
-thunkLazyLet lt =
-
-      let result = thunkLazyBindings (Core.letBindings lt) (Core.letBody lt)
-      in Core.Let {
-        Core.letBindings = (Pairs.first result),
-        Core.letBody = (Pairs.second result)}
-
--- | An array expression: [e1, e2, ...]
-tsArray :: [Syntax.Expression] -> Syntax.Expression
-tsArray elems = Syntax.ExpressionArray (Lists.map (\e -> Syntax.ArrayElementExpression e) elems)
-
--- | An untyped arrow function with an expression body
-tsArrow :: [String] -> Syntax.Expression -> Syntax.Expression
-tsArrow params body =
-    Syntax.ExpressionArrow (Syntax.ArrowFunctionExpression {
-      Syntax.arrowFunctionExpressionParams = (Lists.map (\p -> Syntax.PatternIdentifier (tsIdent p)) params),
-      Syntax.arrowFunctionExpressionBody = (Syntax.ArrowFunctionBodyExpression body),
-      Syntax.arrowFunctionExpressionAsync = False})
-
--- | A typed arrow function with typed parameter patterns
-tsArrowTyped :: [Syntax.Pattern] -> Syntax.Expression -> Syntax.Expression
-tsArrowTyped patterns body =
-    Syntax.ExpressionArrow (Syntax.ArrowFunctionExpression {
-      Syntax.arrowFunctionExpressionParams = patterns,
-      Syntax.arrowFunctionExpressionBody = (Syntax.ArrowFunctionBodyExpression body),
-      Syntax.arrowFunctionExpressionAsync = False})
-
--- | Wrap an expression in a TypeScript 'as any' cast
-tsAsAny :: Syntax.Expression -> Syntax.Expression
-tsAsAny e =
-    Syntax.ExpressionAsExpression (Syntax.AsExpression {
-      Syntax.asExpressionExpression = e,
-      Syntax.asExpressionType = Syntax.TypeExpressionAny})
-
--- | A call expression, parenthesizing the callee when it's an arrow function or other ambiguous call target
-tsCall :: Syntax.Expression -> [Syntax.Expression] -> Syntax.Expression
-tsCall callee args =
-    Syntax.ExpressionCall (Syntax.CallExpression {
-      Syntax.callExpressionCallee = callee,
-      Syntax.callExpressionArguments = args,
-      Syntax.callExpressionOptional = False})
-
--- | A conditional (ternary) expression
-tsCond :: Syntax.Expression -> Syntax.Expression -> Syntax.Expression -> Syntax.Expression
-tsCond test cons alt =
-    Syntax.ExpressionConditional (Syntax.ConditionalExpression {
-      Syntax.conditionalExpressionTest = test,
-      Syntax.conditionalExpressionConsequent = cons,
-      Syntax.conditionalExpressionAlternate = alt})
-
--- | Render a 'EntityReference' as TSDoc link syntax
-tsDocEntityRef :: Packaging.EntityReference -> String
-tsDocEntityRef x =
-    case x of
-      Packaging.EntityReferenceDefinition v0 -> Strings.concat2 "{@link " (Strings.concat2 (case v0 of
-        Packaging.DefinitionReferencePrimitive v1 -> Names.localNameOf v1
-        Packaging.DefinitionReferenceTerm v1 -> Names.localNameOf v1
-        Packaging.DefinitionReferenceType v1 -> Names.localNameOf v1) "}")
-      Packaging.EntityReferenceModule v0 -> Packaging.unModuleName v0
-      Packaging.EntityReferencePackage v0 -> Packaging.unPackageName v0
-      Packaging.EntityReferenceTermExpr v0 -> Strings.concat2 "`" (Strings.concat2 v0 "`")
-      Packaging.EntityReferenceTypeExpr v0 -> Strings.concat2 "`" (Strings.concat2 v0 "`")
-
--- | Identity getter for analyzeFunctionTerm when the environment is a Graph
-tsEnvGetGraph :: t0 -> t0
-tsEnvGetGraph g = g
-
--- | Setter for analyzeFunctionTerm when the environment is a Graph
-tsEnvSetGraph :: t0 -> t1 -> t0
-tsEnvSetGraph newG _old = newG
-
--- | Escape a Hydra string for embedding as a double-quoted TypeScript string literal
-tsEscapeString :: String -> String
-tsEscapeString s =
-
-      let escapeChar =
-              \c -> Logic.ifElse (Equality.equal c 34) "\\\"" (Logic.ifElse (Equality.equal c 92) "\\\\" (Logic.ifElse (Equality.equal c 10) "\\n" (Logic.ifElse (Equality.equal c 13) "\\r" (Logic.ifElse (Equality.equal c 9) "\\t" (Logic.ifElse (Equality.equal c 8) "\\b" (Logic.ifElse (Equality.equal c 12) "\\f" (Strings.fromList (Lists.singleton c))))))))
-      in (Strings.concat [
-        "\"",
-        (Strings.concat (Lists.map escapeChar (Strings.toList s))),
-        "\""])
-
--- | A bare identifier expression
-tsExprIdent :: String -> Syntax.Expression
-tsExprIdent s = Syntax.ExpressionIdentifier (tsIdent s)
-
--- | A string-literal expression
-tsExprStr :: String -> Syntax.Expression
-tsExprStr s =
-    Syntax.ExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
-      Syntax.stringLiteralValue = s,
-      Syntax.stringLiteralSingleQuote = False}))
-
--- | Wrap a string into a TypeScript identifier
-tsIdent :: String -> Syntax.Identifier
-tsIdent s = Syntax.Identifier s
-
--- | A member-access expression: obj.prop
-tsMember :: Syntax.Expression -> String -> Syntax.Expression
-tsMember obj prop =
-    Syntax.ExpressionMember (Syntax.MemberExpression {
-      Syntax.memberExpressionObject = obj,
-      Syntax.memberExpressionProperty = (tsExprIdent prop),
-      Syntax.memberExpressionComputed = False,
-      Syntax.memberExpressionOptional = False})
-
--- | A bare named type reference
-tsNamedType :: String -> Syntax.TypeExpression
-tsNamedType n = Syntax.TypeExpressionIdentifier (tsIdent n)
-
--- | A new-expression: new C(args)
-tsNew :: Syntax.Expression -> [Syntax.Expression] -> Syntax.Expression
-tsNew callee args =
-    Syntax.ExpressionNew (Syntax.CallExpression {
-      Syntax.callExpressionCallee = callee,
-      Syntax.callExpressionArguments = args,
-      Syntax.callExpressionOptional = False})
-
--- | An object literal with identifier-style keys
-tsObject :: [(String, Syntax.Expression)] -> Syntax.Expression
-tsObject props =
-    Syntax.ExpressionObject (Lists.map (\kv ->
-      let k = Pairs.first kv
-          v = Pairs.second kv
-      in Syntax.Property {
-        Syntax.propertyKey = (tsExprIdent k),
-        Syntax.propertyValue = v,
-        Syntax.propertyKind = Syntax.PropertyKindInit,
-        Syntax.propertyComputed = False,
-        Syntax.propertyShorthand = False}) props)
-
--- | A generic type parameter with no constraint
-tsParam :: String -> Syntax.TypeParameter
-tsParam n =
-    Syntax.TypeParameter {
-      Syntax.typeParameterName = (tsIdent n),
-      Syntax.typeParameterConstraint = Nothing,
-      Syntax.typeParameterDefault = Nothing}
-
--- | A parameterized type with one type argument
-tsParamApp1 :: String -> Syntax.TypeExpression -> Syntax.TypeExpression
-tsParamApp1 n arg =
-    Syntax.TypeExpressionParameterized (Syntax.ParameterizedTypeExpression {
-      Syntax.parameterizedTypeExpressionBase = (tsNamedType n),
-      Syntax.parameterizedTypeExpressionArguments = [
-        arg]})
-
--- | A parameterized type with two type arguments
-tsParamApp2 :: String -> Syntax.TypeExpression -> Syntax.TypeExpression -> Syntax.TypeExpression
-tsParamApp2 n a b =
-    Syntax.TypeExpressionParameterized (Syntax.ParameterizedTypeExpression {
-      Syntax.parameterizedTypeExpressionBase = (tsNamedType n),
-      Syntax.parameterizedTypeExpressionArguments = [
-        a,
-        b]})
-
--- | Wrap an expression in parentheses when its serialized form needs grouping
-tsParen :: Syntax.Expression -> Syntax.Expression
-tsParen e = Syntax.ExpressionParenthesized e
-
--- | A readonly property signature, with the name sanitized for TS reserved words
-tsPropSig :: String -> Bool -> Syntax.TypeExpression -> Syntax.PropertySignature
-tsPropSig name optional typ = tsPropSigWithDoc name optional typ Nothing
-
--- | A readonly property signature with an optional JSDoc comment above the property line
-tsPropSigWithDoc :: String -> Bool -> Syntax.TypeExpression -> Maybe Syntax.DocumentationComment -> Syntax.PropertySignature
-tsPropSigWithDoc name optional typ mcomments =
-
-      let safe = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords name
-      in Syntax.PropertySignature {
-        Syntax.propertySignatureName = (tsIdent safe),
-        Syntax.propertySignatureType = typ,
-        Syntax.propertySignatureOptional = optional,
-        Syntax.propertySignatureReadonly = True,
-        Syntax.propertySignatureComments = mcomments}
-
--- | A ReadonlyMap type with the given key and value types
-tsReadonlyMap :: Syntax.TypeExpression -> Syntax.TypeExpression -> Syntax.TypeExpression
-tsReadonlyMap k v = tsParamApp2 "ReadonlyMap" k v
-
--- | A ReadonlySet type with the given element type
-tsReadonlySet :: Syntax.TypeExpression -> Syntax.TypeExpression
-tsReadonlySet t = tsParamApp1 "ReadonlySet" t
-
--- | A tuple type
-tsTuple :: [Syntax.TypeExpression] -> Syntax.TypeExpression
-tsTuple ts = Syntax.TypeExpressionTuple ts
-
--- | A typed-identifier pattern for a function parameter with a known domain type
-tsTypedIdent :: String -> Syntax.TypeExpression -> Syntax.Pattern
-tsTypedIdent name typ =
-    Syntax.PatternTyped (Syntax.TypedPattern {
-      Syntax.typedPatternPattern = (Syntax.PatternIdentifier (tsIdent name)),
-      Syntax.typedPatternType = typ})
-
--- | The undefined value as an expression
-tsUndefined :: Syntax.Expression
-tsUndefined = tsExprIdent "undefined"
diff --git a/src/main/haskell/Hydra/TypeScript/Language.hs b/src/main/haskell/Hydra/TypeScript/Language.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/TypeScript/Language.hs
+++ /dev/null
@@ -1,301 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | Language constraints and reserved words for TypeScript 5.x (ECMAScript 2024 base)
-
-module Hydra.TypeScript.Language where
-
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Lexical as Lexical
-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
-import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets
-import qualified Hydra.Packaging as Packaging
-import qualified Hydra.Parsing as Parsing
-import qualified Hydra.Paths as Paths
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-import qualified Hydra.Util as Util
-import qualified Hydra.Validation as Validation
-import qualified Hydra.Variants as Variants
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
-import qualified Data.Scientific as Sci
-import Data.Void
-import qualified Data.Set as S
-
--- | Language constraints for TypeScript 5.x
-typeScriptLanguage :: Coders.Language
-typeScriptLanguage =
-    Coders.Language {
-      Coders.languageName = (Coders.LanguageName "hydra.typeScript"),
-      Coders.languageConstraints = Coders.LanguageConstraints {
-        Coders.languageConstraintsLiteralVariants = literalVariants,
-        Coders.languageConstraintsFloatTypes = floatTypes,
-        Coders.languageConstraintsIntegerTypes = integerTypes,
-        Coders.languageConstraintsTermVariants = termVariants,
-        Coders.languageConstraintsTypeVariants = typeVariants,
-        Coders.languageConstraintsTypes = typePredicate},
-      Coders.languageSupportedFeatures = (Sets.fromList [
-        Coders.LanguageFeatureNestedPolymorphicLetBindings]),
-      Coders.languageCaseConventions = Coders.CaseConventions {
-        Coders.caseConventionsConstant = Util.CaseConventionUpperSnake,
-        Coders.caseConventionsDirectory = Util.CaseConventionLowerSnake,
-        Coders.caseConventionsEnumValue = Util.CaseConventionPascal,
-        Coders.caseConventionsField = Util.CaseConventionCamel,
-        Coders.caseConventionsFile = Util.CaseConventionLowerSnake,
-        Coders.caseConventionsModule = Util.CaseConventionLowerSnake,
-        Coders.caseConventionsTerm = Util.CaseConventionCamel,
-        Coders.caseConventionsTermVariable = Util.CaseConventionCamel,
-        Coders.caseConventionsType = Util.CaseConventionPascal,
-        Coders.caseConventionsTypeVariable = Util.CaseConventionPascal},
-      Coders.languageDefaultFileExtension = (File.FileExtension "ts")}
-  where
-    literalVariants =
-        Sets.fromList [
-          Variants.LiteralVariantBinary,
-          Variants.LiteralVariantBoolean,
-          Variants.LiteralVariantDecimal,
-          Variants.LiteralVariantFloat,
-          Variants.LiteralVariantInteger,
-          Variants.LiteralVariantString]
-    floatTypes = Sets.fromList [
-      Core.FloatTypeFloat64]
-    integerTypes =
-        Sets.fromList [
-          Core.IntegerTypeInt32,
-          Core.IntegerTypeBigint]
-    termVariants =
-        Sets.fromList [
-          Variants.TermVariantAnnotated,
-          Variants.TermVariantApplication,
-          Variants.TermVariantEither,
-          Variants.TermVariantCases,
-          Variants.TermVariantLambda,
-          Variants.TermVariantProject,
-          Variants.TermVariantUnwrap,
-          Variants.TermVariantLet,
-          Variants.TermVariantList,
-          Variants.TermVariantLiteral,
-          Variants.TermVariantMap,
-          Variants.TermVariantOptional,
-          Variants.TermVariantPair,
-          Variants.TermVariantRecord,
-          Variants.TermVariantSet,
-          Variants.TermVariantTypeApplication,
-          Variants.TermVariantTypeLambda,
-          Variants.TermVariantInject,
-          Variants.TermVariantUnit,
-          Variants.TermVariantVariable,
-          Variants.TermVariantWrap]
-    typeVariants =
-        Sets.fromList [
-          Variants.TypeVariantAnnotated,
-          Variants.TypeVariantApplication,
-          Variants.TypeVariantEither,
-          Variants.TypeVariantFunction,
-          Variants.TypeVariantForall,
-          Variants.TypeVariantList,
-          Variants.TypeVariantLiteral,
-          Variants.TypeVariantMap,
-          Variants.TypeVariantOptional,
-          Variants.TypeVariantPair,
-          Variants.TypeVariantRecord,
-          Variants.TypeVariantSet,
-          Variants.TypeVariantUnion,
-          Variants.TypeVariantUnit,
-          Variants.TypeVariantVariable,
-          Variants.TypeVariantVoid,
-          Variants.TypeVariantWrap]
-    typePredicate = \_ -> True
-
--- | A set of reserved words in TypeScript
-typeScriptReservedWords :: S.Set String
-typeScriptReservedWords =
-    Sets.fromList (Lists.concat [
-      keywords,
-      futureReserved,
-      strictModeReserved,
-      typeScriptKeywords,
-      builtIns,
-      hydraTypeScriptKeywords])
-  where
-    keywords =
-        [
-          "await",
-          "break",
-          "case",
-          "catch",
-          "class",
-          "const",
-          "continue",
-          "debugger",
-          "default",
-          "delete",
-          "do",
-          "else",
-          "enum",
-          "export",
-          "extends",
-          "false",
-          "finally",
-          "for",
-          "function",
-          "if",
-          "import",
-          "in",
-          "instanceof",
-          "let",
-          "new",
-          "null",
-          "return",
-          "super",
-          "switch",
-          "this",
-          "throw",
-          "true",
-          "try",
-          "typeof",
-          "undefined",
-          "var",
-          "void",
-          "while",
-          "with",
-          "yield"]
-    futureReserved =
-        [
-          "implements",
-          "interface",
-          "package",
-          "private",
-          "protected",
-          "public"]
-    strictModeReserved =
-        [
-          "arguments",
-          "eval",
-          "static",
-          "yield"]
-    typeScriptKeywords =
-        [
-          "abstract",
-          "as",
-          "asserts",
-          "assert",
-          "any",
-          "boolean",
-          "constructor",
-          "declare",
-          "from",
-          "get",
-          "global",
-          "infer",
-          "intrinsic",
-          "is",
-          "keyof",
-          "module",
-          "namespace",
-          "never",
-          "object",
-          "of",
-          "out",
-          "override",
-          "readonly",
-          "require",
-          "satisfies",
-          "set",
-          "string",
-          "symbol",
-          "type",
-          "unique",
-          "unknown",
-          "using"]
-    builtIns =
-        [
-          "Array",
-          "ArrayBuffer",
-          "BigInt",
-          "Boolean",
-          "DataView",
-          "Date",
-          "Error",
-          "Float32Array",
-          "Float64Array",
-          "Function",
-          "Int8Array",
-          "Int16Array",
-          "Int32Array",
-          "JSON",
-          "Map",
-          "Math",
-          "Number",
-          "Object",
-          "Promise",
-          "Proxy",
-          "Reflect",
-          "RegExp",
-          "Set",
-          "String",
-          "Symbol",
-          "Uint8Array",
-          "Uint8ClampedArray",
-          "Uint16Array",
-          "Uint32Array",
-          "WeakMap",
-          "WeakSet",
-          "decodeURI",
-          "decodeURIComponent",
-          "encodeURI",
-          "encodeURIComponent",
-          "eval",
-          "isFinite",
-          "isNaN",
-          "parseFloat",
-          "parseInt",
-          "console",
-          "document",
-          "global",
-          "globalThis",
-          "module",
-          "process",
-          "require",
-          "window"]
-    hydraTypeScriptKeywords =
-        [
-          "Name",
-          "FrozenMap",
-          "TERM_ANNOTATED",
-          "TERM_APPLICATION",
-          "TERM_EITHER",
-          "TERM_FUNCTION",
-          "TERM_LET",
-          "TERM_LIST",
-          "TERM_LITERAL",
-          "TERM_MAP",
-          "TERM_MAYBE",
-          "TERM_PAIR",
-          "TERM_RECORD",
-          "TERM_SET",
-          "TERM_TYPE_APPLICATION",
-          "TERM_TYPE_LAMBDA",
-          "TERM_UNION",
-          "TERM_UNIT",
-          "TERM_VARIABLE",
-          "TERM_WRAP"]
diff --git a/src/main/haskell/Hydra/TypeScript/Operators.hs b/src/main/haskell/Hydra/TypeScript/Operators.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/TypeScript/Operators.hs
+++ /dev/null
@@ -1,196 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | AST operators for TypeScript with precedence and associativity
-
-module Hydra.TypeScript.Operators where
-
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Core as Core
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Packaging as Packaging
-import qualified Hydra.Parsing as Parsing
-import qualified Hydra.Paths as Paths
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Serialization as Serialization
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-import qualified Hydra.Util as Util
-import qualified Hydra.Validation as Validation
-import qualified Hydra.Variants as Variants
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
-import qualified Data.Scientific as Sci
-import Data.Void
-
--- | Addition operator (+)
-addOp :: Ast.Op
-addOp = Serialization.op "+" 14 Ast.AssociativityLeft
-
--- | Function application (whitespace)
-appOp :: Ast.Op
-appOp =
-    Ast.Op {
-      Ast.opSymbol = (Ast.Symbol ""),
-      Ast.opPadding = Ast.Padding {
-        Ast.paddingLeft = Ast.WsNone,
-        Ast.paddingRight = Ast.WsNone},
-      Ast.opPrecedence = (Ast.Precedence 20),
-      Ast.opAssociativity = Ast.AssociativityLeft}
-
--- | Arrow function operator (=>)
-arrowOp :: Ast.Op
-arrowOp = Serialization.op "=>" 2 Ast.AssociativityRight
-
--- | Assignment operator (=)
-assignOp :: Ast.Op
-assignOp = Serialization.op "=" 2 Ast.AssociativityRight
-
--- | Bitwise AND operator (&)
-bitwiseAndOp :: Ast.Op
-bitwiseAndOp = Serialization.op "&" 10 Ast.AssociativityLeft
-
--- | Bitwise OR operator (|)
-bitwiseOrOp :: Ast.Op
-bitwiseOrOp = Serialization.op "|" 8 Ast.AssociativityLeft
-
--- | Bitwise XOR operator (^)
-bitwiseXorOp :: Ast.Op
-bitwiseXorOp = Serialization.op "^" 9 Ast.AssociativityLeft
-
--- | Type annotation colon (:)
-colonOp :: Ast.Op
-colonOp = Serialization.op ":" 0 Ast.AssociativityNone
-
--- | Comma operator (,)
-commaOp :: Ast.Op
-commaOp = Serialization.op "," 1 Ast.AssociativityLeft
-
--- | Definition operator (= in const x = ...)
-defineOp :: Ast.Op
-defineOp = Serialization.op "=" 0 Ast.AssociativityNone
-
--- | Division operator (/)
-divideOp :: Ast.Op
-divideOp = Serialization.op "/" 15 Ast.AssociativityLeft
-
--- | Equality operator (==)
-equalOp :: Ast.Op
-equalOp = Serialization.op "==" 11 Ast.AssociativityLeft
-
--- | Exponentiation operator (**)
-exponentiateOp :: Ast.Op
-exponentiateOp = Serialization.op "**" 16 Ast.AssociativityRight
-
--- | Greater than operator (>)
-greaterThanOp :: Ast.Op
-greaterThanOp = Serialization.op ">" 12 Ast.AssociativityLeft
-
--- | Greater than or equal operator (>=)
-greaterThanOrEqualOp :: Ast.Op
-greaterThanOrEqualOp = Serialization.op ">=" 12 Ast.AssociativityLeft
-
--- | In operator (in)
-inOp :: Ast.Op
-inOp = Serialization.op "in" 12 Ast.AssociativityLeft
-
--- | Instance of operator (instanceof)
-instanceOfOp :: Ast.Op
-instanceOfOp = Serialization.op "instanceof" 12 Ast.AssociativityLeft
-
--- | Left shift operator (<<)
-leftShiftOp :: Ast.Op
-leftShiftOp = Serialization.op "<<" 13 Ast.AssociativityLeft
-
--- | Less than operator (<)
-lessThanOp :: Ast.Op
-lessThanOp = Serialization.op "<" 12 Ast.AssociativityLeft
-
--- | Less than or equal operator (<=)
-lessThanOrEqualOp :: Ast.Op
-lessThanOrEqualOp = Serialization.op "<=" 12 Ast.AssociativityLeft
-
--- | Logical AND operator (&&)
-logicalAndOp :: Ast.Op
-logicalAndOp = Serialization.op "&&" 6 Ast.AssociativityLeft
-
--- | Logical OR operator (||)
-logicalOrOp :: Ast.Op
-logicalOrOp = Serialization.op "||" 5 Ast.AssociativityLeft
-
--- | Member access operator (.)
-memberOp :: Ast.Op
-memberOp =
-    Ast.Op {
-      Ast.opSymbol = (Ast.Symbol "."),
-      Ast.opPadding = Ast.Padding {
-        Ast.paddingLeft = Ast.WsNone,
-        Ast.paddingRight = Ast.WsNone},
-      Ast.opPrecedence = (Ast.Precedence 20),
-      Ast.opAssociativity = Ast.AssociativityLeft}
-
--- | Modulo operator (%)
-moduloOp :: Ast.Op
-moduloOp = Serialization.op "%" 15 Ast.AssociativityLeft
-
--- | Multiplication operator (*)
-multiplyOp :: Ast.Op
-multiplyOp = Serialization.op "*" 15 Ast.AssociativityLeft
-
--- | Inequality operator (!=)
-notEqualOp :: Ast.Op
-notEqualOp = Serialization.op "!=" 11 Ast.AssociativityLeft
-
--- | Nullish coalescing operator (??)
-nullishCoalescingOp :: Ast.Op
-nullishCoalescingOp = Serialization.op "??" 4 Ast.AssociativityLeft
-
--- | Optional chaining operator (?.)
-optionalChainOp :: Ast.Op
-optionalChainOp =
-    Ast.Op {
-      Ast.opSymbol = (Ast.Symbol "?."),
-      Ast.opPadding = Ast.Padding {
-        Ast.paddingLeft = Ast.WsNone,
-        Ast.paddingRight = Ast.WsNone},
-      Ast.opPrecedence = (Ast.Precedence 20),
-      Ast.opAssociativity = Ast.AssociativityLeft}
-
--- | Right shift operator (>>)
-rightShiftOp :: Ast.Op
-rightShiftOp = Serialization.op ">>" 13 Ast.AssociativityLeft
-
--- | Strict equality operator (===)
-strictEqualOp :: Ast.Op
-strictEqualOp = Serialization.op "===" 11 Ast.AssociativityLeft
-
--- | Strict inequality operator (!==)
-strictNotEqualOp :: Ast.Op
-strictNotEqualOp = Serialization.op "!==" 11 Ast.AssociativityLeft
-
--- | Subtraction operator (-)
-subtractOp :: Ast.Op
-subtractOp = Serialization.op "-" 14 Ast.AssociativityLeft
-
--- | Ternary operator (?:) - represents the ? part
-ternaryOp :: Ast.Op
-ternaryOp = Serialization.op "?" 3 Ast.AssociativityRight
-
--- | Unsigned right shift operator (>>>)
-unsignedRightShiftOp :: Ast.Op
-unsignedRightShiftOp = Serialization.op ">>>" 13 Ast.AssociativityLeft
diff --git a/src/main/haskell/Hydra/TypeScript/Serde.hs b/src/main/haskell/Hydra/TypeScript/Serde.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/TypeScript/Serde.hs
+++ /dev/null
@@ -1,1081 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | Serialization functions for converting TypeScript AST to abstract expressions
-
-module Hydra.TypeScript.Serde where
-
-import qualified Hydra.Ast as Ast
-import qualified Hydra.Coders as Coders
-import qualified Hydra.Constants as Constants
-import qualified Hydra.Core as Core
-import qualified Hydra.Docs as Docs
-import qualified Hydra.Error.Checking as Checking
-import qualified Hydra.Error.Core as ErrorCore
-import qualified Hydra.Error.File as ErrorFile
-import qualified Hydra.Error.Packaging as ErrorPackaging
-import qualified Hydra.Error.System as ErrorSystem
-import qualified Hydra.Errors as Errors
-import qualified Hydra.File as File
-import qualified Hydra.Formatting as Formatting
-import qualified Hydra.Graph as Graph
-import qualified Hydra.Json.Model as Model
-import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality
-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists
-import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals
-import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic
-import qualified Hydra.Overlay.Haskell.Lib.Math as Math
-import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals
-import qualified Hydra.Overlay.Haskell.Lib.Ordering as Ordering
-import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs
-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings
-import qualified Hydra.Packaging as Packaging
-import qualified Hydra.Parsing as Parsing
-import qualified Hydra.Paths as Paths
-import qualified Hydra.Query as Query
-import qualified Hydra.Regex as Regex
-import qualified Hydra.Relational as Relational
-import qualified Hydra.Serialization as Serialization
-import qualified Hydra.System as System
-import qualified Hydra.Tabular as Tabular
-import qualified Hydra.Testing as Testing
-import qualified Hydra.Time as Time
-import qualified Hydra.Topology as Topology
-import qualified Hydra.TypeScript.Operators as Operators
-import qualified Hydra.TypeScript.Syntax as Syntax
-import qualified Hydra.Typed as Typed
-import qualified Hydra.Typing as Typing
-import qualified Hydra.Util as Util
-import qualified Hydra.Validation as Validation
-import qualified Hydra.Variants as Variants
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
-import qualified Data.Scientific as Sci
-import Data.Void
-
--- | True iff every codepoint is an ASCII digit 0-9, and the list is non-empty
-allDigits :: [Int] -> Bool
-allDigits cps =
-    Logic.and (Ordering.gt (Lists.length cps) 0) (Lists.foldl (\acc -> \c -> Logic.and acc (Logic.and (Ordering.gte c 48) (Ordering.lte c 57))) True cps)
-
--- | Convert an array element to an AST expression
-arrayElementToExpr :: Syntax.ArrayElement -> Ast.Expr
-arrayElementToExpr elem =
-    case elem of
-      Syntax.ArrayElementExpression v0 -> expressionToExpr v0
-      Syntax.ArrayElementSpread v0 -> Serialization.prefix "..." (expressionToExpr (Syntax.unSpreadElement v0))
-      Syntax.ArrayElementHole -> Serialization.cst ""
-
--- | Convert an array expression to an AST expression
-arrayExpressionToExpr :: [Syntax.ArrayElement] -> Ast.Expr
-arrayExpressionToExpr arr = Serialization.bracketList Serialization.inlineStyle (Lists.map arrayElementToExpr arr)
-
--- | Convert an array pattern to an AST expression
-arrayPatternToExpr :: [Maybe Syntax.Pattern] -> Ast.Expr
-arrayPatternToExpr arr =
-    Serialization.bracketList Serialization.inlineStyle (Lists.map (\maybeP -> Optionals.match maybeP (Serialization.cst "") patternToExpr) arr)
-
--- | Convert an arrow function expression to an AST expression
-arrowFunctionExpressionToExpr :: Syntax.ArrowFunctionExpression -> Ast.Expr
-arrowFunctionExpressionToExpr arrow =
-
-      let params = Syntax.arrowFunctionExpressionParams arrow
-          body = Syntax.arrowFunctionExpressionBody arrow
-          async = Syntax.arrowFunctionExpressionAsync arrow
-          asyncKw = Logic.ifElse async [
-                Serialization.cst "async"] []
-          paramsExpr = Serialization.parenListAdaptive (Lists.map patternToExpr params)
-          bodyExpr =
-                  case body of
-                    Syntax.ArrowFunctionBodyExpression v0 -> case v0 of
-                      Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr v0)
-                      Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr v0)
-                      _ -> expressionToExpr v0
-                    Syntax.ArrowFunctionBodyBlock v0 -> blockStatementToExpr v0
-      in (Serialization.spaceSep (Lists.concat [
-        asyncKw,
-        [
-          Serialization.ifx Operators.arrowOp paramsExpr bodyExpr]]))
-
--- | Convert an assignment expression to an AST expression
-assignmentExpressionToExpr :: Syntax.AssignmentExpression -> Ast.Expr
-assignmentExpressionToExpr assign =
-
-      let op = Syntax.assignmentExpressionOperator assign
-          left = Syntax.assignmentExpressionLeft assign
-          right = Syntax.assignmentExpressionRight assign
-          opStr = assignmentOperatorToString op
-      in (Serialization.spaceSep [
-        patternToExpr left,
-        (Serialization.cst opStr),
-        (expressionToExpr right)])
-
--- | Convert an assignment operator to a string
-assignmentOperatorToString :: Syntax.AssignmentOperator -> String
-assignmentOperatorToString op =
-    case op of
-      Syntax.AssignmentOperatorAssign -> "="
-      Syntax.AssignmentOperatorAddAssign -> "+="
-      Syntax.AssignmentOperatorSubtractAssign -> "-="
-      Syntax.AssignmentOperatorMultiplyAssign -> "*="
-      Syntax.AssignmentOperatorDivideAssign -> "/="
-      Syntax.AssignmentOperatorModuloAssign -> "%="
-      Syntax.AssignmentOperatorExponentiateAssign -> "**="
-      Syntax.AssignmentOperatorLeftShiftAssign -> "<<="
-      Syntax.AssignmentOperatorRightShiftAssign -> ">>="
-      Syntax.AssignmentOperatorUnsignedRightShiftAssign -> ">>>="
-      Syntax.AssignmentOperatorBitwiseAndAssign -> "&="
-      Syntax.AssignmentOperatorBitwiseOrAssign -> "|="
-      Syntax.AssignmentOperatorBitwiseXorAssign -> "^="
-      Syntax.AssignmentOperatorAndAssign -> "&&="
-      Syntax.AssignmentOperatorOrAssign -> "||="
-      Syntax.AssignmentOperatorNullishAssign -> "??="
-
--- | Convert an assignment pattern to an AST expression
-assignmentPatternToExpr :: Syntax.AssignmentPattern -> Ast.Expr
-assignmentPatternToExpr assign =
-
-      let left = Syntax.assignmentPatternLeft assign
-          right = Syntax.assignmentPatternRight assign
-      in (Serialization.ifx Operators.defineOp (patternToExpr left) (expressionToExpr right))
-
--- | Convert a binary expression to an AST expression
-binaryExpressionToExpr :: Syntax.BinaryExpression -> Ast.Expr
-binaryExpressionToExpr bin =
-
-      let op = Syntax.binaryExpressionOperator bin
-          left = Syntax.binaryExpressionLeft bin
-          right = Syntax.binaryExpressionRight bin
-      in (Serialization.ifx (binaryOperatorToExpr op) (expressionToExpr left) (expressionToExpr right))
-
--- | Convert a binary operator to an Op
-binaryOperatorToExpr :: Syntax.BinaryOperator -> Ast.Op
-binaryOperatorToExpr op =
-    case op of
-      Syntax.BinaryOperatorAdd -> Operators.addOp
-      Syntax.BinaryOperatorSubtract -> Operators.subtractOp
-      Syntax.BinaryOperatorMultiply -> Operators.multiplyOp
-      Syntax.BinaryOperatorDivide -> Operators.divideOp
-      Syntax.BinaryOperatorModulo -> Operators.moduloOp
-      Syntax.BinaryOperatorExponentiate -> Operators.exponentiateOp
-      Syntax.BinaryOperatorEqual -> Operators.equalOp
-      Syntax.BinaryOperatorNotEqual -> Operators.notEqualOp
-      Syntax.BinaryOperatorStrictEqual -> Operators.strictEqualOp
-      Syntax.BinaryOperatorStrictNotEqual -> Operators.strictNotEqualOp
-      Syntax.BinaryOperatorLessThan -> Operators.lessThanOp
-      Syntax.BinaryOperatorLessThanOrEqual -> Operators.lessThanOrEqualOp
-      Syntax.BinaryOperatorGreaterThan -> Operators.greaterThanOp
-      Syntax.BinaryOperatorGreaterThanOrEqual -> Operators.greaterThanOrEqualOp
-      Syntax.BinaryOperatorAnd -> Operators.logicalAndOp
-      Syntax.BinaryOperatorOr -> Operators.logicalOrOp
-      Syntax.BinaryOperatorNullishCoalescing -> Operators.nullishCoalescingOp
-      Syntax.BinaryOperatorBitwiseAnd -> Operators.bitwiseAndOp
-      Syntax.BinaryOperatorBitwiseOr -> Operators.bitwiseOrOp
-      Syntax.BinaryOperatorBitwiseXor -> Operators.bitwiseXorOp
-      Syntax.BinaryOperatorLeftShift -> Operators.leftShiftOp
-      Syntax.BinaryOperatorRightShift -> Operators.rightShiftOp
-      Syntax.BinaryOperatorUnsignedRightShift -> Operators.unsignedRightShiftOp
-      Syntax.BinaryOperatorIn -> Operators.inOp
-      Syntax.BinaryOperatorInstanceof -> Operators.instanceOfOp
-
--- | Convert a block statement to an AST expression. Renders as `{ stmt1\n stmt2\n ... }` using curlyBlock + newlineSep: statements are separated by newlines, NOT by commas (which curlyBracesList's default would insert and which TypeScript rejects between block statements).
-blockStatementToExpr :: [Syntax.Statement] -> Ast.Expr
-blockStatementToExpr block =
-    Serialization.curlyBlock Serialization.fullBlockStyle (Serialization.newlineSep (Lists.map statementToExpr block))
-
--- | Convert a break statement to an AST expression
-breakStatementToExpr :: Maybe Syntax.Identifier -> Ast.Expr
-breakStatementToExpr b =
-    Optionals.match b (Serialization.cst "break;") (\label -> Serialization.suffix ";" (Serialization.spaceSep [
-      Serialization.cst "break",
-      (identifierToExpr label)]))
-
--- | Convert a call expression to an AST expression
-callExpressionToExpr :: Syntax.CallExpression -> Ast.Expr
-callExpressionToExpr call =
-
-      let callee = Syntax.callExpressionCallee call
-          args = Syntax.callExpressionArguments call
-          optional = Syntax.callExpressionOptional call
-          calleeExpr =
-                  case callee of
-                    Syntax.ExpressionArrow _ -> Serialization.parens (expressionToExpr callee)
-                    Syntax.ExpressionConditional _ -> Serialization.parens (expressionToExpr callee)
-                    Syntax.ExpressionBinary _ -> Serialization.parens (expressionToExpr callee)
-                    Syntax.ExpressionUnary _ -> Serialization.parens (expressionToExpr callee)
-                    Syntax.ExpressionAssignment _ -> Serialization.parens (expressionToExpr callee)
-                    Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr callee)
-                    Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr callee)
-                    Syntax.ExpressionFunction _ -> Serialization.parens (expressionToExpr callee)
-                    _ -> expressionToExpr callee
-          argsExpr = Serialization.parenListAdaptive (Lists.map expressionToExpr args)
-          optionalDot = Logic.ifElse optional "?." ""
-      in (Serialization.spaceSep [
-        calleeExpr,
-        (Serialization.cst optionalDot),
-        argsExpr])
-
--- | Convert a catch clause to an AST expression
-catchClauseToExpr :: Syntax.CatchClause -> Ast.Expr
-catchClauseToExpr c =
-
-      let param = Syntax.catchClauseParam c
-          body = Syntax.catchClauseBody c
-          catchKw =
-                  Optionals.match param (Serialization.cst "catch") (\p -> Serialization.spaceSep [
-                    Serialization.cst "catch",
-                    (Serialization.parens (patternToExpr p))])
-      in (Serialization.spaceSep [
-        catchKw,
-        (blockStatementToExpr body)])
-
--- | Convert a class declaration to an AST expression
-classDeclarationToExpr :: Syntax.ClassDeclaration -> Ast.Expr
-classDeclarationToExpr cls =
-
-      let id = Syntax.classDeclarationId cls
-          superClass = Syntax.classDeclarationSuperClass cls
-          body = Syntax.classDeclarationBody cls
-          extendsClause =
-                  Optionals.match superClass [] (\s -> [
-                    Serialization.cst "extends",
-                    (expressionToExpr s)])
-          bodyExpr =
-                  Serialization.curlyBlock Serialization.fullBlockStyle (Serialization.newlineSep (Lists.map methodDefinitionToExpr body))
-      in (Serialization.spaceSep (Lists.concat [
-        [
-          Serialization.cst "class",
-          (identifierToExpr id)],
-        extendsClause,
-        [
-          bodyExpr]]))
-
--- | Convert a class declaration with comments to an AST expression
-classDeclarationWithCommentsToExpr :: Syntax.ClassDeclarationWithComments -> Ast.Expr
-classDeclarationWithCommentsToExpr cdwc =
-
-      let body = Syntax.classDeclarationWithCommentsBody cdwc
-          mc = Syntax.classDeclarationWithCommentsComments cdwc
-      in (Optionals.match mc (classDeclarationToExpr body) (\c -> Serialization.newlineSep [
-        documentationCommentToExpr c,
-        (classDeclarationToExpr body)]))
-
--- | Convert a conditional expression to an AST expression
-conditionalExpressionToExpr :: Syntax.ConditionalExpression -> Ast.Expr
-conditionalExpressionToExpr cond =
-
-      let test = Syntax.conditionalExpressionTest cond
-          consequent = Syntax.conditionalExpressionConsequent cond
-          alternate = Syntax.conditionalExpressionAlternate cond
-          consExpr =
-                  case consequent of
-                    Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr consequent)
-                    Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr consequent)
-                    _ -> expressionToExpr consequent
-          altExpr =
-                  case alternate of
-                    Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr alternate)
-                    Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr alternate)
-                    _ -> expressionToExpr alternate
-      in (Serialization.spaceSep [
-        expressionToExpr test,
-        (Serialization.cst "?"),
-        consExpr,
-        (Serialization.cst ":"),
-        altExpr])
-
--- | Convert a continue statement to an AST expression
-continueStatementToExpr :: Maybe Syntax.Identifier -> Ast.Expr
-continueStatementToExpr c =
-    Optionals.match c (Serialization.cst "continue;") (\label -> Serialization.suffix ";" (Serialization.spaceSep [
-      Serialization.cst "continue",
-      (identifierToExpr label)]))
-
--- | Convert a do-while statement to an AST expression
-doWhileStatementToExpr :: Syntax.DoWhileStatement -> Ast.Expr
-doWhileStatementToExpr d =
-
-      let body = Syntax.doWhileStatementBody d
-          test = Syntax.doWhileStatementTest d
-      in (Serialization.suffix ";" (Serialization.spaceSep [
-        Serialization.cst "do",
-        (statementToExpr body),
-        (Serialization.cst "while"),
-        (Serialization.parens (expressionToExpr test))]))
-
--- | Convert a documentation comment to an AST expression
-documentationCommentToExpr :: Syntax.DocumentationComment -> Ast.Expr
-documentationCommentToExpr doc =
-
-      let description = Syntax.documentationCommentDescription doc
-          tags = Syntax.documentationCommentTags doc
-      in (Serialization.cst (toTypeScriptComments description tags))
-
--- | Convert a documentation tag to a JSDoc line. Built by joining non-empty parts with spaces so that absent type/param/description components don't introduce trailing whitespace.
-documentationTagToLine :: Syntax.DocumentationTag -> String
-documentationTagToLine tag =
-
-      let name = Syntax.documentationTagName tag
-          mtype = Syntax.documentationTagType tag
-          mparamName = Syntax.documentationTagParamName tag
-          description = Syntax.documentationTagDescription tag
-          typePart =
-                  Optionals.match mtype "" (\t -> Strings.concat [
-                    "{",
-                    (typeExpressionToString t),
-                    "}"])
-          paramPart = Optionals.match mparamName "" (\p -> Syntax.unIdentifier p)
-          parts =
-                  [
-                    Strings.concat2 "@" name,
-                    typePart,
-                    paramPart,
-                    description]
-          nonEmpty = Lists.filter (\p -> Logic.not (Equality.equal p "")) parts
-      in (Strings.concat2 " * " (Strings.join " " nonEmpty))
-
--- | Escape special characters in a string for TypeScript
-escapeString :: String -> Bool -> String
-escapeString s singleQuote =
-
-      let replace = \old -> \new_ -> \str -> Strings.join new_ (Strings.splitOn old str)
-          s1 = replace "\\" "\\\\" s
-          s2 = replace "\n" "\\n" s1
-          s3 = replace "\r" "\\r" s2
-          s4 = replace "\t" "\\t" s3
-      in (Logic.ifElse singleQuote (replace "'" "\\'" s4) (replace "\"" "\\\"" s4))
-
--- | Convert an export all declaration to an AST expression
-exportAllToExpr :: Syntax.ExportAllDeclaration -> Ast.Expr
-exportAllToExpr a =
-
-      let exported = Syntax.exportAllDeclarationExported a
-          source = Syntax.exportAllDeclarationSource a
-          exportedClause =
-                  Optionals.match exported (Serialization.cst "*") (\e -> Serialization.spaceSep [
-                    Serialization.cst "*",
-                    (Serialization.cst "as"),
-                    (identifierToExpr e)])
-      in (Serialization.suffix ";" (Serialization.spaceSep [
-        Serialization.cst "export",
-        exportedClause,
-        (Serialization.cst "from"),
-        (stringLiteralToExpr source)]))
-
--- | Convert an export declaration to an AST expression
-exportDeclarationToExpr :: Syntax.ExportDeclaration -> Ast.Expr
-exportDeclarationToExpr exp =
-    case exp of
-      Syntax.ExportDeclarationNamed v0 -> namedExportToExpr v0
-      Syntax.ExportDeclarationDefault v0 -> Serialization.suffix ";" (Serialization.spaceSep [
-        Serialization.cst "export",
-        (Serialization.cst "default"),
-        (expressionToExpr v0)])
-      Syntax.ExportDeclarationDeclaration v0 -> Serialization.spaceSep [
-        Serialization.cst "export",
-        (statementToExpr v0)]
-      Syntax.ExportDeclarationAll v0 -> exportAllToExpr v0
-
--- | Convert an export specifier to an AST expression
-exportSpecifierToExpr :: Syntax.ExportSpecifier -> Ast.Expr
-exportSpecifierToExpr spec =
-
-      let local = Syntax.exportSpecifierLocal spec
-          exported = Syntax.exportSpecifierExported spec
-      in (Logic.ifElse (Equality.equal (Syntax.unIdentifier local) (Syntax.unIdentifier exported)) (identifierToExpr local) (Serialization.spaceSep [
-        identifierToExpr local,
-        (Serialization.cst "as"),
-        (identifierToExpr exported)]))
-
--- | Convert a TypeScript expression to an AST expression
-expressionToExpr :: Syntax.Expression -> Ast.Expr
-expressionToExpr expr =
-    case expr of
-      Syntax.ExpressionIdentifier v0 -> identifierToExpr v0
-      Syntax.ExpressionLiteral v0 -> literalToExpr v0
-      Syntax.ExpressionArray v0 -> arrayExpressionToExpr v0
-      Syntax.ExpressionObject v0 -> objectExpressionToExpr v0
-      Syntax.ExpressionFunction v0 -> functionExpressionToExpr v0
-      Syntax.ExpressionArrow v0 -> arrowFunctionExpressionToExpr v0
-      Syntax.ExpressionCall v0 -> callExpressionToExpr v0
-      Syntax.ExpressionMember v0 -> memberExpressionToExpr v0
-      Syntax.ExpressionConditional v0 -> conditionalExpressionToExpr v0
-      Syntax.ExpressionBinary v0 -> binaryExpressionToExpr v0
-      Syntax.ExpressionUnary v0 -> unaryExpressionToExpr v0
-      Syntax.ExpressionAssignment v0 -> assignmentExpressionToExpr v0
-      Syntax.ExpressionSequence v0 -> Serialization.parenListAdaptive (Lists.map expressionToExpr v0)
-      Syntax.ExpressionThis -> Serialization.cst "this"
-      Syntax.ExpressionNew v0 -> Serialization.spaceSep [
-        Serialization.cst "new",
-        (callExpressionToExpr v0)]
-      Syntax.ExpressionYield v0 -> Optionals.match v0 (Serialization.cst "yield") (\e -> Serialization.spaceSep [
-        Serialization.cst "yield",
-        (expressionToExpr e)])
-      Syntax.ExpressionAwait v0 -> Serialization.spaceSep [
-        Serialization.cst "await",
-        (expressionToExpr v0)]
-      Syntax.ExpressionSpread v0 -> Serialization.prefix "..." (expressionToExpr (Syntax.unSpreadElement v0))
-      Syntax.ExpressionParenthesized v0 -> Serialization.parens (expressionToExpr v0)
-      Syntax.ExpressionAsExpression v0 ->
-        let innerE = Syntax.asExpressionExpression v0
-            typ = Syntax.asExpressionType v0
-        in (Serialization.parens (Serialization.spaceSep [
-          expressionToExpr innerE,
-          (Serialization.cst "as"),
-          (Serialization.cst (tsTypeExpressionToString typ))]))
-
--- | Convert a for-in statement to an AST expression
-forInStatementToExpr :: Syntax.ForInStatement -> Ast.Expr
-forInStatementToExpr f =
-
-      let left = Syntax.forInStatementLeft f
-          right = Syntax.forInStatementRight f
-          body = Syntax.forInStatementBody f
-          leftExpr =
-                  case left of
-                    Syntax.ForInLeftVariable v0 -> variableDeclarationToExpr v0
-                    Syntax.ForInLeftPattern v0 -> patternToExpr v0
-      in (Serialization.spaceSep [
-        Serialization.cst "for",
-        (Serialization.parens (Serialization.spaceSep [
-          leftExpr,
-          (Serialization.cst "in"),
-          (expressionToExpr right)])),
-        (statementToExpr body)])
-
--- | Convert a for-of statement to an AST expression
-forOfStatementToExpr :: Syntax.ForOfStatement -> Ast.Expr
-forOfStatementToExpr f =
-
-      let await = Syntax.forOfStatementAwait f
-          left = Syntax.forOfStatementLeft f
-          right = Syntax.forOfStatementRight f
-          body = Syntax.forOfStatementBody f
-          forKw = Logic.ifElse await (Serialization.cst "for await") (Serialization.cst "for")
-          leftExpr =
-                  case left of
-                    Syntax.ForInLeftVariable v0 -> variableDeclarationToExpr v0
-                    Syntax.ForInLeftPattern v0 -> patternToExpr v0
-      in (Serialization.spaceSep [
-        forKw,
-        (Serialization.parens (Serialization.spaceSep [
-          leftExpr,
-          (Serialization.cst "of"),
-          (expressionToExpr right)])),
-        (statementToExpr body)])
-
--- | Convert a for statement to an AST expression
-forStatementToExpr :: Syntax.ForStatement -> Ast.Expr
-forStatementToExpr f =
-
-      let init = Syntax.forStatementInit f
-          test = Syntax.forStatementTest f
-          update = Syntax.forStatementUpdate f
-          body = Syntax.forStatementBody f
-          initExpr =
-                  Optionals.match init (Serialization.cst "") (\i -> case i of
-                    Syntax.ForInitVariable v0 -> variableDeclarationToExpr v0
-                    Syntax.ForInitExpression v0 -> expressionToExpr v0)
-          testExpr = Optionals.match test (Serialization.cst "") expressionToExpr
-          updateExpr = Optionals.match update (Serialization.cst "") expressionToExpr
-      in (Serialization.spaceSep [
-        Serialization.cst "for",
-        (Serialization.parenListAdaptive [
-          initExpr,
-          testExpr,
-          updateExpr]),
-        (statementToExpr body)])
-
--- | Format import specifiers, handling default vs named imports
-formatImportSpecifiers :: [Ast.Expr] -> Ast.Expr
-formatImportSpecifiers specs = Serialization.curlyBracesList Nothing Serialization.inlineStyle specs
-
--- | Convert a function declaration to an AST expression
-functionDeclarationToExpr :: Syntax.FunctionDeclaration -> Ast.Expr
-functionDeclarationToExpr fn =
-
-      let id = Syntax.functionDeclarationId fn
-          params = Syntax.functionDeclarationParams fn
-          body = Syntax.functionDeclarationBody fn
-          async = Syntax.functionDeclarationAsync fn
-          generator = Syntax.functionDeclarationGenerator fn
-          asyncKw = Logic.ifElse async [
-                Serialization.cst "async"] []
-          funcKw = Logic.ifElse generator (Serialization.cst "function*") (Serialization.cst "function")
-          paramsExpr = Serialization.parenListAdaptive (Lists.map patternToExpr params)
-          retAnnot = Serialization.cst ": any"
-      in (Serialization.spaceSep (Lists.concat [
-        asyncKw,
-        [
-          funcKw,
-          (identifierToExpr id),
-          paramsExpr,
-          retAnnot,
-          (blockStatementToExpr body)]]))
-
--- | Convert a function declaration with comments to an AST expression
-functionDeclarationWithCommentsToExpr :: Syntax.FunctionDeclarationWithComments -> Ast.Expr
-functionDeclarationWithCommentsToExpr fdwc =
-
-      let body = Syntax.functionDeclarationWithCommentsBody fdwc
-          mc = Syntax.functionDeclarationWithCommentsComments fdwc
-      in (Optionals.match mc (functionDeclarationToExpr body) (\c -> Serialization.newlineSep [
-        documentationCommentToExpr c,
-        (functionDeclarationToExpr body)]))
-
--- | Convert a function expression to an AST expression
-functionExpressionToExpr :: Syntax.FunctionExpression -> Ast.Expr
-functionExpressionToExpr fn =
-
-      let mid = Syntax.functionExpressionId fn
-          params = Syntax.functionExpressionParams fn
-          body = Syntax.functionExpressionBody fn
-          async = Syntax.functionExpressionAsync fn
-          generator = Syntax.functionExpressionGenerator fn
-          asyncKw = Logic.ifElse async [
-                Serialization.cst "async"] []
-          funcKw = Logic.ifElse generator (Serialization.cst "function*") (Serialization.cst "function")
-          nameExpr = Optionals.match mid [] (\id -> [
-                identifierToExpr id])
-          paramsExpr = Serialization.parenListAdaptive (Lists.map patternToExpr params)
-      in (Serialization.spaceSep (Lists.concat [
-        asyncKw,
-        [
-          funcKw],
-        nameExpr,
-        [
-          paramsExpr,
-          (blockStatementToExpr body)]]))
-
--- | Convert an identifier to an AST expression
-identifierToExpr :: Syntax.Identifier -> Ast.Expr
-identifierToExpr id = Serialization.cst (Syntax.unIdentifier id)
-
--- | Convert an if statement to an AST expression
-ifStatementToExpr :: Syntax.IfStatement -> Ast.Expr
-ifStatementToExpr ifStmt =
-
-      let test = Syntax.ifStatementTest ifStmt
-          consequent = Syntax.ifStatementConsequent ifStmt
-          alternate = Syntax.ifStatementAlternate ifStmt
-          ifPart =
-                  Serialization.spaceSep [
-                    Serialization.cst "if",
-                    (Serialization.parens (expressionToExpr test)),
-                    (statementToExpr consequent)]
-      in (Optionals.match alternate ifPart (\alt -> Serialization.spaceSep [
-        ifPart,
-        (Serialization.cst "else"),
-        (statementToExpr alt)]))
-
--- | Convert an import declaration to an AST expression
-importDeclarationToExpr :: Syntax.ImportDeclaration -> Ast.Expr
-importDeclarationToExpr imp =
-
-      let specifiers = Syntax.importDeclarationSpecifiers imp
-          source = Syntax.importDeclarationSource imp
-          sourceExpr = stringLiteralToExpr source
-          specExprs = Lists.map importSpecifierToExpr specifiers
-      in (Logic.ifElse (Lists.isEmpty specifiers) (Serialization.suffix ";" (Serialization.spaceSep [
-        Serialization.cst "import",
-        sourceExpr])) (Serialization.suffix ";" (Serialization.spaceSep [
-        Serialization.cst "import",
-        (formatImportSpecifiers specExprs),
-        (Serialization.cst "from"),
-        sourceExpr])))
-
--- | Convert an import specifier to an AST expression
-importSpecifierToExpr :: Syntax.ImportClause -> Ast.Expr
-importSpecifierToExpr spec =
-    case spec of
-      Syntax.ImportClauseNamed v0 ->
-        let imported = Syntax.importSpecifierImported v0
-            local = Syntax.importSpecifierLocal v0
-        in (Logic.ifElse (Equality.equal (Syntax.unIdentifier imported) (Syntax.unIdentifier local)) (identifierToExpr local) (Serialization.spaceSep [
-          identifierToExpr imported,
-          (Serialization.cst "as"),
-          (identifierToExpr local)]))
-      Syntax.ImportClauseDefault v0 -> identifierToExpr (Syntax.unImportDefaultSpecifier v0)
-      Syntax.ImportClauseNamespace v0 -> Serialization.spaceSep [
-        Serialization.cst "*",
-        (Serialization.cst "as"),
-        (identifierToExpr (Syntax.unImportNamespaceSpecifier v0))]
-
--- | Detect a kernel-synthesized type-variable name like T0 or T12, which is unbound in inline type annotations
-isKernelTypeVarName :: String -> Bool
-isKernelTypeVarName s =
-
-      let cps = Strings.toList s
-          len = Lists.length cps
-          first = Optionals.withDefault 0 (Lists.head cps)
-          rest = Logic.ifElse (Ordering.gt len 0) (Lists.drop 1 cps) []
-      in (Logic.and (Ordering.gt len 1) (Logic.and (Equality.equal first 84) (allDigits rest)))
-
--- | Convert a labeled statement to an AST expression
-labeledStatementToExpr :: Syntax.LabeledStatement -> Ast.Expr
-labeledStatementToExpr l =
-
-      let label = Syntax.labeledStatementLabel l
-          body = Syntax.labeledStatementBody l
-      in (Serialization.spaceSep [
-        Serialization.suffix ":" (identifierToExpr label),
-        (statementToExpr body)])
-
--- | Convert a literal to an AST expression
-literalToExpr :: Syntax.Literal -> Ast.Expr
-literalToExpr lit =
-    case lit of
-      Syntax.LiteralString v0 -> stringLiteralToExpr v0
-      Syntax.LiteralNumber v0 -> numericLiteralToExpr v0
-      Syntax.LiteralBoolean v0 -> Serialization.cst (Logic.ifElse v0 "true" "false")
-      Syntax.LiteralNull -> Serialization.cst "null"
-      Syntax.LiteralUndefined -> Serialization.cst "undefined"
-      Syntax.LiteralBigInt v0 -> Serialization.cst (Strings.concat2 (Literals.printBigint v0) "n")
-      Syntax.LiteralTemplate v0 -> templateLiteralToExpr v0
-
--- | Convert a member expression to an AST expression
-memberExpressionToExpr :: Syntax.MemberExpression -> Ast.Expr
-memberExpressionToExpr mem =
-
-      let obj = Syntax.memberExpressionObject mem
-          prop = Syntax.memberExpressionProperty mem
-          computed = Syntax.memberExpressionComputed mem
-          optional = Syntax.memberExpressionOptional mem
-          objExpr =
-                  case obj of
-                    Syntax.ExpressionArrow _ -> Serialization.parens (expressionToExpr obj)
-                    Syntax.ExpressionConditional _ -> Serialization.parens (expressionToExpr obj)
-                    Syntax.ExpressionBinary _ -> Serialization.parens (expressionToExpr obj)
-                    Syntax.ExpressionUnary _ -> Serialization.parens (expressionToExpr obj)
-                    Syntax.ExpressionAssignment _ -> Serialization.parens (expressionToExpr obj)
-                    Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr obj)
-                    Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr obj)
-                    Syntax.ExpressionFunction _ -> Serialization.parens (expressionToExpr obj)
-                    _ -> expressionToExpr obj
-          propExpr = expressionToExpr prop
-      in (Logic.ifElse computed (Serialization.spaceSep [
-        objExpr,
-        (Logic.ifElse optional (Serialization.cst "?.") (Serialization.cst "")),
-        (Serialization.brackets Serialization.squareBrackets Serialization.inlineStyle propExpr)]) (Serialization.ifx (Logic.ifElse optional Operators.optionalChainOp Operators.memberOp) objExpr propExpr))
-
--- | Convert a method definition to an AST expression
-methodDefinitionToExpr :: Syntax.MethodDefinition -> Ast.Expr
-methodDefinitionToExpr method =
-
-      let key = Syntax.methodDefinitionKey method
-          value = Syntax.methodDefinitionValue method
-          kind = Syntax.methodDefinitionKind method
-          computed = Syntax.methodDefinitionComputed method
-          static = Syntax.methodDefinitionStatic method
-          staticKw = Logic.ifElse static [
-                Serialization.cst "static"] []
-          kindKw =
-                  case kind of
-                    Syntax.MethodKindConstructor -> []
-                    Syntax.MethodKindMethod -> []
-                    Syntax.MethodKindGet -> [
-                      Serialization.cst "get"]
-                    Syntax.MethodKindSet -> [
-                      Serialization.cst "set"]
-          keyExpr =
-                  Logic.ifElse computed (Serialization.brackets Serialization.squareBrackets Serialization.inlineStyle (expressionToExpr key)) (expressionToExpr key)
-          params = Syntax.functionExpressionParams value
-          body = Syntax.functionExpressionBody value
-          paramsExpr = Serialization.parenListAdaptive (Lists.map patternToExpr params)
-      in (Serialization.spaceSep (Lists.concat [
-        staticKw,
-        kindKw,
-        [
-          keyExpr,
-          paramsExpr,
-          (blockStatementToExpr body)]]))
-
--- | Convert a module item to an AST expression
-moduleItemToExpr :: Syntax.ModuleItem -> Ast.Expr
-moduleItemToExpr item =
-    case item of
-      Syntax.ModuleItemStatement v0 -> statementToExpr v0
-      Syntax.ModuleItemImport v0 -> importDeclarationToExpr v0
-      Syntax.ModuleItemExport v0 -> exportDeclarationToExpr v0
-
--- | Convert a module item with comments to an AST expression
-moduleItemWithCommentsToExpr :: Syntax.ModuleItemWithComments -> Ast.Expr
-moduleItemWithCommentsToExpr miwc =
-
-      let body = Syntax.moduleItemWithCommentsBody miwc
-          mc = Syntax.moduleItemWithCommentsComments miwc
-      in (Optionals.match mc (moduleItemToExpr body) (\c -> Serialization.newlineSep [
-        documentationCommentToExpr c,
-        (moduleItemToExpr body)]))
-
--- | Convert a named export to an AST expression
-namedExportToExpr :: Syntax.NamedExport -> Ast.Expr
-namedExportToExpr n =
-
-      let specifiers = Syntax.namedExportSpecifiers n
-          source = Syntax.namedExportSource n
-          specExprs = Lists.map exportSpecifierToExpr specifiers
-          fromClause =
-                  Optionals.match source [] (\s -> [
-                    Serialization.cst "from",
-                    (stringLiteralToExpr s)])
-      in (Serialization.suffix ";" (Serialization.spaceSep (Lists.concat [
-        [
-          Serialization.cst "export"],
-        [
-          Serialization.curlyBracesList Nothing Serialization.inlineStyle specExprs],
-        fromClause])))
-
--- | Convert a numeric literal to an AST expression
-numericLiteralToExpr :: Syntax.NumericLiteral -> Ast.Expr
-numericLiteralToExpr n =
-    case n of
-      Syntax.NumericLiteralInteger v0 -> Serialization.cst (Literals.printInt64 v0)
-      Syntax.NumericLiteralFloat v0 -> Serialization.cst (Literals.printFloat64 v0)
-
--- | Convert an object expression to an AST expression
-objectExpressionToExpr :: [Syntax.Property] -> Ast.Expr
-objectExpressionToExpr obj =
-    Serialization.curlyBracesList Nothing Serialization.halfBlockStyle (Lists.map propertyToExpr obj)
-
--- | Convert an object pattern property to an AST expression
-objectPatternPropertyToExpr :: Syntax.ObjectPatternProperty -> Ast.Expr
-objectPatternPropertyToExpr prop =
-    case prop of
-      Syntax.ObjectPatternPropertyProperty v0 -> propertyToExpr v0
-      Syntax.ObjectPatternPropertyRest v0 -> Serialization.prefix "..." (patternToExpr (Syntax.unRestElement v0))
-
--- | Convert an object pattern to an AST expression
-objectPatternToExpr :: Syntax.ObjectPattern -> Ast.Expr
-objectPatternToExpr obj =
-
-      let props = Syntax.objectPatternProperties obj
-      in (Serialization.curlyBracesList Nothing Serialization.inlineStyle (Lists.map objectPatternPropertyToExpr props))
-
--- | Convert a pattern to an AST expression
-patternToExpr :: Syntax.Pattern -> Ast.Expr
-patternToExpr pat =
-    case pat of
-      Syntax.PatternIdentifier v0 -> identifierToExpr v0
-      Syntax.PatternObject v0 -> objectPatternToExpr v0
-      Syntax.PatternArray v0 -> arrayPatternToExpr v0
-      Syntax.PatternAssignment v0 -> assignmentPatternToExpr v0
-      Syntax.PatternRest v0 -> Serialization.prefix "..." (patternToExpr (Syntax.unRestElement v0))
-      Syntax.PatternTyped v0 -> typedPatternToExpr v0
-
--- | Render a TS.Pattern as a plain string
-patternToString :: Syntax.Pattern -> String
-patternToString pat =
-    case pat of
-      Syntax.PatternIdentifier v0 -> Syntax.unIdentifier v0
-      Syntax.PatternRest v0 -> Strings.concat2 "..." (patternToString (Syntax.unRestElement v0))
-      Syntax.PatternTyped v0 -> Strings.concat [
-        patternToString (Syntax.typedPatternPattern v0),
-        ": ",
-        (tsTypeExpressionToString (Syntax.typedPatternType v0))]
-      _ -> "_"
-
--- | Convert a TypeScript program to an AST expression
-programToExpr :: Syntax.Program -> Ast.Expr
-programToExpr prog =
-
-      let body = Syntax.programBody prog
-          warning = [
-                Serialization.cst (toLineComment Constants.warningAutoGeneratedFile)]
-          items = Lists.map moduleItemToExpr body
-      in (Serialization.doubleNewlineSep (Lists.concat [
-        warning,
-        items]))
-
--- | Convert an object property to an AST expression
-propertyToExpr :: Syntax.Property -> Ast.Expr
-propertyToExpr prop =
-
-      let key = Syntax.propertyKey prop
-          value = Syntax.propertyValue prop
-          shorthand = Syntax.propertyShorthand prop
-          computed = Syntax.propertyComputed prop
-          keyExpr =
-                  Logic.ifElse computed (Serialization.brackets Serialization.squareBrackets Serialization.inlineStyle (expressionToExpr key)) (expressionToExpr key)
-      in (Logic.ifElse shorthand keyExpr (Serialization.ifx Operators.colonOp keyExpr (expressionToExpr value)))
-
--- | Convert a return statement to an AST expression
-returnStatementToExpr :: Maybe Syntax.Expression -> Ast.Expr
-returnStatementToExpr r =
-    Optionals.match r (Serialization.cst "return;") (\e -> Serialization.suffix ";" (Serialization.spaceSep [
-      Serialization.cst "return",
-      (expressionToExpr e)]))
-
--- | Convert a statement to an AST expression
-statementToExpr :: Syntax.Statement -> Ast.Expr
-statementToExpr stmt =
-    case stmt of
-      Syntax.StatementExpression v0 -> Serialization.suffix ";" (expressionToExpr v0)
-      Syntax.StatementBlock v0 -> blockStatementToExpr v0
-      Syntax.StatementEmpty -> Serialization.cst ";"
-      Syntax.StatementDebugger -> Serialization.cst "debugger;"
-      Syntax.StatementReturn v0 -> returnStatementToExpr v0
-      Syntax.StatementBreak v0 -> breakStatementToExpr v0
-      Syntax.StatementContinue v0 -> continueStatementToExpr v0
-      Syntax.StatementIf v0 -> ifStatementToExpr v0
-      Syntax.StatementSwitch v0 -> switchStatementToExpr v0
-      Syntax.StatementThrow v0 -> throwStatementToExpr v0
-      Syntax.StatementTry v0 -> tryStatementToExpr v0
-      Syntax.StatementWhile v0 -> whileStatementToExpr v0
-      Syntax.StatementDoWhile v0 -> doWhileStatementToExpr v0
-      Syntax.StatementFor v0 -> forStatementToExpr v0
-      Syntax.StatementForIn v0 -> forInStatementToExpr v0
-      Syntax.StatementForOf v0 -> forOfStatementToExpr v0
-      Syntax.StatementVariableDeclaration v0 -> variableDeclarationToExpr v0
-      Syntax.StatementFunctionDeclaration v0 -> functionDeclarationToExpr v0
-      Syntax.StatementClassDeclaration v0 -> classDeclarationToExpr v0
-      Syntax.StatementLabeled v0 -> labeledStatementToExpr v0
-
--- | Convert a string literal to an AST expression
-stringLiteralToExpr :: Syntax.StringLiteral -> Ast.Expr
-stringLiteralToExpr s =
-
-      let value = Syntax.stringLiteralValue s
-          singleQuote = Syntax.stringLiteralSingleQuote s
-          quote = Logic.ifElse singleQuote "'" "\""
-          escaped = escapeString value singleQuote
-      in (Serialization.cst (Strings.concat [
-        quote,
-        escaped,
-        quote]))
-
--- | Convert a switch case to an AST expression
-switchCaseToExpr :: Syntax.SwitchCase -> Ast.Expr
-switchCaseToExpr c =
-
-      let test = Syntax.switchCaseTest c
-          consequent = Syntax.switchCaseConsequent c
-          caseLabel =
-                  Optionals.match test (Serialization.cst "default:") (\t -> Serialization.spaceSep [
-                    Serialization.cst "case",
-                    (expressionToExpr t),
-                    (Serialization.cst ":")])
-      in (Serialization.newlineSep (Lists.cons caseLabel (Lists.map statementToExpr consequent)))
-
--- | Convert a switch statement to an AST expression
-switchStatementToExpr :: Syntax.SwitchStatement -> Ast.Expr
-switchStatementToExpr switchStmt =
-
-      let discriminant = Syntax.switchStatementDiscriminant switchStmt
-          match = Syntax.switchStatementCases switchStmt
-      in (Serialization.spaceSep [
-        Serialization.cst "switch",
-        (Serialization.parens (expressionToExpr discriminant)),
-        (Serialization.curlyBlock Serialization.fullBlockStyle (Serialization.newlineSep (Lists.map switchCaseToExpr match)))])
-
--- | Convert a template literal to an AST expression
-templateLiteralToExpr :: Syntax.TemplateLiteral -> Ast.Expr
-templateLiteralToExpr t =
-
-      let quasis = Syntax.templateLiteralQuasis t
-          exprs = Syntax.templateLiteralExpressions t
-      in (Serialization.cst (Strings.concat [
-        "`",
-        (Strings.join "" (Lists.map (\q -> Syntax.templateElementValue q) quasis)),
-        "`"]))
-
--- | Convert a throw statement to an AST expression
-throwStatementToExpr :: Syntax.ThrowStatement -> Ast.Expr
-throwStatementToExpr t =
-    Serialization.suffix ";" (Serialization.spaceSep [
-      Serialization.cst "throw",
-      (expressionToExpr (Syntax.unThrowStatement t))])
-
--- | Convert a string to a TypeScript line comment. Empty source lines emit `//` (no trailing space).
-toLineComment :: String -> String
-toLineComment s =
-    Strings.join "\n" (Lists.map (\line -> Logic.ifElse (Equality.equal line "") "//" (Strings.concat2 "// " line)) (Formatting.lines s))
-
--- | Format a description and tags as a JSDoc comment. Empty doc lines emit ` *` (no trailing space) so blank lines don't carry trailing whitespace.
-toTypeScriptComments :: String -> [Syntax.DocumentationTag] -> String
-toTypeScriptComments desc tags =
-
-      let descLines =
-              Logic.ifElse (Equality.equal desc "") [] (Lists.map (\line -> Logic.ifElse (Equality.equal line "") " *" (Strings.concat2 " * " line)) (Formatting.lines desc))
-          tagLines = Lists.map documentationTagToLine tags
-          allLines =
-                  Lists.concat [
-                    descLines,
-                    tagLines]
-      in (Logic.ifElse (Lists.isEmpty allLines) "" (Strings.join "\n" (Lists.concat [
-        [
-          "/**"],
-        allLines,
-        [
-          " */"]])))
-
--- | Convert a try statement to an AST expression
-tryStatementToExpr :: Syntax.TryStatement -> Ast.Expr
-tryStatementToExpr t =
-
-      let block = Syntax.tryStatementBlock t
-          handler = Syntax.tryStatementHandler t
-          finalizer = Syntax.tryStatementFinalizer t
-          tryPart =
-                  Serialization.spaceSep [
-                    Serialization.cst "try",
-                    (blockStatementToExpr block)]
-          catchPart = Optionals.match handler [] (\c -> [
-                catchClauseToExpr c])
-          finallyPart =
-                  Optionals.match finalizer [] (\f -> [
-                    Serialization.spaceSep [
-                      Serialization.cst "finally",
-                      (blockStatementToExpr f)]])
-      in (Serialization.spaceSep (Lists.concat [
-        [
-          tryPart],
-        catchPart,
-        finallyPart]))
-
--- | Render a TypeScript type expression as a string in TS syntax
-tsTypeExpressionToString :: Syntax.TypeExpression -> String
-tsTypeExpressionToString t =
-    case t of
-      Syntax.TypeExpressionIdentifier v0 ->
-        let raw = Syntax.unIdentifier v0
-        in (Logic.ifElse (isKernelTypeVarName raw) "any" raw)
-      Syntax.TypeExpressionAny -> "any"
-      Syntax.TypeExpressionVoid -> "void"
-      Syntax.TypeExpressionNever -> "never"
-      Syntax.TypeExpressionArray v0 -> Strings.concat [
-        "ReadonlyArray<",
-        (tsTypeExpressionToString (Syntax.unArrayTypeExpression v0)),
-        ">"]
-      Syntax.TypeExpressionTuple v0 -> Strings.concat [
-        "readonly [",
-        (Strings.join ", " (Lists.map tsTypeExpressionToString v0)),
-        "]"]
-      Syntax.TypeExpressionUnion v0 -> Strings.join " | " (Lists.map tsTypeExpressionToString v0)
-      Syntax.TypeExpressionIntersection v0 -> Strings.join " & " (Lists.map tsTypeExpressionToString v0)
-      Syntax.TypeExpressionParameterized v0 -> Strings.concat [
-        tsTypeExpressionToString (Syntax.parameterizedTypeExpressionBase v0),
-        "<",
-        (Strings.join ", " (Lists.map tsTypeExpressionToString (Syntax.parameterizedTypeExpressionArguments v0))),
-        ">"]
-      Syntax.TypeExpressionOptional v0 -> Strings.concat [
-        tsTypeExpressionToString v0,
-        " | undefined"]
-      Syntax.TypeExpressionReadonly v0 -> Strings.concat2 "readonly " (tsTypeExpressionToString v0)
-      Syntax.TypeExpressionUnknown -> "unknown"
-      Syntax.TypeExpressionFunction _ -> "((...args: any[]) => any)"
-      _ -> "unknown"
-
--- | Convert a type expression to a string for JSDoc
-typeExpressionToString :: Syntax.TypeExpression -> String
-typeExpressionToString typ =
-    case typ of
-      Syntax.TypeExpressionIdentifier v0 -> Syntax.unIdentifier v0
-      Syntax.TypeExpressionAny -> "*"
-      Syntax.TypeExpressionVoid -> "void"
-      Syntax.TypeExpressionNever -> "never"
-      Syntax.TypeExpressionLiteral _ -> "literal"
-      Syntax.TypeExpressionArray v0 -> Strings.concat2 (typeExpressionToString (Syntax.unArrayTypeExpression v0)) "[]"
-      Syntax.TypeExpressionFunction v0 ->
-        let params = Syntax.functionTypeExpressionParameters v0
-            rt = Syntax.functionTypeExpressionReturnType v0
-            rendered =
-                    Pairs.second (Lists.foldl (\acc -> \p ->
-                      let i = Pairs.first acc
-                          soFar = Pairs.second acc
-                          this =
-                                  Strings.concat [
-                                    "_a",
-                                    (Literals.printInt32 i),
-                                    ": ",
-                                    (typeExpressionToString p)]
-                      in (Math.add i 1, (Lists.concat2 soFar (Lists.singleton this)))) (0, []) params)
-        in (Strings.concat [
-          "(",
-          (Strings.join ", " rendered),
-          ") => ",
-          (typeExpressionToString rt)])
-      Syntax.TypeExpressionObject _ -> "Object"
-      Syntax.TypeExpressionUnion v0 -> Strings.join "|" (Lists.map typeExpressionToString v0)
-      Syntax.TypeExpressionParameterized v0 ->
-        let base = Syntax.parameterizedTypeExpressionBase v0
-            args = Syntax.parameterizedTypeExpressionArguments v0
-        in (Strings.concat [
-          typeExpressionToString base,
-          "<",
-          (Strings.join ", " (Lists.map typeExpressionToString args)),
-          ">"])
-      Syntax.TypeExpressionOptional v0 -> Strings.concat2 "?" (typeExpressionToString v0)
-
--- | Render `<pattern>: <type>` (TypeScript parameter / variable type annotation)
-typedPatternToExpr :: Syntax.TypedPattern -> Ast.Expr
-typedPatternToExpr tp =
-
-      let innerPat = Syntax.typedPatternPattern tp
-          typ = Syntax.typedPatternType tp
-          innerStr = patternToString innerPat
-          typeStr = tsTypeExpressionToString typ
-      in (Serialization.cst (Strings.concat [
-        innerStr,
-        ": ",
-        typeStr]))
-
--- | Convert a unary expression to an AST expression
-unaryExpressionToExpr :: Syntax.UnaryExpression -> Ast.Expr
-unaryExpressionToExpr un =
-
-      let op = Syntax.unaryExpressionOperator un
-          arg = Syntax.unaryExpressionArgument un
-          prefix = Syntax.unaryExpressionPrefix un
-          opStr = unaryOperatorToString op
-          argExpr = expressionToExpr arg
-      in (Logic.ifElse prefix (Serialization.prefix opStr argExpr) (Serialization.suffix opStr argExpr))
-
--- | Convert a unary operator to a string
-unaryOperatorToString :: Syntax.UnaryOperator -> String
-unaryOperatorToString op =
-    case op of
-      Syntax.UnaryOperatorNegate -> "-"
-      Syntax.UnaryOperatorPlus -> "+"
-      Syntax.UnaryOperatorNot -> "!"
-      Syntax.UnaryOperatorBitwiseNot -> "~"
-      Syntax.UnaryOperatorTypeof -> "typeof "
-      Syntax.UnaryOperatorVoid -> "void "
-      Syntax.UnaryOperatorDelete -> "delete "
-      Syntax.UnaryOperatorIncrement -> "++"
-      Syntax.UnaryOperatorDecrement -> "--"
-
--- | Convert a variable declaration to an AST expression
-variableDeclarationToExpr :: Syntax.VariableDeclaration -> Ast.Expr
-variableDeclarationToExpr decl =
-
-      let kind = Syntax.variableDeclarationKind decl
-          declarations = Syntax.variableDeclarationDeclarations decl
-      in (Serialization.suffix ";" (Serialization.spaceSep [
-        variableKindToExpr kind,
-        (Serialization.commaSep Serialization.inlineStyle (Lists.map variableDeclaratorToExpr declarations))]))
-
--- | Convert a variable declarator to an AST expression
-variableDeclaratorToExpr :: Syntax.VariableDeclarator -> Ast.Expr
-variableDeclaratorToExpr decl =
-
-      let id = Syntax.variableDeclaratorId decl
-          init = Syntax.variableDeclaratorInit decl
-      in (Optionals.match init (patternToExpr id) (\e -> Serialization.ifx Operators.defineOp (patternToExpr id) (expressionToExpr e)))
-
--- | Convert a variable kind to an AST expression
-variableKindToExpr :: Syntax.VariableKind -> Ast.Expr
-variableKindToExpr kind =
-    case kind of
-      Syntax.VariableKindVar -> Serialization.cst "var"
-      Syntax.VariableKindLet -> Serialization.cst "let"
-      Syntax.VariableKindConst -> Serialization.cst "const"
-
--- | Convert a while statement to an AST expression
-whileStatementToExpr :: Syntax.WhileStatement -> Ast.Expr
-whileStatementToExpr w =
-
-      let test = Syntax.whileStatementTest w
-          body = Syntax.whileStatementBody w
-      in (Serialization.spaceSep [
-        Serialization.cst "while",
-        (Serialization.parens (expressionToExpr test)),
-        (statementToExpr body)])
diff --git a/src/main/haskell/Hydra/TypeScript/Syntax.hs b/src/main/haskell/Hydra/TypeScript/Syntax.hs
deleted file mode 100644
--- a/src/main/haskell/Hydra/TypeScript/Syntax.hs
+++ /dev/null
@@ -1,1730 +0,0 @@
--- Note: this is an automatically generated file. Do not edit.
-
--- | A TypeScript 5.x syntax model for Hydra code generation
-
-module Hydra.TypeScript.Syntax where
-
-import qualified Hydra.Core as Core
-import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
-import qualified Data.Scientific as Sci
-import Data.Void
-import qualified Data.Int as I
-
--- | An element in an array expression
-data ArrayElement =
-  -- | A regular expression element
-  ArrayElementExpression Expression |
-  -- | A spread element ...x
-  ArrayElementSpread SpreadElement |
-  -- | An empty slot (elision)
-  ArrayElementHole
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayElement = Core.Name "hydra.typeScript.syntax.ArrayElement"
-
-_ArrayElement_expression = Core.Name "expression"
-
-_ArrayElement_spread = Core.Name "spread"
-
-_ArrayElement_hole = Core.Name "hole"
-
--- | An array expression [a, b, c]
-type ArrayExpression = [ArrayElement]
-
-_ArrayExpression = Core.Name "hydra.typeScript.syntax.ArrayExpression"
-
--- | An array destructuring pattern [a, b, c]
-type ArrayPattern = [Maybe Pattern]
-
-_ArrayPattern = Core.Name "hydra.typeScript.syntax.ArrayPattern"
-
--- | An array type (T[])
-newtype ArrayTypeExpression =
-  ArrayTypeExpression {
-    unArrayTypeExpression :: TypeExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrayTypeExpression = Core.Name "hydra.typeScript.syntax.ArrayTypeExpression"
-
--- | The body of an arrow function (expression or block)
-data ArrowFunctionBody =
-  ArrowFunctionBodyExpression Expression |
-  ArrowFunctionBodyBlock BlockStatement
-  deriving (Eq, Ord, Read, Show)
-
-_ArrowFunctionBody = Core.Name "hydra.typeScript.syntax.ArrowFunctionBody"
-
-_ArrowFunctionBody_expression = Core.Name "expression"
-
-_ArrowFunctionBody_block = Core.Name "block"
-
--- | An arrow function expression
-data ArrowFunctionExpression =
-  ArrowFunctionExpression {
-    -- | Function parameters
-    arrowFunctionExpressionParams :: [Pattern],
-    -- | Function body (expression or block)
-    arrowFunctionExpressionBody :: ArrowFunctionBody,
-    -- | Whether the function is async
-    arrowFunctionExpressionAsync :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_ArrowFunctionExpression = Core.Name "hydra.typeScript.syntax.ArrowFunctionExpression"
-
-_ArrowFunctionExpression_params = Core.Name "params"
-
-_ArrowFunctionExpression_body = Core.Name "body"
-
-_ArrowFunctionExpression_async = Core.Name "async"
-
--- | A TypeScript `<expression> as <type>` cast
-data AsExpression =
-  AsExpression {
-    -- | The expression being cast
-    asExpressionExpression :: Expression,
-    -- | The target type
-    asExpressionType :: TypeExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_AsExpression = Core.Name "hydra.typeScript.syntax.AsExpression"
-
-_AsExpression_expression = Core.Name "expression"
-
-_AsExpression_type = Core.Name "type"
-
--- | An assignment expression
-data AssignmentExpression =
-  AssignmentExpression {
-    assignmentExpressionOperator :: AssignmentOperator,
-    assignmentExpressionLeft :: Pattern,
-    assignmentExpressionRight :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_AssignmentExpression = Core.Name "hydra.typeScript.syntax.AssignmentExpression"
-
-_AssignmentExpression_operator = Core.Name "operator"
-
-_AssignmentExpression_left = Core.Name "left"
-
-_AssignmentExpression_right = Core.Name "right"
-
--- | An assignment operator
-data AssignmentOperator =
-  -- | =
-  AssignmentOperatorAssign |
-  -- | +=
-  AssignmentOperatorAddAssign |
-  -- | -=
-  AssignmentOperatorSubtractAssign |
-  -- | *=
-  AssignmentOperatorMultiplyAssign |
-  -- | /=
-  AssignmentOperatorDivideAssign |
-  -- | %=
-  AssignmentOperatorModuloAssign |
-  -- | **=
-  AssignmentOperatorExponentiateAssign |
-  -- | <<=
-  AssignmentOperatorLeftShiftAssign |
-  -- | >>=
-  AssignmentOperatorRightShiftAssign |
-  -- | >>>=
-  AssignmentOperatorUnsignedRightShiftAssign |
-  -- | &=
-  AssignmentOperatorBitwiseAndAssign |
-  -- | |=
-  AssignmentOperatorBitwiseOrAssign |
-  -- | ^=
-  AssignmentOperatorBitwiseXorAssign |
-  -- | &&=
-  AssignmentOperatorAndAssign |
-  -- | ||=
-  AssignmentOperatorOrAssign |
-  -- | ??=
-  AssignmentOperatorNullishAssign
-  deriving (Eq, Ord, Read, Show)
-
-_AssignmentOperator = Core.Name "hydra.typeScript.syntax.AssignmentOperator"
-
-_AssignmentOperator_assign = Core.Name "assign"
-
-_AssignmentOperator_addAssign = Core.Name "addAssign"
-
-_AssignmentOperator_subtractAssign = Core.Name "subtractAssign"
-
-_AssignmentOperator_multiplyAssign = Core.Name "multiplyAssign"
-
-_AssignmentOperator_divideAssign = Core.Name "divideAssign"
-
-_AssignmentOperator_moduloAssign = Core.Name "moduloAssign"
-
-_AssignmentOperator_exponentiateAssign = Core.Name "exponentiateAssign"
-
-_AssignmentOperator_leftShiftAssign = Core.Name "leftShiftAssign"
-
-_AssignmentOperator_rightShiftAssign = Core.Name "rightShiftAssign"
-
-_AssignmentOperator_unsignedRightShiftAssign = Core.Name "unsignedRightShiftAssign"
-
-_AssignmentOperator_bitwiseAndAssign = Core.Name "bitwiseAndAssign"
-
-_AssignmentOperator_bitwiseOrAssign = Core.Name "bitwiseOrAssign"
-
-_AssignmentOperator_bitwiseXorAssign = Core.Name "bitwiseXorAssign"
-
-_AssignmentOperator_andAssign = Core.Name "andAssign"
-
-_AssignmentOperator_orAssign = Core.Name "orAssign"
-
-_AssignmentOperator_nullishAssign = Core.Name "nullishAssign"
-
--- | A pattern with default value (param = default)
-data AssignmentPattern =
-  AssignmentPattern {
-    assignmentPatternLeft :: Pattern,
-    assignmentPatternRight :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_AssignmentPattern = Core.Name "hydra.typeScript.syntax.AssignmentPattern"
-
-_AssignmentPattern_left = Core.Name "left"
-
-_AssignmentPattern_right = Core.Name "right"
-
--- | A binary operation expression
-data BinaryExpression =
-  BinaryExpression {
-    binaryExpressionOperator :: BinaryOperator,
-    binaryExpressionLeft :: Expression,
-    binaryExpressionRight :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_BinaryExpression = Core.Name "hydra.typeScript.syntax.BinaryExpression"
-
-_BinaryExpression_operator = Core.Name "operator"
-
-_BinaryExpression_left = Core.Name "left"
-
-_BinaryExpression_right = Core.Name "right"
-
--- | A binary operator
-data BinaryOperator =
-  -- | +
-  BinaryOperatorAdd |
-  -- | -
-  BinaryOperatorSubtract |
-  -- | *
-  BinaryOperatorMultiply |
-  -- | /
-  BinaryOperatorDivide |
-  -- | %
-  BinaryOperatorModulo |
-  -- | **
-  BinaryOperatorExponentiate |
-  -- | ==
-  BinaryOperatorEqual |
-  -- | !=
-  BinaryOperatorNotEqual |
-  -- | ===
-  BinaryOperatorStrictEqual |
-  -- | !==
-  BinaryOperatorStrictNotEqual |
-  -- | <
-  BinaryOperatorLessThan |
-  -- | <=
-  BinaryOperatorLessThanOrEqual |
-  -- | >
-  BinaryOperatorGreaterThan |
-  -- | >=
-  BinaryOperatorGreaterThanOrEqual |
-  -- | &&
-  BinaryOperatorAnd |
-  -- | ||
-  BinaryOperatorOr |
-  -- | ??
-  BinaryOperatorNullishCoalescing |
-  -- | &
-  BinaryOperatorBitwiseAnd |
-  -- | |
-  BinaryOperatorBitwiseOr |
-  -- | ^
-  BinaryOperatorBitwiseXor |
-  -- | <<
-  BinaryOperatorLeftShift |
-  -- | >>
-  BinaryOperatorRightShift |
-  -- | >>>
-  BinaryOperatorUnsignedRightShift |
-  -- | in
-  BinaryOperatorIn |
-  -- | instanceof
-  BinaryOperatorInstanceof
-  deriving (Eq, Ord, Read, Show)
-
-_BinaryOperator = Core.Name "hydra.typeScript.syntax.BinaryOperator"
-
-_BinaryOperator_add = Core.Name "add"
-
-_BinaryOperator_subtract = Core.Name "subtract"
-
-_BinaryOperator_multiply = Core.Name "multiply"
-
-_BinaryOperator_divide = Core.Name "divide"
-
-_BinaryOperator_modulo = Core.Name "modulo"
-
-_BinaryOperator_exponentiate = Core.Name "exponentiate"
-
-_BinaryOperator_equal = Core.Name "equal"
-
-_BinaryOperator_notEqual = Core.Name "notEqual"
-
-_BinaryOperator_strictEqual = Core.Name "strictEqual"
-
-_BinaryOperator_strictNotEqual = Core.Name "strictNotEqual"
-
-_BinaryOperator_lessThan = Core.Name "lessThan"
-
-_BinaryOperator_lessThanOrEqual = Core.Name "lessThanOrEqual"
-
-_BinaryOperator_greaterThan = Core.Name "greaterThan"
-
-_BinaryOperator_greaterThanOrEqual = Core.Name "greaterThanOrEqual"
-
-_BinaryOperator_and = Core.Name "and"
-
-_BinaryOperator_or = Core.Name "or"
-
-_BinaryOperator_nullishCoalescing = Core.Name "nullishCoalescing"
-
-_BinaryOperator_bitwiseAnd = Core.Name "bitwiseAnd"
-
-_BinaryOperator_bitwiseOr = Core.Name "bitwiseOr"
-
-_BinaryOperator_bitwiseXor = Core.Name "bitwiseXor"
-
-_BinaryOperator_leftShift = Core.Name "leftShift"
-
-_BinaryOperator_rightShift = Core.Name "rightShift"
-
-_BinaryOperator_unsignedRightShift = Core.Name "unsignedRightShift"
-
-_BinaryOperator_in = Core.Name "in"
-
-_BinaryOperator_instanceof = Core.Name "instanceof"
-
--- | A block statement { ... }
-type BlockStatement = [Statement]
-
-_BlockStatement = Core.Name "hydra.typeScript.syntax.BlockStatement"
-
--- | A break statement
-type BreakStatement = (Maybe Identifier)
-
-_BreakStatement = Core.Name "hydra.typeScript.syntax.BreakStatement"
-
--- | A function call expression
-data CallExpression =
-  CallExpression {
-    -- | The function being called
-    callExpressionCallee :: Expression,
-    -- | The arguments
-    callExpressionArguments :: [Expression],
-    -- | Whether using optional chaining (?.)
-    callExpressionOptional :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_CallExpression = Core.Name "hydra.typeScript.syntax.CallExpression"
-
-_CallExpression_callee = Core.Name "callee"
-
-_CallExpression_arguments = Core.Name "arguments"
-
-_CallExpression_optional = Core.Name "optional"
-
--- | A catch clause
-data CatchClause =
-  CatchClause {
-    -- | The catch parameter (can be omitted in ES2019+)
-    catchClauseParam :: (Maybe Pattern),
-    catchClauseBody :: BlockStatement}
-  deriving (Eq, Ord, Read, Show)
-
-_CatchClause = Core.Name "hydra.typeScript.syntax.CatchClause"
-
-_CatchClause_param = Core.Name "param"
-
-_CatchClause_body = Core.Name "body"
-
--- | A class body
-type ClassBody = [MethodDefinition]
-
-_ClassBody = Core.Name "hydra.typeScript.syntax.ClassBody"
-
--- | A class declaration
-data ClassDeclaration =
-  ClassDeclaration {
-    -- | Class name
-    classDeclarationId :: Identifier,
-    -- | Optional superclass
-    classDeclarationSuperClass :: (Maybe Expression),
-    -- | Class body
-    classDeclarationBody :: ClassBody}
-  deriving (Eq, Ord, Read, Show)
-
-_ClassDeclaration = Core.Name "hydra.typeScript.syntax.ClassDeclaration"
-
-_ClassDeclaration_id = Core.Name "id"
-
-_ClassDeclaration_superClass = Core.Name "superClass"
-
-_ClassDeclaration_body = Core.Name "body"
-
--- | A class declaration with optional JSDoc
-data ClassDeclarationWithComments =
-  ClassDeclarationWithComments {
-    -- | The class declaration
-    classDeclarationWithCommentsBody :: ClassDeclaration,
-    -- | Optional JSDoc comment
-    classDeclarationWithCommentsComments :: (Maybe DocumentationComment)}
-  deriving (Eq, Ord, Read, Show)
-
-_ClassDeclarationWithComments = Core.Name "hydra.typeScript.syntax.ClassDeclarationWithComments"
-
-_ClassDeclarationWithComments_body = Core.Name "body"
-
-_ClassDeclarationWithComments_comments = Core.Name "comments"
-
--- | A TypeScript comment
-data Comment =
-  -- | A single-line comment (// ...)
-  CommentLine String |
-  -- | A block comment, delimited by slash-star and star-slash
-  CommentBlock String |
-  -- | A documentation comment, delimited by slash-double-star and star-slash (JSDoc)
-  CommentDocumentation DocumentationComment
-  deriving (Eq, Ord, Read, Show)
-
-_Comment = Core.Name "hydra.typeScript.syntax.Comment"
-
-_Comment_line = Core.Name "line"
-
-_Comment_block = Core.Name "block"
-
-_Comment_documentation = Core.Name "documentation"
-
--- | A conditional (ternary) expression: test ? consequent : alternate
-data ConditionalExpression =
-  ConditionalExpression {
-    conditionalExpressionTest :: Expression,
-    conditionalExpressionConsequent :: Expression,
-    conditionalExpressionAlternate :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_ConditionalExpression = Core.Name "hydra.typeScript.syntax.ConditionalExpression"
-
-_ConditionalExpression_test = Core.Name "test"
-
-_ConditionalExpression_consequent = Core.Name "consequent"
-
-_ConditionalExpression_alternate = Core.Name "alternate"
-
--- | A continue statement
-type ContinueStatement = (Maybe Identifier)
-
-_ContinueStatement = Core.Name "hydra.typeScript.syntax.ContinueStatement"
-
--- | A do-while statement
-data DoWhileStatement =
-  DoWhileStatement {
-    doWhileStatementBody :: Statement,
-    doWhileStatementTest :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_DoWhileStatement = Core.Name "hydra.typeScript.syntax.DoWhileStatement"
-
-_DoWhileStatement_body = Core.Name "body"
-
-_DoWhileStatement_test = Core.Name "test"
-
--- | A documentation comment (JSDoc) with structured tags
-data DocumentationComment =
-  DocumentationComment {
-    -- | The main description
-    documentationCommentDescription :: String,
-    -- | Documentation tags (@param, @returns, etc.)
-    documentationCommentTags :: [DocumentationTag]}
-  deriving (Eq, Ord, Read, Show)
-
-_DocumentationComment = Core.Name "hydra.typeScript.syntax.DocumentationComment"
-
-_DocumentationComment_description = Core.Name "description"
-
-_DocumentationComment_tags = Core.Name "tags"
-
--- | A documentation tag (@param, @returns, @type, etc.)
-data DocumentationTag =
-  DocumentationTag {
-    -- | Tag name (param, returns, type, etc.)
-    documentationTagName :: String,
-    -- | Optional type expression
-    documentationTagType :: (Maybe TypeExpression),
-    -- | Optional parameter name (for @param)
-    documentationTagParamName :: (Maybe Identifier),
-    -- | Tag description
-    documentationTagDescription :: String}
-  deriving (Eq, Ord, Read, Show)
-
-_DocumentationTag = Core.Name "hydra.typeScript.syntax.DocumentationTag"
-
-_DocumentationTag_name = Core.Name "name"
-
-_DocumentationTag_type = Core.Name "type"
-
-_DocumentationTag_paramName = Core.Name "paramName"
-
-_DocumentationTag_description = Core.Name "description"
-
--- | Export all declaration (export * from ...)
-data ExportAllDeclaration =
-  ExportAllDeclaration {
-    exportAllDeclarationExported :: (Maybe Identifier),
-    exportAllDeclarationSource :: StringLiteral}
-  deriving (Eq, Ord, Read, Show)
-
-_ExportAllDeclaration = Core.Name "hydra.typeScript.syntax.ExportAllDeclaration"
-
-_ExportAllDeclaration_exported = Core.Name "exported"
-
-_ExportAllDeclaration_source = Core.Name "source"
-
--- | An export declaration
-data ExportDeclaration =
-  -- | Named exports (export {x, y as z})
-  ExportDeclarationNamed NamedExport |
-  -- | Default export (export default ...)
-  ExportDeclarationDefault Expression |
-  -- | Export a declaration (export const x = ...)
-  ExportDeclarationDeclaration Statement |
-  -- | Export all (export * from ...)
-  ExportDeclarationAll ExportAllDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_ExportDeclaration = Core.Name "hydra.typeScript.syntax.ExportDeclaration"
-
-_ExportDeclaration_named = Core.Name "named"
-
-_ExportDeclaration_default = Core.Name "default"
-
-_ExportDeclaration_declaration = Core.Name "declaration"
-
-_ExportDeclaration_all = Core.Name "all"
-
--- | An export specifier (x as y)
-data ExportSpecifier =
-  ExportSpecifier {
-    exportSpecifierLocal :: Identifier,
-    exportSpecifierExported :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_ExportSpecifier = Core.Name "hydra.typeScript.syntax.ExportSpecifier"
-
-_ExportSpecifier_local = Core.Name "local"
-
-_ExportSpecifier_exported = Core.Name "exported"
-
--- | A TypeScript expression
-data Expression =
-  -- | A simple identifier
-  ExpressionIdentifier Identifier |
-  -- | A literal value
-  ExpressionLiteral Literal |
-  -- | An array expression [a, b, c]
-  ExpressionArray ArrayExpression |
-  -- | An object expression {a: 1, b: 2}
-  ExpressionObject ObjectExpression |
-  -- | A function expression
-  ExpressionFunction FunctionExpression |
-  -- | An arrow function expression
-  ExpressionArrow ArrowFunctionExpression |
-  -- | A function call expression
-  ExpressionCall CallExpression |
-  -- | A member access expression (obj.prop or obj[prop])
-  ExpressionMember MemberExpression |
-  -- | A conditional (ternary) expression
-  ExpressionConditional ConditionalExpression |
-  -- | A binary operation expression
-  ExpressionBinary BinaryExpression |
-  -- | A unary operation expression
-  ExpressionUnary UnaryExpression |
-  -- | An assignment expression
-  ExpressionAssignment AssignmentExpression |
-  -- | A sequence expression (a, b, c)
-  ExpressionSequence [Expression] |
-  -- | The 'this' keyword
-  ExpressionThis |
-  -- | A 'new' expression
-  ExpressionNew CallExpression |
-  -- | A yield expression
-  ExpressionYield (Maybe Expression) |
-  -- | An await expression
-  ExpressionAwait Expression |
-  -- | A spread expression (...x)
-  ExpressionSpread SpreadElement |
-  -- | A parenthesized expression
-  ExpressionParenthesized Expression |
-  -- | A TypeScript type assertion `<expr> as <type>`
-  ExpressionAsExpression AsExpression
-  deriving (Eq, Ord, Read, Show)
-
-_Expression = Core.Name "hydra.typeScript.syntax.Expression"
-
-_Expression_identifier = Core.Name "identifier"
-
-_Expression_literal = Core.Name "literal"
-
-_Expression_array = Core.Name "array"
-
-_Expression_object = Core.Name "object"
-
-_Expression_function = Core.Name "function"
-
-_Expression_arrow = Core.Name "arrow"
-
-_Expression_call = Core.Name "call"
-
-_Expression_member = Core.Name "member"
-
-_Expression_conditional = Core.Name "conditional"
-
-_Expression_binary = Core.Name "binary"
-
-_Expression_unary = Core.Name "unary"
-
-_Expression_assignment = Core.Name "assignment"
-
-_Expression_sequence = Core.Name "sequence"
-
-_Expression_this = Core.Name "this"
-
-_Expression_new = Core.Name "new"
-
-_Expression_yield = Core.Name "yield"
-
-_Expression_await = Core.Name "await"
-
-_Expression_spread = Core.Name "spread"
-
-_Expression_parenthesized = Core.Name "parenthesized"
-
-_Expression_asExpression = Core.Name "asExpression"
-
--- | Left-hand side of a for-in or for-of statement
-data ForInLeft =
-  ForInLeftVariable VariableDeclaration |
-  ForInLeftPattern Pattern
-  deriving (Eq, Ord, Read, Show)
-
-_ForInLeft = Core.Name "hydra.typeScript.syntax.ForInLeft"
-
-_ForInLeft_variable = Core.Name "variable"
-
-_ForInLeft_pattern = Core.Name "pattern"
-
--- | A for-in statement
-data ForInStatement =
-  ForInStatement {
-    forInStatementLeft :: ForInLeft,
-    forInStatementRight :: Expression,
-    forInStatementBody :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_ForInStatement = Core.Name "hydra.typeScript.syntax.ForInStatement"
-
-_ForInStatement_left = Core.Name "left"
-
-_ForInStatement_right = Core.Name "right"
-
-_ForInStatement_body = Core.Name "body"
-
--- | Initialization clause of a for statement
-data ForInit =
-  ForInitVariable VariableDeclaration |
-  ForInitExpression Expression
-  deriving (Eq, Ord, Read, Show)
-
-_ForInit = Core.Name "hydra.typeScript.syntax.ForInit"
-
-_ForInit_variable = Core.Name "variable"
-
-_ForInit_expression = Core.Name "expression"
-
--- | A for-of statement
-data ForOfStatement =
-  ForOfStatement {
-    -- | Whether this is a for-await-of
-    forOfStatementAwait :: Bool,
-    forOfStatementLeft :: ForInLeft,
-    forOfStatementRight :: Expression,
-    forOfStatementBody :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_ForOfStatement = Core.Name "hydra.typeScript.syntax.ForOfStatement"
-
-_ForOfStatement_await = Core.Name "await"
-
-_ForOfStatement_left = Core.Name "left"
-
-_ForOfStatement_right = Core.Name "right"
-
-_ForOfStatement_body = Core.Name "body"
-
--- | A for statement
-data ForStatement =
-  ForStatement {
-    -- | Initialization
-    forStatementInit :: (Maybe ForInit),
-    -- | Test condition
-    forStatementTest :: (Maybe Expression),
-    -- | Update expression
-    forStatementUpdate :: (Maybe Expression),
-    forStatementBody :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_ForStatement = Core.Name "hydra.typeScript.syntax.ForStatement"
-
-_ForStatement_init = Core.Name "init"
-
-_ForStatement_test = Core.Name "test"
-
-_ForStatement_update = Core.Name "update"
-
-_ForStatement_body = Core.Name "body"
-
--- | A function declaration
-data FunctionDeclaration =
-  FunctionDeclaration {
-    -- | Function name
-    functionDeclarationId :: Identifier,
-    -- | Function parameters
-    functionDeclarationParams :: [Pattern],
-    -- | Function body
-    functionDeclarationBody :: BlockStatement,
-    -- | Whether the function is async
-    functionDeclarationAsync :: Bool,
-    -- | Whether the function is a generator
-    functionDeclarationGenerator :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_FunctionDeclaration = Core.Name "hydra.typeScript.syntax.FunctionDeclaration"
-
-_FunctionDeclaration_id = Core.Name "id"
-
-_FunctionDeclaration_params = Core.Name "params"
-
-_FunctionDeclaration_body = Core.Name "body"
-
-_FunctionDeclaration_async = Core.Name "async"
-
-_FunctionDeclaration_generator = Core.Name "generator"
-
--- | A function declaration with optional JSDoc
-data FunctionDeclarationWithComments =
-  FunctionDeclarationWithComments {
-    -- | The function declaration
-    functionDeclarationWithCommentsBody :: FunctionDeclaration,
-    -- | Optional JSDoc comment
-    functionDeclarationWithCommentsComments :: (Maybe DocumentationComment)}
-  deriving (Eq, Ord, Read, Show)
-
-_FunctionDeclarationWithComments = Core.Name "hydra.typeScript.syntax.FunctionDeclarationWithComments"
-
-_FunctionDeclarationWithComments_body = Core.Name "body"
-
-_FunctionDeclarationWithComments_comments = Core.Name "comments"
-
--- | A function expression
-data FunctionExpression =
-  FunctionExpression {
-    -- | Optional function name
-    functionExpressionId :: (Maybe Identifier),
-    -- | Function parameters
-    functionExpressionParams :: [Pattern],
-    -- | Function body
-    functionExpressionBody :: BlockStatement,
-    -- | Whether the function is async
-    functionExpressionAsync :: Bool,
-    -- | Whether the function is a generator
-    functionExpressionGenerator :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_FunctionExpression = Core.Name "hydra.typeScript.syntax.FunctionExpression"
-
-_FunctionExpression_id = Core.Name "id"
-
-_FunctionExpression_params = Core.Name "params"
-
-_FunctionExpression_body = Core.Name "body"
-
-_FunctionExpression_async = Core.Name "async"
-
-_FunctionExpression_generator = Core.Name "generator"
-
--- | A function type expression
-data FunctionTypeExpression =
-  FunctionTypeExpression {
-    -- | Type parameters (generics)
-    functionTypeExpressionTypeParameters :: [TypeParameter],
-    -- | Parameter types
-    functionTypeExpressionParameters :: [TypeExpression],
-    -- | Return type
-    functionTypeExpressionReturnType :: TypeExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_FunctionTypeExpression = Core.Name "hydra.typeScript.syntax.FunctionTypeExpression"
-
-_FunctionTypeExpression_typeParameters = Core.Name "typeParameters"
-
-_FunctionTypeExpression_parameters = Core.Name "parameters"
-
-_FunctionTypeExpression_returnType = Core.Name "returnType"
-
--- | A TypeScript identifier (variable, function, class name, etc.)
-newtype Identifier =
-  Identifier {
-    unIdentifier :: String}
-  deriving (Eq, Ord, Read, Show)
-
-_Identifier = Core.Name "hydra.typeScript.syntax.Identifier"
-
--- | An if statement
-data IfStatement =
-  IfStatement {
-    ifStatementTest :: Expression,
-    ifStatementConsequent :: Statement,
-    ifStatementAlternate :: (Maybe Statement)}
-  deriving (Eq, Ord, Read, Show)
-
-_IfStatement = Core.Name "hydra.typeScript.syntax.IfStatement"
-
-_IfStatement_test = Core.Name "test"
-
-_IfStatement_consequent = Core.Name "consequent"
-
-_IfStatement_alternate = Core.Name "alternate"
-
--- | An import clause (named, default, or namespace import)
-data ImportClause =
-  ImportClauseNamed ImportSpecifier |
-  ImportClauseDefault ImportDefaultSpecifier |
-  ImportClauseNamespace ImportNamespaceSpecifier
-  deriving (Eq, Ord, Read, Show)
-
-_ImportClause = Core.Name "hydra.typeScript.syntax.ImportClause"
-
-_ImportClause_named = Core.Name "named"
-
-_ImportClause_default = Core.Name "default"
-
-_ImportClause_namespace = Core.Name "namespace"
-
--- | An import declaration
-data ImportDeclaration =
-  ImportDeclaration {
-    -- | What to import
-    importDeclarationSpecifiers :: [ImportClause],
-    -- | The module to import from
-    importDeclarationSource :: StringLiteral}
-  deriving (Eq, Ord, Read, Show)
-
-_ImportDeclaration = Core.Name "hydra.typeScript.syntax.ImportDeclaration"
-
-_ImportDeclaration_specifiers = Core.Name "specifiers"
-
-_ImportDeclaration_source = Core.Name "source"
-
--- | A default import specifier (import x from ...)
-newtype ImportDefaultSpecifier =
-  ImportDefaultSpecifier {
-    unImportDefaultSpecifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_ImportDefaultSpecifier = Core.Name "hydra.typeScript.syntax.ImportDefaultSpecifier"
-
--- | A namespace import specifier (import * as x from ...)
-newtype ImportNamespaceSpecifier =
-  ImportNamespaceSpecifier {
-    unImportNamespaceSpecifier :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_ImportNamespaceSpecifier = Core.Name "hydra.typeScript.syntax.ImportNamespaceSpecifier"
-
--- | A named import specifier (import {x as y} from ...)
-data ImportSpecifier =
-  ImportSpecifier {
-    importSpecifierImported :: Identifier,
-    importSpecifierLocal :: Identifier}
-  deriving (Eq, Ord, Read, Show)
-
-_ImportSpecifier = Core.Name "hydra.typeScript.syntax.ImportSpecifier"
-
-_ImportSpecifier_imported = Core.Name "imported"
-
-_ImportSpecifier_local = Core.Name "local"
-
--- | A TypeScript interface declaration (interface Foo<T> extends Bar { ... })
-data InterfaceDeclaration =
-  InterfaceDeclaration {
-    -- | Interface name
-    interfaceDeclarationName :: Identifier,
-    -- | Generic parameters
-    interfaceDeclarationTypeParameters :: [TypeParameter],
-    -- | Interfaces this one extends
-    interfaceDeclarationExtends :: [TypeExpression],
-    -- | Property signatures (the interface body)
-    interfaceDeclarationMembers :: [PropertySignature]}
-  deriving (Eq, Ord, Read, Show)
-
-_InterfaceDeclaration = Core.Name "hydra.typeScript.syntax.InterfaceDeclaration"
-
-_InterfaceDeclaration_name = Core.Name "name"
-
-_InterfaceDeclaration_typeParameters = Core.Name "typeParameters"
-
-_InterfaceDeclaration_extends = Core.Name "extends"
-
-_InterfaceDeclaration_members = Core.Name "members"
-
--- | An intersection type (A & B & C)
-type IntersectionTypeExpression = [TypeExpression]
-
-_IntersectionTypeExpression = Core.Name "hydra.typeScript.syntax.IntersectionTypeExpression"
-
--- | A labeled statement
-data LabeledStatement =
-  LabeledStatement {
-    labeledStatementLabel :: Identifier,
-    labeledStatementBody :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_LabeledStatement = Core.Name "hydra.typeScript.syntax.LabeledStatement"
-
-_LabeledStatement_label = Core.Name "label"
-
-_LabeledStatement_body = Core.Name "body"
-
--- | A literal value
-data Literal =
-  -- | A string literal
-  LiteralString StringLiteral |
-  -- | A numeric literal
-  LiteralNumber NumericLiteral |
-  -- | A boolean literal (true or false)
-  LiteralBoolean Bool |
-  -- | The null literal
-  LiteralNull |
-  -- | The undefined literal
-  LiteralUndefined |
-  -- | A BigInt literal (e.g., 123n)
-  LiteralBigInt Integer |
-  -- | A template literal
-  LiteralTemplate TemplateLiteral
-  deriving (Eq, Ord, Read, Show)
-
-_Literal = Core.Name "hydra.typeScript.syntax.Literal"
-
-_Literal_string = Core.Name "string"
-
-_Literal_number = Core.Name "number"
-
-_Literal_boolean = Core.Name "boolean"
-
-_Literal_null = Core.Name "null"
-
-_Literal_undefined = Core.Name "undefined"
-
-_Literal_bigInt = Core.Name "bigInt"
-
-_Literal_template = Core.Name "template"
-
--- | A member access expression
-data MemberExpression =
-  MemberExpression {
-    -- | The object
-    memberExpressionObject :: Expression,
-    -- | The property
-    memberExpressionProperty :: Expression,
-    -- | Whether using bracket notation (obj[prop])
-    memberExpressionComputed :: Bool,
-    -- | Whether using optional chaining (?.)
-    memberExpressionOptional :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_MemberExpression = Core.Name "hydra.typeScript.syntax.MemberExpression"
-
-_MemberExpression_object = Core.Name "object"
-
-_MemberExpression_property = Core.Name "property"
-
-_MemberExpression_computed = Core.Name "computed"
-
-_MemberExpression_optional = Core.Name "optional"
-
--- | A method definition in a class
-data MethodDefinition =
-  MethodDefinition {
-    -- | Method name
-    methodDefinitionKey :: Expression,
-    -- | Method function
-    methodDefinitionValue :: FunctionExpression,
-    -- | Method kind
-    methodDefinitionKind :: MethodKind,
-    -- | Whether the key is computed
-    methodDefinitionComputed :: Bool,
-    -- | Whether the method is static
-    methodDefinitionStatic :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_MethodDefinition = Core.Name "hydra.typeScript.syntax.MethodDefinition"
-
-_MethodDefinition_key = Core.Name "key"
-
-_MethodDefinition_value = Core.Name "value"
-
-_MethodDefinition_kind = Core.Name "kind"
-
-_MethodDefinition_computed = Core.Name "computed"
-
-_MethodDefinition_static = Core.Name "static"
-
--- | The kind of a class method
-data MethodKind =
-  MethodKindConstructor |
-  MethodKindMethod |
-  MethodKindGet |
-  MethodKindSet
-  deriving (Eq, Ord, Read, Show)
-
-_MethodKind = Core.Name "hydra.typeScript.syntax.MethodKind"
-
-_MethodKind_constructor = Core.Name "constructor"
-
-_MethodKind_method = Core.Name "method"
-
-_MethodKind_get = Core.Name "get"
-
-_MethodKind_set = Core.Name "set"
-
--- | A top-level item in a module
-data ModuleItem =
-  ModuleItemStatement Statement |
-  ModuleItemImport ImportDeclaration |
-  ModuleItemExport ExportDeclaration |
-  -- | A top-level interface declaration
-  ModuleItemInterface InterfaceDeclaration |
-  -- | A top-level type alias declaration
-  ModuleItemTypeAlias TypeAliasDeclaration
-  deriving (Eq, Ord, Read, Show)
-
-_ModuleItem = Core.Name "hydra.typeScript.syntax.ModuleItem"
-
-_ModuleItem_statement = Core.Name "statement"
-
-_ModuleItem_import = Core.Name "import"
-
-_ModuleItem_export = Core.Name "export"
-
-_ModuleItem_interface = Core.Name "interface"
-
-_ModuleItem_typeAlias = Core.Name "typeAlias"
-
--- | A module item with optional documentation
-data ModuleItemWithComments =
-  ModuleItemWithComments {
-    -- | The module item
-    moduleItemWithCommentsBody :: ModuleItem,
-    -- | Optional documentation comment
-    moduleItemWithCommentsComments :: (Maybe DocumentationComment)}
-  deriving (Eq, Ord, Read, Show)
-
-_ModuleItemWithComments = Core.Name "hydra.typeScript.syntax.ModuleItemWithComments"
-
-_ModuleItemWithComments_body = Core.Name "body"
-
-_ModuleItemWithComments_comments = Core.Name "comments"
-
--- | Named exports (export {x, y as z})
-data NamedExport =
-  NamedExport {
-    namedExportSpecifiers :: [ExportSpecifier],
-    namedExportSource :: (Maybe StringLiteral)}
-  deriving (Eq, Ord, Read, Show)
-
-_NamedExport = Core.Name "hydra.typeScript.syntax.NamedExport"
-
-_NamedExport_specifiers = Core.Name "specifiers"
-
-_NamedExport_source = Core.Name "source"
-
--- | A numeric literal (integer or floating-point)
-data NumericLiteral =
-  -- | An integer literal
-  NumericLiteralInteger I.Int64 |
-  -- | A floating-point literal
-  NumericLiteralFloat Double
-  deriving (Eq, Ord, Read, Show)
-
-_NumericLiteral = Core.Name "hydra.typeScript.syntax.NumericLiteral"
-
-_NumericLiteral_integer = Core.Name "integer"
-
-_NumericLiteral_float = Core.Name "float"
-
--- | An object expression {a: 1, b: 2}
-type ObjectExpression = [Property]
-
-_ObjectExpression = Core.Name "hydra.typeScript.syntax.ObjectExpression"
-
--- | An object destructuring pattern {a, b: c}
-data ObjectPattern =
-  ObjectPattern {
-    -- | The property patterns
-    objectPatternProperties :: [ObjectPatternProperty]}
-  deriving (Eq, Ord, Read, Show)
-
-_ObjectPattern = Core.Name "hydra.typeScript.syntax.ObjectPattern"
-
-_ObjectPattern_properties = Core.Name "properties"
-
--- | A property in an object pattern
-data ObjectPatternProperty =
-  ObjectPatternPropertyProperty Property |
-  ObjectPatternPropertyRest RestElement
-  deriving (Eq, Ord, Read, Show)
-
-_ObjectPatternProperty = Core.Name "hydra.typeScript.syntax.ObjectPatternProperty"
-
-_ObjectPatternProperty_property = Core.Name "property"
-
-_ObjectPatternProperty_rest = Core.Name "rest"
-
--- | An object type with property signatures
-type ObjectTypeExpression = [PropertySignature]
-
-_ObjectTypeExpression = Core.Name "hydra.typeScript.syntax.ObjectTypeExpression"
-
--- | A parameterized type (e.g., Array<T>, Map<K, V>)
-data ParameterizedTypeExpression =
-  ParameterizedTypeExpression {
-    parameterizedTypeExpressionBase :: TypeExpression,
-    parameterizedTypeExpressionArguments :: [TypeExpression]}
-  deriving (Eq, Ord, Read, Show)
-
-_ParameterizedTypeExpression = Core.Name "hydra.typeScript.syntax.ParameterizedTypeExpression"
-
-_ParameterizedTypeExpression_base = Core.Name "base"
-
-_ParameterizedTypeExpression_arguments = Core.Name "arguments"
-
--- | A binding pattern (for destructuring)
-data Pattern =
-  -- | A simple identifier binding
-  PatternIdentifier Identifier |
-  -- | An object destructuring pattern
-  PatternObject ObjectPattern |
-  -- | An array destructuring pattern
-  PatternArray ArrayPattern |
-  -- | A pattern with default value
-  PatternAssignment AssignmentPattern |
-  -- | A rest element (...x)
-  PatternRest RestElement |
-  -- | A pattern with a TypeScript type annotation (`x: T`)
-  PatternTyped TypedPattern
-  deriving (Eq, Ord, Read, Show)
-
-_Pattern = Core.Name "hydra.typeScript.syntax.Pattern"
-
-_Pattern_identifier = Core.Name "identifier"
-
-_Pattern_object = Core.Name "object"
-
-_Pattern_array = Core.Name "array"
-
-_Pattern_assignment = Core.Name "assignment"
-
-_Pattern_rest = Core.Name "rest"
-
-_Pattern_typed = Core.Name "typed"
-
--- | A TypeScript program (module)
-data Program =
-  Program {
-    -- | The module items
-    programBody :: [ModuleItem],
-    -- | Whether this is a module or script
-    programSourceType :: SourceType}
-  deriving (Eq, Ord, Read, Show)
-
-_Program = Core.Name "hydra.typeScript.syntax.Program"
-
-_Program_body = Core.Name "body"
-
-_Program_sourceType = Core.Name "sourceType"
-
--- | A property in an object expression
-data Property =
-  Property {
-    -- | Property key (identifier, literal, or computed)
-    propertyKey :: Expression,
-    -- | Property value
-    propertyValue :: Expression,
-    -- | Property kind (init, get, set)
-    propertyKind :: PropertyKind,
-    -- | Whether the key is computed [expr]
-    propertyComputed :: Bool,
-    -- | Whether using shorthand syntax {x} for {x: x}
-    propertyShorthand :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_Property = Core.Name "hydra.typeScript.syntax.Property"
-
-_Property_key = Core.Name "key"
-
-_Property_value = Core.Name "value"
-
-_Property_kind = Core.Name "kind"
-
-_Property_computed = Core.Name "computed"
-
-_Property_shorthand = Core.Name "shorthand"
-
--- | The kind of an object property
-data PropertyKind =
-  -- | A normal property initialization
-  PropertyKindInit |
-  -- | A getter
-  PropertyKindGet |
-  -- | A setter
-  PropertyKindSet
-  deriving (Eq, Ord, Read, Show)
-
-_PropertyKind = Core.Name "hydra.typeScript.syntax.PropertyKind"
-
-_PropertyKind_init = Core.Name "init"
-
-_PropertyKind_get = Core.Name "get"
-
-_PropertyKind_set = Core.Name "set"
-
--- | A property signature in an object type
-data PropertySignature =
-  PropertySignature {
-    -- | Property name
-    propertySignatureName :: Identifier,
-    -- | Property type
-    propertySignatureType :: TypeExpression,
-    -- | Whether the property is optional
-    propertySignatureOptional :: Bool,
-    -- | Whether the property is readonly
-    propertySignatureReadonly :: Bool,
-    -- | Optional JSDoc documentation comment to emit above this property
-    propertySignatureComments :: (Maybe DocumentationComment)}
-  deriving (Eq, Ord, Read, Show)
-
-_PropertySignature = Core.Name "hydra.typeScript.syntax.PropertySignature"
-
-_PropertySignature_name = Core.Name "name"
-
-_PropertySignature_type = Core.Name "type"
-
-_PropertySignature_optional = Core.Name "optional"
-
-_PropertySignature_readonly = Core.Name "readonly"
-
-_PropertySignature_comments = Core.Name "comments"
-
--- | A qualified name like 'module.submodule.name'
-type QualifiedName = [Identifier]
-
-_QualifiedName = Core.Name "hydra.typeScript.syntax.QualifiedName"
-
--- | A rest element pattern (...x)
-newtype RestElement =
-  RestElement {
-    unRestElement :: Pattern}
-  deriving (Eq, Ord, Read, Show)
-
-_RestElement = Core.Name "hydra.typeScript.syntax.RestElement"
-
--- | A return statement
-type ReturnStatement = (Maybe Expression)
-
-_ReturnStatement = Core.Name "hydra.typeScript.syntax.ReturnStatement"
-
--- | Whether the program is a module or script
-data SourceType =
-  SourceTypeModule |
-  SourceTypeScript
-  deriving (Eq, Ord, Read, Show)
-
-_SourceType = Core.Name "hydra.typeScript.syntax.SourceType"
-
-_SourceType_module = Core.Name "module"
-
-_SourceType_script = Core.Name "script"
-
--- | A spread element (...x)
-newtype SpreadElement =
-  SpreadElement {
-    unSpreadElement :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_SpreadElement = Core.Name "hydra.typeScript.syntax.SpreadElement"
-
--- | A TypeScript statement
-data Statement =
-  -- | An expression statement
-  StatementExpression Expression |
-  -- | A block statement
-  StatementBlock BlockStatement |
-  -- | An empty statement (;)
-  StatementEmpty |
-  -- | A debugger statement
-  StatementDebugger |
-  -- | A return statement
-  StatementReturn ReturnStatement |
-  -- | A break statement
-  StatementBreak BreakStatement |
-  -- | A continue statement
-  StatementContinue ContinueStatement |
-  -- | An if statement
-  StatementIf IfStatement |
-  -- | A switch statement
-  StatementSwitch SwitchStatement |
-  -- | A throw statement
-  StatementThrow ThrowStatement |
-  -- | A try statement
-  StatementTry TryStatement |
-  -- | A while statement
-  StatementWhile WhileStatement |
-  -- | A do-while statement
-  StatementDoWhile DoWhileStatement |
-  -- | A for statement
-  StatementFor ForStatement |
-  -- | A for-in statement
-  StatementForIn ForInStatement |
-  -- | A for-of statement
-  StatementForOf ForOfStatement |
-  -- | A variable declaration
-  StatementVariableDeclaration VariableDeclaration |
-  -- | A function declaration
-  StatementFunctionDeclaration FunctionDeclaration |
-  -- | A class declaration
-  StatementClassDeclaration ClassDeclaration |
-  -- | A labeled statement
-  StatementLabeled LabeledStatement
-  deriving (Eq, Ord, Read, Show)
-
-_Statement = Core.Name "hydra.typeScript.syntax.Statement"
-
-_Statement_expression = Core.Name "expression"
-
-_Statement_block = Core.Name "block"
-
-_Statement_empty = Core.Name "empty"
-
-_Statement_debugger = Core.Name "debugger"
-
-_Statement_return = Core.Name "return"
-
-_Statement_break = Core.Name "break"
-
-_Statement_continue = Core.Name "continue"
-
-_Statement_if = Core.Name "if"
-
-_Statement_switch = Core.Name "switch"
-
-_Statement_throw = Core.Name "throw"
-
-_Statement_try = Core.Name "try"
-
-_Statement_while = Core.Name "while"
-
-_Statement_doWhile = Core.Name "doWhile"
-
-_Statement_for = Core.Name "for"
-
-_Statement_forIn = Core.Name "forIn"
-
-_Statement_forOf = Core.Name "forOf"
-
-_Statement_variableDeclaration = Core.Name "variableDeclaration"
-
-_Statement_functionDeclaration = Core.Name "functionDeclaration"
-
-_Statement_classDeclaration = Core.Name "classDeclaration"
-
-_Statement_labeled = Core.Name "labeled"
-
--- | A statement with optional documentation
-data StatementWithComments =
-  StatementWithComments {
-    -- | The statement
-    statementWithCommentsBody :: Statement,
-    -- | Optional documentation comment
-    statementWithCommentsComments :: (Maybe DocumentationComment)}
-  deriving (Eq, Ord, Read, Show)
-
-_StatementWithComments = Core.Name "hydra.typeScript.syntax.StatementWithComments"
-
-_StatementWithComments_body = Core.Name "body"
-
-_StatementWithComments_comments = Core.Name "comments"
-
--- | A string literal with quote style
-data StringLiteral =
-  StringLiteral {
-    -- | The string value
-    stringLiteralValue :: String,
-    -- | Whether to use single quotes (true) or double quotes (false)
-    stringLiteralSingleQuote :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_StringLiteral = Core.Name "hydra.typeScript.syntax.StringLiteral"
-
-_StringLiteral_value = Core.Name "value"
-
-_StringLiteral_singleQuote = Core.Name "singleQuote"
-
--- | A case clause in a switch statement
-data SwitchCase =
-  SwitchCase {
-    -- | The test expression (Nothing for default)
-    switchCaseTest :: (Maybe Expression),
-    -- | The statements to execute
-    switchCaseConsequent :: [Statement]}
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchCase = Core.Name "hydra.typeScript.syntax.SwitchCase"
-
-_SwitchCase_test = Core.Name "test"
-
-_SwitchCase_consequent = Core.Name "consequent"
-
--- | A switch statement
-data SwitchStatement =
-  SwitchStatement {
-    switchStatementDiscriminant :: Expression,
-    switchStatementCases :: [SwitchCase]}
-  deriving (Eq, Ord, Read, Show)
-
-_SwitchStatement = Core.Name "hydra.typeScript.syntax.SwitchStatement"
-
-_SwitchStatement_discriminant = Core.Name "discriminant"
-
-_SwitchStatement_cases = Core.Name "cases"
-
--- | A static part of a template literal
-data TemplateElement =
-  TemplateElement {
-    -- | The raw string value
-    templateElementValue :: String,
-    -- | Whether this is the last element
-    templateElementTail :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_TemplateElement = Core.Name "hydra.typeScript.syntax.TemplateElement"
-
-_TemplateElement_value = Core.Name "value"
-
-_TemplateElement_tail = Core.Name "tail"
-
--- | A template literal (backtick string with interpolations)
-data TemplateLiteral =
-  TemplateLiteral {
-    -- | The static string parts
-    templateLiteralQuasis :: [TemplateElement],
-    -- | The interpolated expressions
-    templateLiteralExpressions :: [Expression]}
-  deriving (Eq, Ord, Read, Show)
-
-_TemplateLiteral = Core.Name "hydra.typeScript.syntax.TemplateLiteral"
-
-_TemplateLiteral_quasis = Core.Name "quasis"
-
-_TemplateLiteral_expressions = Core.Name "expressions"
-
--- | A throw statement
-newtype ThrowStatement =
-  ThrowStatement {
-    unThrowStatement :: Expression}
-  deriving (Eq, Ord, Read, Show)
-
-_ThrowStatement = Core.Name "hydra.typeScript.syntax.ThrowStatement"
-
--- | A try statement
-data TryStatement =
-  TryStatement {
-    tryStatementBlock :: BlockStatement,
-    tryStatementHandler :: (Maybe CatchClause),
-    tryStatementFinalizer :: (Maybe BlockStatement)}
-  deriving (Eq, Ord, Read, Show)
-
-_TryStatement = Core.Name "hydra.typeScript.syntax.TryStatement"
-
-_TryStatement_block = Core.Name "block"
-
-_TryStatement_handler = Core.Name "handler"
-
-_TryStatement_finalizer = Core.Name "finalizer"
-
--- | A tuple type ([A, B] or readonly [A, B])
-type TupleTypeExpression = [TypeExpression]
-
-_TupleTypeExpression = Core.Name "hydra.typeScript.syntax.TupleTypeExpression"
-
--- | A TypeScript type alias declaration (type Foo<T> = ...)
-data TypeAliasDeclaration =
-  TypeAliasDeclaration {
-    -- | Alias name
-    typeAliasDeclarationName :: Identifier,
-    -- | Generic parameters
-    typeAliasDeclarationTypeParameters :: [TypeParameter],
-    -- | The right-hand-side type
-    typeAliasDeclarationType :: TypeExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeAliasDeclaration = Core.Name "hydra.typeScript.syntax.TypeAliasDeclaration"
-
-_TypeAliasDeclaration_name = Core.Name "name"
-
-_TypeAliasDeclaration_typeParameters = Core.Name "typeParameters"
-
-_TypeAliasDeclaration_type = Core.Name "type"
-
--- | A type annotation (for JSDoc comments or TypeScript)
-newtype TypeAnnotation =
-  TypeAnnotation {
-    unTypeAnnotation :: TypeExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeAnnotation = Core.Name "hydra.typeScript.syntax.TypeAnnotation"
-
--- | A type expression
-data TypeExpression =
-  -- | A named type (e.g., 'string', 'number', 'MyClass')
-  TypeExpressionIdentifier Identifier |
-  -- | A literal type (e.g., 'hello', 42)
-  TypeExpressionLiteral Literal |
-  -- | An array type
-  TypeExpressionArray ArrayTypeExpression |
-  -- | A function type
-  TypeExpressionFunction FunctionTypeExpression |
-  -- | An object type
-  TypeExpressionObject ObjectTypeExpression |
-  -- | A tuple type (readonly [A, B, C])
-  TypeExpressionTuple TupleTypeExpression |
-  -- | A union type (A | B)
-  TypeExpressionUnion UnionTypeExpression |
-  -- | An intersection type (A & B)
-  TypeExpressionIntersection IntersectionTypeExpression |
-  -- | A parameterized type (e.g., Array<T>, Map<K, V>)
-  TypeExpressionParameterized ParameterizedTypeExpression |
-  -- | An optional type (T | undefined or T?)
-  TypeExpressionOptional TypeExpression |
-  -- | A readonly modifier (readonly T[], readonly [A, B])
-  TypeExpressionReadonly TypeExpression |
-  -- | The 'any' type
-  TypeExpressionAny |
-  -- | The 'unknown' type
-  TypeExpressionUnknown |
-  -- | The 'void' type
-  TypeExpressionVoid |
-  -- | The 'never' type
-  TypeExpressionNever
-  deriving (Eq, Ord, Read, Show)
-
-_TypeExpression = Core.Name "hydra.typeScript.syntax.TypeExpression"
-
-_TypeExpression_identifier = Core.Name "identifier"
-
-_TypeExpression_literal = Core.Name "literal"
-
-_TypeExpression_array = Core.Name "array"
-
-_TypeExpression_function = Core.Name "function"
-
-_TypeExpression_object = Core.Name "object"
-
-_TypeExpression_tuple = Core.Name "tuple"
-
-_TypeExpression_union = Core.Name "union"
-
-_TypeExpression_intersection = Core.Name "intersection"
-
-_TypeExpression_parameterized = Core.Name "parameterized"
-
-_TypeExpression_optional = Core.Name "optional"
-
-_TypeExpression_readonly = Core.Name "readonly"
-
-_TypeExpression_any = Core.Name "any"
-
-_TypeExpression_unknown = Core.Name "unknown"
-
-_TypeExpression_void = Core.Name "void"
-
-_TypeExpression_never = Core.Name "never"
-
--- | A type parameter (generic)
-data TypeParameter =
-  TypeParameter {
-    -- | Parameter name
-    typeParameterName :: Identifier,
-    -- | Optional constraint (extends clause)
-    typeParameterConstraint :: (Maybe TypeExpression),
-    -- | Optional default type
-    typeParameterDefault :: (Maybe TypeExpression)}
-  deriving (Eq, Ord, Read, Show)
-
-_TypeParameter = Core.Name "hydra.typeScript.syntax.TypeParameter"
-
-_TypeParameter_name = Core.Name "name"
-
-_TypeParameter_constraint = Core.Name "constraint"
-
-_TypeParameter_default = Core.Name "default"
-
--- | A pattern with a TypeScript type annotation (`x: T`)
-data TypedPattern =
-  TypedPattern {
-    -- | The underlying binding pattern
-    typedPatternPattern :: Pattern,
-    -- | The TypeScript type annotation
-    typedPatternType :: TypeExpression}
-  deriving (Eq, Ord, Read, Show)
-
-_TypedPattern = Core.Name "hydra.typeScript.syntax.TypedPattern"
-
-_TypedPattern_pattern = Core.Name "pattern"
-
-_TypedPattern_type = Core.Name "type"
-
--- | A unary operation expression
-data UnaryExpression =
-  UnaryExpression {
-    unaryExpressionOperator :: UnaryOperator,
-    unaryExpressionArgument :: Expression,
-    -- | Whether the operator is prefix (true) or postfix (false)
-    unaryExpressionPrefix :: Bool}
-  deriving (Eq, Ord, Read, Show)
-
-_UnaryExpression = Core.Name "hydra.typeScript.syntax.UnaryExpression"
-
-_UnaryExpression_operator = Core.Name "operator"
-
-_UnaryExpression_argument = Core.Name "argument"
-
-_UnaryExpression_prefix = Core.Name "prefix"
-
--- | A unary operator
-data UnaryOperator =
-  -- | -
-  UnaryOperatorNegate |
-  -- | +
-  UnaryOperatorPlus |
-  -- | !
-  UnaryOperatorNot |
-  -- | ~
-  UnaryOperatorBitwiseNot |
-  -- | typeof
-  UnaryOperatorTypeof |
-  -- | void
-  UnaryOperatorVoid |
-  -- | delete
-  UnaryOperatorDelete |
-  -- | ++
-  UnaryOperatorIncrement |
-  -- | --
-  UnaryOperatorDecrement
-  deriving (Eq, Ord, Read, Show)
-
-_UnaryOperator = Core.Name "hydra.typeScript.syntax.UnaryOperator"
-
-_UnaryOperator_negate = Core.Name "negate"
-
-_UnaryOperator_plus = Core.Name "plus"
-
-_UnaryOperator_not = Core.Name "not"
-
-_UnaryOperator_bitwiseNot = Core.Name "bitwiseNot"
-
-_UnaryOperator_typeof = Core.Name "typeof"
-
-_UnaryOperator_void = Core.Name "void"
-
-_UnaryOperator_delete = Core.Name "delete"
-
-_UnaryOperator_increment = Core.Name "increment"
-
-_UnaryOperator_decrement = Core.Name "decrement"
-
--- | A union type (A | B | C)
-type UnionTypeExpression = [TypeExpression]
-
-_UnionTypeExpression = Core.Name "hydra.typeScript.syntax.UnionTypeExpression"
-
--- | A variable declaration (var, let, const)
-data VariableDeclaration =
-  VariableDeclaration {
-    variableDeclarationKind :: VariableKind,
-    variableDeclarationDeclarations :: [VariableDeclarator]}
-  deriving (Eq, Ord, Read, Show)
-
-_VariableDeclaration = Core.Name "hydra.typeScript.syntax.VariableDeclaration"
-
-_VariableDeclaration_kind = Core.Name "kind"
-
-_VariableDeclaration_declarations = Core.Name "declarations"
-
--- | A variable declarator (id = init)
-data VariableDeclarator =
-  VariableDeclarator {
-    variableDeclaratorId :: Pattern,
-    variableDeclaratorInit :: (Maybe Expression)}
-  deriving (Eq, Ord, Read, Show)
-
-_VariableDeclarator = Core.Name "hydra.typeScript.syntax.VariableDeclarator"
-
-_VariableDeclarator_id = Core.Name "id"
-
-_VariableDeclarator_init = Core.Name "init"
-
--- | The kind of variable declaration
-data VariableKind =
-  VariableKindVar |
-  VariableKindLet |
-  VariableKindConst
-  deriving (Eq, Ord, Read, Show)
-
-_VariableKind = Core.Name "hydra.typeScript.syntax.VariableKind"
-
-_VariableKind_var = Core.Name "var"
-
-_VariableKind_let = Core.Name "let"
-
-_VariableKind_const = Core.Name "const"
-
--- | A while statement
-data WhileStatement =
-  WhileStatement {
-    whileStatementTest :: Expression,
-    whileStatementBody :: Statement}
-  deriving (Eq, Ord, Read, Show)
-
-_WhileStatement = Core.Name "hydra.typeScript.syntax.WhileStatement"
-
-_WhileStatement_test = Core.Name "test"
-
-_WhileStatement_body = Core.Name "body"
diff --git a/src/main/haskell/Hydra/Typescript/Coder.hs b/src/main/haskell/Hydra/Typescript/Coder.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Typescript/Coder.hs
@@ -0,0 +1,1232 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | TypeScript code generator: emits TypeScript type declarations from Hydra modules
+
+module Hydra.Typescript.Coder where
+
+import qualified Hydra.Core.Analysis as Analysis
+import qualified Hydra.Core.Annotations as Annotations
+import qualified Hydra.Core.Arity as Arity
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Environment as Environment
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Formatting as Formatting
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Lexical as Lexical
+import qualified Hydra.Core.Overlay.Haskell.Lib.Eithers as Eithers
+import qualified Hydra.Core.Overlay.Haskell.Lib.Equality as Equality
+import qualified Hydra.Core.Overlay.Haskell.Lib.Lists as Lists
+import qualified Hydra.Core.Overlay.Haskell.Lib.Literals as Literals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Logic as Logic
+import qualified Hydra.Core.Overlay.Haskell.Lib.Maps as Maps
+import qualified Hydra.Core.Overlay.Haskell.Lib.Math as Math
+import qualified Hydra.Core.Overlay.Haskell.Lib.Optionals as Optionals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Ordering as Ordering
+import qualified Hydra.Core.Overlay.Haskell.Lib.Pairs as Pairs
+import qualified Hydra.Core.Overlay.Haskell.Lib.Sets as Sets
+import qualified Hydra.Core.Overlay.Haskell.Lib.Strings as Strings
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Names as Names
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Print.Docs as PrintDocs
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Rewriting as Rewriting
+import qualified Hydra.Core.Scoping as Scoping
+import qualified Hydra.Core.Serialization as Serialization
+import qualified Hydra.Core.Sorting as Sorting
+import qualified Hydra.Core.Strip as Strip
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variables as Variables
+import qualified Hydra.Core.Variants as Variants
+import qualified Hydra.Typescript.Language as Language
+import qualified Hydra.Typescript.Serde as Serde
+import qualified Hydra.Typescript.Syntax as Syntax
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
+import qualified Data.Scientific as Sci
+import Data.Void
+import qualified Data.Map as M
+import qualified Data.Set as S
+
+-- | Analyze a term as a TypeScript function, using the Graph as the analysis environment
+analyzeTypeScriptFunction :: Typing.InferenceContext -> Graph.Graph -> Model.Term -> Either t0 (Typing.FunctionStructure Graph.Graph)
+analyzeTypeScriptFunction cx g term = Analysis.analyzeFunctionTerm cx tsEnvGetGraph tsEnvSetGraph g term
+
+-- | Collect the bound parameter names from a chain of nested foralls, in outer-to-inner order; stops at the first non-forall type
+collectForallParams :: Model.Type -> [Model.Name]
+collectForallParams t =
+
+      let dt = Strip.deannotateType t
+      in case dt of
+        Model.TypeForall v0 -> Lists.cons (Model.forallTypeParameter v0) (collectForallParams (Model.forallTypeBody v0))
+        _ -> []
+
+-- | Collect the names of every type referenced in a type tree that belongs to a different namespace than the current module, for computing the imports needed at the top of the emitted .ts file
+collectImports :: Packaging.ModuleName -> Model.Type -> S.Set Model.Name
+collectImports currentNs t =
+
+      let vars = Variables.freeVariablesInType t
+      in (filterNonLocalNames currentNs vars)
+
+-- | Collect type imports referenced inside a term tree (lambda bodies, type applications, let-binding schemes), supplementing the top-level typeScheme walk
+collectInnerTypeImports :: Packaging.ModuleName -> Model.Term -> S.Set Model.Name
+collectInnerTypeImports currentNs term =
+
+      let subs = Rewriting.subterms term
+          ownVars =
+                  case (Strip.deannotateTerm term) of
+                    Model.TermLambda v0 -> Optionals.match (Model.lambdaDomain v0) Sets.empty (\d -> Variables.freeVariablesInType d)
+                    Model.TermTypeApplication v0 -> Variables.freeVariablesInType (Model.typeApplicationTermType v0)
+                    Model.TermTypeLambda _ -> Sets.empty
+                    Model.TermLet v0 -> Lists.foldl (\acc -> \b -> Optionals.match (Model.bindingTypeScheme b) acc (\ts -> Sets.union acc (Variables.freeVariablesInType (Model.typeSchemeBody ts)))) Sets.empty (Model.letBindings v0)
+                    _ -> Sets.empty
+          childVars = Lists.foldl (\acc -> \s -> Sets.union acc (collectInnerTypeImports currentNs s)) Sets.empty subs
+      in (filterNonLocalNames currentNs (Sets.union ownVars childVars))
+
+-- | Like collectImports but walks a Term, gathering free term-level variables that resolve to a different module
+collectTermImports :: Packaging.ModuleName -> Model.Term -> S.Set Model.Name
+collectTermImports currentNs t =
+
+      let vars = Variables.freeVariablesInTerm t
+      in (filterNonLocalNames currentNs vars)
+
+-- | Decode a canonical decimal digit string into a ((sign, digits), scale) nested pair
+decimalDigitsAndScale :: String -> ((String, String), Int)
+decimalDigitsAndScale s =
+
+      let eParts = Strings.splitOn "e" s
+          mantissa = Optionals.withDefault "" (Lists.head eParts)
+          expText = Optionals.withDefault "" (Lists.head (Lists.drop 1 eParts))
+          expTextUnplussed =
+                  Logic.ifElse (Equality.equal (Optionals.withDefault 0 (Strings.charAt 0 expText)) 43) (Strings.fromList (Lists.drop 1 (Strings.toList expText))) expText
+          expPart = Optionals.withDefault 0 (Literals.parseInt32 expTextUnplussed)
+          isNeg = Equality.equal (Optionals.withDefault 0 (Strings.charAt 0 mantissa)) 45
+          unsigned = Logic.ifElse isNeg (Strings.fromList (Lists.drop 1 (Strings.toList mantissa))) mantissa
+          dotParts = Strings.splitOn "." unsigned
+          intPart = Optionals.withDefault "" (Lists.head dotParts)
+          fracPart = Optionals.withDefault "" (Lists.head (Lists.drop 1 dotParts))
+          rawDigits = Strings.concat2 intPart fracPart
+          rawScale = Math.sub (Strings.length fracPart) expPart
+          sign = Logic.ifElse isNeg "-" ""
+      in (Logic.ifElse (Ordering.lt rawScale 0) ((sign, (Strings.concat2 rawDigits (Strings.fromList (Lists.replicate (Math.negate rawScale) 48)))), 0) ((sign, rawDigits), rawScale))
+
+-- | Find the free variables of a term that are referenced eagerly, i.e. outside of any nested lambda body; used to break false dependency cycles caused by DSL-level thunks such as hydra.core.parsers.lazy
+eagerFreeVariablesInTerm :: Model.Term -> S.Set Model.Name
+eagerFreeVariablesInTerm term =
+
+      let dfltVars =
+              \_ -> Lists.foldl (\s -> \t -> Sets.union s (eagerFreeVariablesInTerm t)) Sets.empty (Rewriting.subterms term)
+      in case term of
+        Model.TermLambda _ -> Sets.empty
+        Model.TermLet v0 -> Sets.difference (dfltVars ()) (Sets.fromList (Lists.map (\b -> Model.bindingName b) (Model.letBindings v0)))
+        Model.TermVariable v0 -> Sets.singleton v0
+        _ -> dfltVars ()
+
+-- | Encode a let-binding as a TS statement inside an enclosing function body, hoisting lambda-valued bindings as nested function declarations
+encodeBindingAsStatement :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> Model.Binding -> Syntax.Statement
+encodeBindingAsStatement cx g currentNs b =
+
+      let bname = Model.bindingName b
+          lname = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Names.localNameOf bname)
+          bterm = Model.bindingTerm b
+          dterm = Strip.deannotateTerm bterm
+      in case dterm of
+        Model.TermLambda _ ->
+          let innerFunDecl =
+                  functionDeclarationFromTerm cx g currentNs lname bterm (Optionals.bind (Model.bindingTypeScheme b) (\ts -> Just (Model.typeSchemeBody ts)))
+          in (Syntax.StatementFunctionDeclaration innerFunDecl)
+        _ ->
+          let expr = encodeTerm cx g currentNs bterm
+              declarator =
+                      Syntax.VariableDeclarator {
+                        Syntax.variableDeclaratorId = (Syntax.PatternIdentifier (tsIdent lname)),
+                        Syntax.variableDeclaratorInit = (Just expr)}
+              varDecl =
+                      Syntax.VariableDeclaration {
+                        Syntax.variableDeclarationKind = Syntax.VariableKindConst,
+                        Syntax.variableDeclarationDeclarations = [
+                          declarator]}
+          in (Syntax.StatementVariableDeclaration varDecl)
+
+-- | Emit a fully-applied primitive call with selected arguments wrapped in thunks, per a parallel list of laziness flags
+encodeLazyCall :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> Model.Term -> [Model.Term] -> [Bool] -> Syntax.Expression
+encodeLazyCall cx g currentNs headTerm args lazyFlags =
+
+      let headExpr = encodeTerm cx g currentNs headTerm
+          paired = Lists.zip args lazyFlags
+          renderArg =
+                  \p ->
+                    let argTerm = Pairs.first p
+                        isLazy = Pairs.second p
+                        expr = encodeTerm cx g currentNs argTerm
+                    in (Logic.ifElse isLazy (tsArrow [] expr) expr)
+          argExprs = Lists.map renderArg paired
+      in (tsCall headExpr argExprs)
+
+-- | Render a Hydra literal as a TypeScript expression
+encodeLiteral :: Model.Literal -> Syntax.Expression
+encodeLiteral lit =
+
+      let litExpr = \lit -> Syntax.ExpressionLiteral lit
+          numLit = \i -> litExpr (Syntax.LiteralNumber (Syntax.NumericLiteralInteger i))
+          floatLit = \f -> litExpr (Syntax.LiteralNumber (Syntax.NumericLiteralFloat f))
+          strLit =
+                  \s -> litExpr (Syntax.LiteralString (Syntax.StringLiteral {
+                    Syntax.stringLiteralValue = s,
+                    Syntax.stringLiteralSingleQuote = False}))
+          boolLit = \b -> litExpr (Syntax.LiteralBoolean b)
+          bigIntCall = \txt -> tsCall (tsExprIdent "BigInt") [
+                strLit txt]
+      in case lit of
+        Model.LiteralBinary v0 -> strLit (Literals.binaryToBase64 v0)
+        Model.LiteralBoolean v0 -> boolLit v0
+        Model.LiteralDecimal v0 ->
+          let parts = decimalDigitsAndScale (Literals.printDecimal v0)
+              signDigits = Pairs.first parts
+              scale = Pairs.second parts
+              coefficientText = Strings.concat2 (Pairs.first signDigits) (Pairs.second signDigits)
+          in (tsObject [
+            ("coefficient", (bigIntCall coefficientText)),
+            ("scale", (numLit (Literals.bigintToInt64 (Literals.int32ToBigint scale))))])
+        Model.LiteralString v0 -> strLit v0
+        Model.LiteralInteger v0 -> case v0 of
+          Model.IntegerValueBigint v1 -> bigIntCall (Literals.printBigint v1)
+          Model.IntegerValueInt8 v1 -> numLit (Literals.bigintToInt64 (Literals.int8ToBigint v1))
+          Model.IntegerValueInt16 v1 -> numLit (Literals.bigintToInt64 (Literals.int16ToBigint v1))
+          Model.IntegerValueInt32 v1 -> numLit (Literals.bigintToInt64 (Literals.int32ToBigint v1))
+          Model.IntegerValueInt64 v1 -> bigIntCall (Literals.printInt64 v1)
+          Model.IntegerValueUint8 v1 -> numLit (Literals.bigintToInt64 (Literals.uint8ToBigint v1))
+          Model.IntegerValueUint16 v1 -> numLit (Literals.bigintToInt64 (Literals.uint16ToBigint v1))
+          Model.IntegerValueUint32 v1 -> numLit (Literals.bigintToInt64 (Literals.uint32ToBigint v1))
+          Model.IntegerValueUint64 v1 -> bigIntCall (Literals.printUint64 v1)
+          _ -> numLit (Literals.bigintToInt64 (Literals.int32ToBigint 0))
+        Model.LiteralFloat v0 -> case v0 of
+          Model.FloatValueFloat32 v1 -> floatLit (Literals.float32ToFloat64 v1)
+          Model.FloatValueFloat64 v1 -> floatLit v1
+          _ -> floatLit 0.0
+        _ -> litExpr Syntax.LiteralNull
+
+-- | Map a Hydra literal type to a TypeScript type expression
+encodeLiteralType :: Model.LiteralType -> Syntax.TypeExpression
+encodeLiteralType lt =
+    case lt of
+      Model.LiteralTypeBinary -> tsParamApp1 "ReadonlyArray" (tsNamedType "number")
+      Model.LiteralTypeBoolean -> tsNamedType "boolean"
+      Model.LiteralTypeDecimal -> Syntax.TypeExpressionObject [
+        tsPropSig "coefficient" False (tsNamedType "bigint"),
+        (tsPropSig "scale" False (tsNamedType "number"))]
+      Model.LiteralTypeFloat v0 -> case v0 of
+        Model.FloatTypeFloat32 -> tsNamedType "number"
+        Model.FloatTypeFloat64 -> tsNamedType "number"
+      Model.LiteralTypeInteger v0 -> case v0 of
+        Model.IntegerTypeBigint -> tsNamedType "bigint"
+        Model.IntegerTypeInt8 -> tsNamedType "number"
+        Model.IntegerTypeInt16 -> tsNamedType "number"
+        Model.IntegerTypeInt32 -> tsNamedType "number"
+        Model.IntegerTypeInt64 -> tsNamedType "bigint"
+        Model.IntegerTypeUint8 -> tsNamedType "number"
+        Model.IntegerTypeUint16 -> tsNamedType "number"
+        Model.IntegerTypeUint32 -> tsNamedType "number"
+        Model.IntegerTypeUint64 -> tsNamedType "bigint"
+      Model.LiteralTypeString -> tsNamedType "string"
+
+-- | Build a TS function parameter as a pattern, typed unless the domain is the analyze pass's untyped-variable sentinel
+encodeParam :: t0 -> t1 -> Packaging.ModuleName -> Model.Name -> Model.Type -> Syntax.Pattern
+encodeParam cx g currentNs pname dom =
+
+      let nstr = sanitizeParamName pname
+      in case (Strip.deannotateType dom) of
+        Model.TypeVariable _ -> tsTypedIdent nstr Syntax.TypeExpressionAny
+        _ -> tsTypedIdent nstr (encodeTypeOrAny cx g currentNs dom)
+
+-- | Render a Hydra term as a TypeScript expression
+encodeTerm :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> Model.Term -> Syntax.Expression
+encodeTerm cx g currentNs term =
+    case term of
+      Model.TermAnnotated v0 -> encodeTerm cx g currentNs (Model.annotatedTermBody v0)
+      Model.TermLiteral v0 -> encodeLiteral v0
+      Model.TermVariable v0 ->
+        let local = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Names.localNameOf v0)
+            varExpr =
+                    Optionals.match (Names.moduleNameOf v0) (tsExprIdent local) (\ns -> Logic.ifElse (Equality.equal (Packaging.unModuleName currentNs) (Packaging.unModuleName ns)) (tsExprIdent local) (
+                      let nsSegs = Lists.drop 1 (Strings.splitOn "." (Packaging.unModuleName ns))
+                          alias = Strings.concat2 "$mod_" (Strings.join "_" nsSegs)
+                      in (tsMember (tsExprIdent alias) local)))
+        in (Optionals.match (Lexical.lookupPrimitive g v0) varExpr (\prim ->
+          let isZeroArityEffect =
+                  Logic.and (Equality.equal (Arity.primitiveArity prim) 0) (Logic.not (Packaging.primitiveDefinitionIsPure (Graph.primitiveDefinition prim)))
+          in (Logic.ifElse isZeroArityEffect (tsCall varExpr []) varExpr)))
+      Model.TermLambda v0 ->
+        let lamTerm = Model.TermLambda v0
+            fsLE = analyzeTypeScriptFunction cx g lamTerm
+            fsL =
+                    Eithers.either (\_err -> Typing.FunctionStructure {
+                      Typing.functionStructureTypeParams = [],
+                      Typing.functionStructureParams = [],
+                      Typing.functionStructureBindings = [],
+                      Typing.functionStructureBody = lamTerm,
+                      Typing.functionStructureDomains = [],
+                      Typing.functionStructureCodomain = Nothing,
+                      Typing.functionStructureEnvironment = g}) (\ok -> ok) fsLE
+            fsLParams = Typing.functionStructureParams fsL
+            fsLDoms = Typing.functionStructureDomains fsL
+            fsLBindings = Typing.functionStructureBindings fsL
+            fsLBody = Typing.functionStructureBody fsL
+            fsLEnv = Typing.functionStructureEnvironment fsL
+            innerBody =
+                    Logic.ifElse (Lists.isEmpty fsLBindings) fsLBody (Model.TermLet (Model.Let {
+                      Model.letBindings = fsLBindings,
+                      Model.letBody = fsLBody}))
+            paramAcc =
+                    Lists.foldl (\acc -> \pn ->
+                      let idx = Pairs.first acc
+                          pats = Pairs.second acc
+                          raw = Names.localNameOf pn
+                          uniq = Logic.ifElse (Equality.equal raw "_") (Strings.concat2 "_" (Literals.printInt32 idx)) raw
+                          pat = tsTypedIdent (Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords uniq) Syntax.TypeExpressionAny
+                      in (Math.add idx 1, (Lists.concat2 pats [
+                        pat]))) (0, []) fsLParams
+            paramPatterns = Pairs.second paramAcc
+            bExpr = encodeTerm cx fsLEnv currentNs innerBody
+        in (tsArrowTyped paramPatterns bExpr)
+      Model.TermApplication v0 ->
+        let asTerm = Model.TermApplication v0
+            flat = flattenApplication asTerm
+            headTerm = Pairs.first flat
+            args = Pairs.second flat
+            mName = termHeadVariable headTerm
+            argc = Lists.length args
+            lazyMaybe =
+                    Optionals.match mName Nothing (\n ->
+                      let lazyFlags = lazyFlagsForPrimitive g n
+                          anyLazy = Lists.foldl (\b -> \f -> Logic.or b f) False lazyFlags
+                      in (Logic.ifElse (Logic.and anyLazy (Equality.equal argc (Lists.length lazyFlags))) (Just (encodeLazyCall cx g currentNs headTerm args lazyFlags)) Nothing))
+        in (Optionals.match lazyMaybe (
+          let dHead = Strip.deannotateAndDetypeTerm headTerm
+              encArgs = Lists.map (encodeTerm cx g currentNs) args
+          in case dHead of
+            Model.TermProject v1 -> Logic.ifElse (Lists.isEmpty encArgs) (
+              let headExpr = encodeTerm cx g currentNs headTerm
+              in headExpr) (
+              let fname = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Model.unName (Model.projectionFieldName v1))
+                  firstA = Optionals.withDefault (tsExprIdent "undefined") (Lists.head encArgs)
+                  restA = Lists.drop 1 encArgs
+                  fieldExpr = tsMember firstA fname
+              in (Logic.ifElse (Lists.isEmpty restA) fieldExpr (tsCall fieldExpr restA)))
+            Model.TermUnwrap _ -> Logic.ifElse (Lists.isEmpty encArgs) (
+              let headExpr = encodeTerm cx g currentNs headTerm
+              in headExpr) (
+              let firstA = Optionals.withDefault (tsExprIdent "undefined") (Lists.head encArgs)
+                  restA = Lists.drop 1 encArgs
+                  valueExpr = tsMember firstA "value"
+              in (Logic.ifElse (Lists.isEmpty restA) valueExpr (tsCall valueExpr restA)))
+            _ ->
+              let headExpr = encodeTerm cx g currentNs headTerm
+              in (tsCall headExpr encArgs)) (\e -> e))
+      Model.TermUnit -> tsUndefined
+      Model.TermList v0 -> tsArray (Lists.map (encodeTerm cx g currentNs) v0)
+      Model.TermSet v0 -> tsNew (tsExprIdent "Set") [
+        tsArray (Lists.map (encodeTerm cx g currentNs) (Sets.toList v0))]
+      Model.TermMap v0 -> tsNew (tsExprIdent "Map") [
+        tsArray (Lists.map (\entry -> tsArray [
+          encodeTerm cx g currentNs (Pairs.first entry),
+          (encodeTerm cx g currentNs (Pairs.second entry))]) (Maps.toList v0))]
+      Model.TermPair v0 -> tsAsAny (tsArray [
+        encodeTerm cx g currentNs (Pairs.first v0),
+        (encodeTerm cx g currentNs (Pairs.second v0))])
+      Model.TermOptional v0 -> Optionals.match v0 (tsAsAny (tsObject [
+        ("tag", (tsExprStr "none"))])) (\v -> tsAsAny (tsObject [
+        ("tag", (tsExprStr "given")),
+        ("value", (encodeTerm cx g currentNs v))]))
+      Model.TermRecord v0 ->
+        let fields = Model.recordFields v0
+        in (tsObject (Lists.map (\f -> (
+          Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Model.unName (Model.fieldName f)),
+          (encodeTerm cx g currentNs (Model.fieldTerm f)))) fields))
+      Model.TermInject v0 ->
+        let fname = Model.unName (Model.fieldName (Model.injectionField v0))
+            fterm = Model.fieldTerm (Model.injectionField v0)
+            isUnit =
+                    case (Strip.deannotateTerm fterm) of
+                      Model.TermUnit -> True
+                      _ -> False
+        in (Logic.ifElse isUnit (tsAsAny (tsObject [
+          ("tag", (tsExprStr fname))])) (tsAsAny (tsObject [
+          ("tag", (tsExprStr fname)),
+          ("value", (encodeTerm cx g currentNs fterm))])))
+      Model.TermWrap v0 -> tsObject [
+        ("value", (encodeTerm cx g currentNs (Model.wrappedTermBody v0)))]
+      Model.TermLet v0 ->
+        let lt2 = thunkLazyLet v0
+            bindings = sortBindingsTopologically (Model.letBindings lt2)
+            body = Model.letBody lt2
+            encodedBody = encodeTerm cx g currentNs body
+            bindingStmts = Lists.map (\b -> encodeBindingAsStatement cx g currentNs b) bindings
+            returnStmt = Syntax.StatementReturn (Just encodedBody)
+            stmts = Lists.concat2 bindingStmts [
+                  returnStmt]
+            iifeArrow =
+                    Syntax.ExpressionArrow (Syntax.ArrowFunctionExpression {
+                      Syntax.arrowFunctionExpressionParams = [],
+                      Syntax.arrowFunctionExpressionBody = (Syntax.ArrowFunctionBodyBlock stmts),
+                      Syntax.arrowFunctionExpressionAsync = False})
+        in (tsCall iifeArrow [])
+      Model.TermTypeApplication v0 -> encodeTerm cx g currentNs (Model.typeApplicationTermBody v0)
+      Model.TermTypeLambda v0 -> encodeTerm cx g currentNs (Model.typeLambdaBody v0)
+      Model.TermProject v0 ->
+        let fname = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Model.unName (Model.projectionFieldName v0))
+        in (tsArrowTyped [
+          tsTypedIdent "x" Syntax.TypeExpressionAny] (tsMember (tsExprIdent "x") fname))
+      Model.TermUnwrap _ -> tsArrowTyped [
+        tsTypedIdent "x" Syntax.TypeExpressionAny] (tsMember (tsExprIdent "x") "value")
+      Model.TermCases v0 ->
+        let armFields = Model.caseStatementCases v0
+            defaultMaybe = Model.caseStatementDefault v0
+            uVar = "u"
+            uExpr = tsAsAny (tsExprIdent uVar)
+            uTag = tsMember uExpr "tag"
+            uValue = tsMember uExpr "value"
+            armCases =
+                    Lists.map (\f ->
+                      let fname = Model.unName (Model.caseAlternativeName f)
+                          armExpr = encodeTerm cx g currentNs (Model.caseAlternativeHandler f)
+                          callExpr = tsCall armExpr [
+                                uValue]
+                      in Syntax.SwitchCase {
+                        Syntax.switchCaseTest = (Just (tsExprStr fname)),
+                        Syntax.switchCaseConsequent = [
+                          Syntax.StatementReturn (Just callExpr)]}) armFields
+            defaultCase =
+                    Optionals.match defaultMaybe (Syntax.SwitchCase {
+                      Syntax.switchCaseTest = Nothing,
+                      Syntax.switchCaseConsequent = [
+                        Syntax.StatementReturn (Just (tsCall (tsExprIdent "(() => { throw new Error('unmatched case'); })") []))]}) (\dt ->
+                      let dExpr = encodeTerm cx g currentNs dt
+                      in Syntax.SwitchCase {
+                        Syntax.switchCaseTest = Nothing,
+                        Syntax.switchCaseConsequent = [
+                          Syntax.StatementReturn (Just dExpr)]})
+            allCases = Lists.concat2 armCases [
+                  defaultCase]
+            switchStmt =
+                    Syntax.StatementSwitch (Syntax.SwitchStatement {
+                      Syntax.switchStatementDiscriminant = uTag,
+                      Syntax.switchStatementCases = allCases})
+        in (Syntax.ExpressionArrow (Syntax.ArrowFunctionExpression {
+          Syntax.arrowFunctionExpressionParams = [
+            Syntax.PatternIdentifier (tsIdent uVar)],
+          Syntax.arrowFunctionExpressionBody = (Syntax.ArrowFunctionBodyBlock [
+            switchStmt]),
+          Syntax.arrowFunctionExpressionAsync = False}))
+      Model.TermEither v0 -> Eithers.either (\l -> tsAsAny (tsObject [
+        ("tag", (tsExprStr "left")),
+        ("value", (encodeTerm cx g currentNs l))])) (\r -> tsAsAny (tsObject [
+        ("tag", (tsExprStr "right")),
+        ("value", (encodeTerm cx g currentNs r))])) v0
+      _ -> tsExprIdent "null"
+
+-- | Render a Hydra term definition as a TypeScript module item
+encodeTermDefinition :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> Packaging.TermDefinition -> (Maybe String, Syntax.ModuleItem)
+encodeTermDefinition cx g currentNs td =
+
+      let name = Packaging.termDefinitionName td
+          lname = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Names.localNameOf name)
+          rawTerm = Packaging.termDefinitionBody td
+          mdoc = Eithers.either (\_ -> Nothing) (\x_ -> x_) (Annotations.getTermDescription cx g rawTerm)
+          asExport = \stmt -> Syntax.ModuleItemExport (Syntax.ExportDeclarationDeclaration stmt)
+          mScheme =
+                  Optionals.bind (Packaging.termDefinitionSignature td) (\sig -> Just (Model.typeSchemeBody (Scoping.termSignatureToTypeScheme sig)))
+          dterm = Strip.deannotateTerm rawTerm
+          funDecl = functionDeclarationFromTerm cx g currentNs lname rawTerm mScheme
+          asFunDecl = asExport (Syntax.StatementFunctionDeclaration funDecl)
+          item =
+                  case dterm of
+                    Model.TermLambda _ -> asFunDecl
+                    Model.TermTypeLambda _ -> asFunDecl
+                    _ ->
+                      let expr = encodeTerm cx g currentNs rawTerm
+                          declarator =
+                                  Syntax.VariableDeclarator {
+                                    Syntax.variableDeclaratorId = (Syntax.PatternIdentifier (tsIdent lname)),
+                                    Syntax.variableDeclaratorInit = (Just expr)}
+                          varDecl =
+                                  Syntax.VariableDeclaration {
+                                    Syntax.variableDeclarationKind = Syntax.VariableKindConst,
+                                    Syntax.variableDeclarationDeclarations = [
+                                      declarator]}
+                      in (asExport (Syntax.StatementVariableDeclaration varDecl))
+      in (mdoc, item)
+
+-- | Map a Hydra type to a TypeScript type expression
+encodeType :: t0 -> t1 -> Packaging.ModuleName -> Model.Type -> Either t2 Syntax.TypeExpression
+encodeType cx g currentNs t =
+
+      let typ = Strip.deannotateType t
+      in case typ of
+        Model.TypeAnnotated v0 -> encodeType cx g currentNs (Model.annotatedTypeBody v0)
+        Model.TypeApplication v0 ->
+          let fnTyp = Model.applicationTypeFunction v0
+              argTyp = Model.applicationTypeArgument v0
+          in (Eithers.bind (encodeType cx g currentNs fnTyp) (\encFn -> Eithers.bind (encodeType cx g currentNs argTyp) (\encArg -> case encFn of
+            Syntax.TypeExpressionIdentifier _ -> Right (Syntax.TypeExpressionParameterized (Syntax.ParameterizedTypeExpression {
+              Syntax.parameterizedTypeExpressionBase = encFn,
+              Syntax.parameterizedTypeExpressionArguments = [
+                encArg]}))
+            Syntax.TypeExpressionParameterized v1 -> Right (Syntax.TypeExpressionParameterized (Syntax.ParameterizedTypeExpression {
+              Syntax.parameterizedTypeExpressionBase = (Syntax.parameterizedTypeExpressionBase v1),
+              Syntax.parameterizedTypeExpressionArguments = (Lists.concat2 (Syntax.parameterizedTypeExpressionArguments v1) [
+                encArg])}))
+            _ -> Right encFn)))
+        Model.TypeForall v0 -> encodeType cx g currentNs (Model.forallTypeBody v0)
+        Model.TypeUnit -> Right Syntax.TypeExpressionVoid
+        Model.TypeVoid -> Right Syntax.TypeExpressionNever
+        Model.TypeLiteral v0 -> Right (encodeLiteralType v0)
+        Model.TypeList v0 -> Eithers.map (\enc -> tsParamApp1 "ReadonlyArray" enc) (encodeType cx g currentNs v0)
+        Model.TypeSet v0 -> Eithers.map tsReadonlySet (encodeType cx g currentNs v0)
+        Model.TypeMap v0 -> Eithers.bind (encodeType cx g currentNs (Model.mapTypeKeys v0)) (\kt -> Eithers.bind (encodeType cx g currentNs (Model.mapTypeValues v0)) (\vt -> Right (tsReadonlyMap kt vt)))
+        Model.TypeOptional v0 -> Eithers.map (\enc -> Syntax.TypeExpressionUnion [
+          Syntax.TypeExpressionObject [
+            tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
+              Syntax.stringLiteralValue = "given",
+              Syntax.stringLiteralSingleQuote = False}))),
+            (tsPropSig "value" False enc)],
+          (Syntax.TypeExpressionObject [
+            tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
+              Syntax.stringLiteralValue = "none",
+              Syntax.stringLiteralSingleQuote = False})))])]) (encodeType cx g currentNs v0)
+        Model.TypeEither v0 -> Eithers.bind (encodeType cx g currentNs (Model.eitherTypeLeft v0)) (\lt -> Eithers.bind (encodeType cx g currentNs (Model.eitherTypeRight v0)) (\rt ->
+          let leftArm =
+                  Syntax.TypeExpressionObject [
+                    tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
+                      Syntax.stringLiteralValue = "left",
+                      Syntax.stringLiteralSingleQuote = False}))),
+                    (tsPropSig "value" False lt)]
+              rightArm =
+                      Syntax.TypeExpressionObject [
+                        tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
+                          Syntax.stringLiteralValue = "right",
+                          Syntax.stringLiteralSingleQuote = False}))),
+                        (tsPropSig "value" False rt)]
+          in (Right (Syntax.TypeExpressionUnion [
+            leftArm,
+            rightArm]))))
+        Model.TypePair v0 -> Eithers.bind (encodeType cx g currentNs (Model.pairTypeFirst v0)) (\ft -> Eithers.bind (encodeType cx g currentNs (Model.pairTypeSecond v0)) (\st -> Right (tsTuple [
+          ft,
+          st])))
+        Model.TypeFunction v0 -> Eithers.bind (encodeType cx g currentNs (Model.functionTypeDomain v0)) (\dom -> Eithers.bind (encodeType cx g currentNs (Model.functionTypeCodomain v0)) (\cod -> Right (Syntax.TypeExpressionFunction (Syntax.FunctionTypeExpression {
+          Syntax.functionTypeExpressionTypeParameters = [],
+          Syntax.functionTypeExpressionParameters = [
+            dom],
+          Syntax.functionTypeExpressionReturnType = cod}))))
+        Model.TypeVariable v0 ->
+          let lname = Formatting.capitalize (Names.localNameOf v0)
+          in (Optionals.match (Names.moduleNameOf v0) (Right (tsNamedType lname)) (\ns -> Logic.ifElse (Equality.equal (Packaging.unModuleName currentNs) (Packaging.unModuleName ns)) (Right (tsNamedType lname)) (
+            let nsSegs = Lists.drop 1 (Strings.splitOn "." (Packaging.unModuleName ns))
+                typeAlias = Strings.concat2 "$type_" (Strings.join "_" nsSegs)
+            in (Right (tsNamedType (Strings.concat [
+              typeAlias,
+              ".",
+              lname]))))))
+        Model.TypeWrap v0 -> encodeType cx g currentNs v0
+        Model.TypeRecord v0 -> Eithers.bind (Eithers.mapList (\ft ->
+          let fname = Model.unName (Model.fieldTypeName ft)
+              ftyp = Model.fieldTypeType ft
+          in (Eithers.bind (encodeType cx g currentNs ftyp) (\sftyp -> Right (tsPropSig fname False sftyp)))) v0) (\members -> Right (Syntax.TypeExpressionObject members))
+        Model.TypeUnion v0 -> Eithers.bind (Eithers.mapList (\ft ->
+          let fname = Model.unName (Model.fieldTypeName ft)
+              ftyp = Model.fieldTypeType ft
+          in (Eithers.bind (encodeType cx g currentNs ftyp) (\sftyp -> Right (Syntax.TypeExpressionObject [
+            tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
+              Syntax.stringLiteralValue = fname,
+              Syntax.stringLiteralSingleQuote = False}))),
+            (tsPropSig "value" False sftyp)])))) v0) (\arms -> Right (Syntax.TypeExpressionUnion arms))
+
+-- | Encode a Hydra type definition as an interface declaration, a discriminated-union type alias, or a plain type alias
+encodeTypeDefinition :: t0 -> Graph.Graph -> Packaging.ModuleName -> Packaging.TypeDefinition -> Either Errors.Error (Maybe String, Syntax.ModuleItem)
+encodeTypeDefinition cx g currentNs tdef =
+
+      let name = Packaging.typeDefinitionName tdef
+          typScheme = Packaging.typeDefinitionBody tdef
+          rawTyp = Model.typeSchemeBody typScheme
+          lname = Formatting.capitalize (Names.localNameOf name)
+      in (Eithers.bind (Annotations.getTypeDescription cx g rawTyp) (\mdoc ->
+        let forallParams = collectForallParams rawTyp
+            typ = stripForalls rawTyp
+            typeParams = Lists.map (\v -> tsParam (Formatting.capitalize (Model.unName v))) forallParams
+            dtyp = Strip.deannotateType typ
+        in case dtyp of
+          Model.TypeRecord v0 -> Eithers.bind (Eithers.mapList (\ft ->
+            let fname = Model.unName (Model.fieldTypeName ft)
+                ftyp = Model.fieldTypeType ft
+            in (Eithers.bind (encodeType cx g currentNs ftyp) (\sftyp -> Eithers.bind (Annotations.commentsFromFieldType cx g ft) (\mfdoc -> Right (tsPropSigWithDoc fname False sftyp (mkDocComment mfdoc)))))) v0) (\members -> Right (
+            mdoc,
+            (Syntax.ModuleItemInterface (Syntax.InterfaceDeclaration {
+              Syntax.interfaceDeclarationName = (tsIdent lname),
+              Syntax.interfaceDeclarationTypeParameters = typeParams,
+              Syntax.interfaceDeclarationExtends = [],
+              Syntax.interfaceDeclarationMembers = members}))))
+          Model.TypeUnion v0 -> Eithers.bind (Eithers.mapList (\ft ->
+            let fname = Model.unName (Model.fieldTypeName ft)
+                ftyp = Model.fieldTypeType ft
+                dtyp2 = Strip.deannotateType ftyp
+            in case dtyp2 of
+              Model.TypeUnit -> Right (Syntax.TypeExpressionObject [
+                tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
+                  Syntax.stringLiteralValue = fname,
+                  Syntax.stringLiteralSingleQuote = False})))])
+              _ -> Eithers.bind (encodeType cx g currentNs ftyp) (\sftyp -> Right (Syntax.TypeExpressionObject [
+                tsPropSig "tag" False (Syntax.TypeExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
+                  Syntax.stringLiteralValue = fname,
+                  Syntax.stringLiteralSingleQuote = False}))),
+                (tsPropSig "value" False sftyp)]))) v0) (\arms -> Right (
+            mdoc,
+            (Syntax.ModuleItemTypeAlias (Syntax.TypeAliasDeclaration {
+              Syntax.typeAliasDeclarationName = (tsIdent lname),
+              Syntax.typeAliasDeclarationTypeParameters = typeParams,
+              Syntax.typeAliasDeclarationType = (Syntax.TypeExpressionUnion arms)}))))
+          Model.TypeWrap v0 -> Eithers.bind (encodeType cx g currentNs v0) (\sftyp -> Right (
+            mdoc,
+            (Syntax.ModuleItemInterface (Syntax.InterfaceDeclaration {
+              Syntax.interfaceDeclarationName = (tsIdent lname),
+              Syntax.interfaceDeclarationTypeParameters = typeParams,
+              Syntax.interfaceDeclarationExtends = [],
+              Syntax.interfaceDeclarationMembers = [
+                tsPropSig "value" False sftyp]}))))
+          _ -> Eithers.bind (encodeType cx g currentNs typ) (\styp -> Right (
+            mdoc,
+            (Syntax.ModuleItemTypeAlias (Syntax.TypeAliasDeclaration {
+              Syntax.typeAliasDeclarationName = (tsIdent lname),
+              Syntax.typeAliasDeclarationTypeParameters = typeParams,
+              Syntax.typeAliasDeclarationType = styp}))))))
+
+-- | Try to encode a Hydra type as a TS type expression, falling back to any if encodeType fails
+encodeTypeOrAny :: t0 -> t1 -> Packaging.ModuleName -> Model.Type -> Syntax.TypeExpression
+encodeTypeOrAny cx g currentNs typ =
+    Eithers.either (\_e -> Syntax.TypeExpressionAny) (\te -> te) (encodeType cx g currentNs typ)
+
+-- | Keep only names whose module differs from the current module's
+filterNonLocalNames :: Packaging.ModuleName -> S.Set Model.Name -> S.Set Model.Name
+filterNonLocalNames currentNs names =
+    Sets.fromList (Optionals.givens (Lists.map (\n -> Optionals.match (Names.moduleNameOf n) Nothing (\nameNs -> Logic.ifElse (Equality.equal (Packaging.unModuleName currentNs) (Packaging.unModuleName nameNs)) Nothing (Just n))) (Sets.toList names)))
+
+-- | Walk an application spine, returning the innermost head term and its arguments in application order
+flattenApplication :: Model.Term -> (Model.Term, [Model.Term])
+flattenApplication t =
+
+      let dt = Strip.deannotateTerm t
+      in case dt of
+        Model.TermApplication v0 ->
+          let inner = flattenApplication (Model.applicationFunction v0)
+              head_ = Pairs.first inner
+              prevArgs = Pairs.second inner
+          in (head_, (Lists.concat2 prevArgs (Lists.singleton (Model.applicationArgument v0))))
+        _ -> (t, [])
+
+-- | Rewrite free occurrences of the given target names from x to x(undefined), forcing a thunked binding created by thunkLazyLet
+forceLazyRefs :: S.Set Model.Name -> Model.Term -> Model.Term
+forceLazyRefs targets0 term0 =
+    Rewriting.rewriteTermWithContext (\recurse0 -> \targets -> \term -> case term of
+      Model.TermVariable v0 -> Logic.ifElse (Sets.member v0 targets) (Model.TermApplication (Model.Application {
+        Model.applicationFunction = (Model.TermVariable v0),
+        Model.applicationArgument = Model.TermUnit})) term
+      Model.TermLambda v0 ->
+        let innerTargets = Sets.delete (Model.lambdaParameter v0) targets
+        in (recurse0 innerTargets term)
+      Model.TermLet v0 ->
+        let boundNames = Sets.fromList (Lists.map Model.bindingName (Model.letBindings v0))
+            innerTargets = Sets.difference targets boundNames
+        in (recurse0 innerTargets term)
+      _ -> recurse0 targets term) targets0 term0
+
+-- | Build a TS function declaration from a Hydra term by peeling lambdas and let bindings into explicit parameters, statements, and a body
+functionDeclarationFromTerm :: Typing.InferenceContext -> Graph.Graph -> Packaging.ModuleName -> String -> Model.Term -> Maybe Model.Type -> Syntax.FunctionDeclaration
+functionDeclarationFromTerm cx g currentNs lname term _mScheme =
+
+      let fsE = analyzeTypeScriptFunction cx g term
+          fs =
+                  Eithers.either (\_err -> Typing.FunctionStructure {
+                    Typing.functionStructureTypeParams = [],
+                    Typing.functionStructureParams = [],
+                    Typing.functionStructureBindings = [],
+                    Typing.functionStructureBody = term,
+                    Typing.functionStructureDomains = [],
+                    Typing.functionStructureCodomain = Nothing,
+                    Typing.functionStructureEnvironment = g}) (\ok -> ok) fsE
+          fsParams = Typing.functionStructureParams fs
+          fsDoms = Typing.functionStructureDomains fs
+          fsBindings0 = Typing.functionStructureBindings fs
+          fsBody0 = Typing.functionStructureBody fs
+          thunked = thunkLazyBindings fsBindings0 fsBody0
+          fsBindings = Pairs.first thunked
+          fsBody = Pairs.second thunked
+          fsEnv = Typing.functionStructureEnvironment fs
+          domPad = Model.TypeVariable (Model.Name "_")
+          fsDomsPadded = Lists.concat2 fsDoms (Lists.replicate (Math.sub (Lists.length fsParams) (Lists.length fsDoms)) domPad)
+          paramPatterns =
+                  Lists.map (\pair -> encodeParam cx fsEnv currentNs (Pairs.first pair) (Pairs.second pair)) (Lists.zip fsParams fsDomsPadded)
+          sortedBindings = sortBindingsTopologically fsBindings
+          bindingStmts = Lists.map (\b -> encodeBindingAsStatement cx fsEnv currentNs b) sortedBindings
+          bodyExpr = encodeTerm cx fsEnv currentNs fsBody
+          returnStmt = Syntax.StatementReturn (Just bodyExpr)
+          block = Lists.concat2 bindingStmts [
+                returnStmt]
+      in Syntax.FunctionDeclaration {
+        Syntax.functionDeclarationId = (tsIdent lname),
+        Syntax.functionDeclarationParams = paramPatterns,
+        Syntax.functionDeclarationBody = block,
+        Syntax.functionDeclarationAsync = False,
+        Syntax.functionDeclarationGenerator = False}
+
+-- | Render a set of qualified names as TypeScript import statements grouped by source module
+importsToText :: S.Set String -> String -> Packaging.ModuleName -> S.Set Model.Name -> String
+importsToText overlaySubs kind currentNs names =
+
+      let pairs =
+              Optionals.givens (Lists.map (\n -> Optionals.match (Names.moduleNameOf n) Nothing (\ns -> Logic.ifElse (Equality.equal (Packaging.unModuleName currentNs) (Packaging.unModuleName ns)) Nothing (Just (ns, n)))) (Sets.toList names))
+          transformLocal =
+                  \s -> Logic.ifElse (Equality.equal kind "type") (Formatting.capitalize s) (Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords s)
+          importKeyword = Logic.ifElse (Equality.equal kind "type") "import type" "import"
+          grouped =
+                  Lists.foldl (\acc -> \p ->
+                    let ns = Pairs.first p
+                        n = Pairs.second p
+                        local = transformLocal (Names.localNameOf n)
+                        existing = Optionals.withDefault [] (Maps.lookup ns acc)
+                    in (Maps.insert ns (Lists.cons local existing) acc)) Maps.empty pairs
+          currentSegs = Lists.drop 1 (Strings.splitOn "." (Packaging.unModuleName currentNs))
+          currentDepth = Lists.length currentSegs
+          currentIsTest =
+                  Logic.and (Ordering.gt (Lists.length currentSegs) 1) (Equality.equal (Optionals.withDefault "" (Lists.at 1 currentSegs)) "test")
+          baseUpPrefix =
+                  Logic.ifElse (Equality.equal currentDepth 1) "./" (Strings.concat (Lists.replicate (Math.sub currentDepth 1) "../"))
+          lines =
+                  Lists.map (\entry ->
+                    let ns = Pairs.first entry
+                        locals = Pairs.second entry
+                        targetSegs = Lists.drop 1 (Strings.splitOn "." (Packaging.unModuleName ns))
+                        targetIsTest =
+                                Logic.and (Ordering.gt (Lists.length targetSegs) 1) (Equality.equal (Optionals.withDefault "" (Lists.at 1 targetSegs)) "test")
+                        targetSub = Optionals.withDefault "" (Lists.at 2 targetSegs)
+                        targetPathSegs =
+                                Logic.ifElse (Logic.and (Logic.and (Equality.equal (Optionals.withDefault "" (Lists.head targetSegs)) "core") (Equality.equal (Optionals.withDefault "" (Lists.at 1 targetSegs)) "lib")) (Sets.member targetSub overlaySubs)) [
+                                  "core",
+                                  "overlay",
+                                  "typescript",
+                                  "lib",
+                                  targetSub] targetSegs
+                        targetPath = Strings.join "/" targetPathSegs
+                        upPrefix =
+                                Logic.ifElse (Logic.and currentIsTest (Logic.not targetIsTest)) (Strings.concat2 baseUpPrefix "../../../main/typescript/hydra/") baseUpPrefix
+                        nsSlug = Strings.join "_" targetSegs
+                        moduleAlias = Logic.ifElse (Equality.equal kind "type") (Strings.concat2 "$type_" nsSlug) (Strings.concat2 "$mod_" nsSlug)
+                    in (Strings.concat [
+                      importKeyword,
+                      " * as ",
+                      moduleAlias,
+                      " from \"",
+                      upPrefix,
+                      targetPath,
+                      ".js\";\n"])) (Maps.toList grouped)
+      in (Strings.concat lines)
+
+-- | Look up a primitive by name and return its per-parameter laziness flags in parameter order
+lazyFlagsForPrimitive :: Graph.Graph -> Model.Name -> [Bool]
+lazyFlagsForPrimitive g name =
+    Optionals.match (Maps.lookup name (Graph.graphPrimitives g)) [] (\prim -> Lists.map (\p -> Typing.parameterIsLazy p) (Typing.termSignatureParameters (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition prim))))
+
+-- | True when a let-binding's value should be thunked to preserve Haskell's lazy evaluation semantics
+letBindingIsThunkCandidate :: Model.Binding -> Bool
+letBindingIsThunkCandidate b =
+
+      let dterm = Strip.deannotateAndDetypeTerm (Model.bindingTerm b)
+          isLambda =
+                  case dterm of
+                    Model.TermLambda _ -> True
+                    _ -> False
+          freeVars = Variables.freeVariablesInTerm (Model.bindingTerm b)
+          callsShow =
+                  Lists.foldl (\acc -> \n -> Logic.or acc (Optionals.match (Names.moduleNameOf n) False (\mn -> Equality.equal (Lists.take 2 (Strings.splitOn "." (Packaging.unModuleName mn))) [
+                    "hydra",
+                    "show"]))) False (Sets.toList freeVars)
+      in (Logic.and (Logic.not isLambda) callsShow)
+
+-- | Build a documentation comment from an optional description string, or nothing if the description is missing or empty
+mkDocComment :: Maybe String -> Maybe Syntax.DocumentationComment
+mkDocComment mdesc =
+    Optionals.match mdesc Nothing (\d -> Logic.ifElse (Equality.equal d "") Nothing (Just (Syntax.DocumentationComment {
+      Syntax.documentationCommentDescription = (PrintDocs.renderDocStringWith tsDocEntityRef d),
+      Syntax.documentationCommentTags = []})))
+
+-- | Convert a Hydra module to a map from .ts file path to TypeScript source
+moduleToTypeScript :: S.Set String -> Packaging.Module -> [Packaging.Definition] -> Typing.InferenceContext -> Graph.Graph -> Either Errors.Error (M.Map String String)
+moduleToTypeScript overlaySubs mod defs cx g =
+
+      let currentNs = Packaging.moduleName mod
+          partitioned = Environment.partitionDefinitions defs
+          typeDefs = Pairs.first partitioned
+          rawTermDefs = Pairs.second partitioned
+          termDefs = sortTermDefsTopologically currentNs rawTermDefs
+          typeImportsFromTypes =
+                  Lists.foldl (\acc -> \td -> Sets.union acc (collectImports currentNs (Model.typeSchemeBody (Packaging.typeDefinitionBody td)))) Sets.empty typeDefs
+          typeImportsFromTerms =
+                  Lists.foldl (\acc -> \td -> Optionals.match (Packaging.termDefinitionSignature td) acc (\sig -> Sets.union acc (collectImports currentNs (Model.typeSchemeBody (Scoping.termSignatureToTypeScheme sig))))) Sets.empty termDefs
+          typeImportsFromInner =
+                  Lists.foldl (\acc -> \td -> Sets.union acc (collectInnerTypeImports currentNs (Packaging.termDefinitionBody td))) Sets.empty termDefs
+          typeImports = Sets.union (Sets.union typeImportsFromTypes typeImportsFromTerms) typeImportsFromInner
+          termImports =
+                  Lists.foldl (\acc -> \td -> Sets.union acc (collectTermImports currentNs (Packaging.termDefinitionBody td))) Sets.empty termDefs
+          typeImportsBlock = importsToText overlaySubs "type" currentNs typeImports
+          termImportsBlock = importsToText overlaySubs "value" currentNs termImports
+          importsBlock = Strings.concat2 typeImportsBlock termImportsBlock
+      in (Eithers.bind (Eithers.mapList (encodeTypeDefinition cx g currentNs) typeDefs) (\typeItems ->
+        let termItems = Lists.map (encodeTermDefinition cx g currentNs) termDefs
+            allItems = Lists.concat2 typeItems termItems
+            mModuleDoc = Optionals.bind (Packaging.moduleMetadata mod) (\em -> Packaging.entityMetadataDescription em)
+            moduleDocText = Optionals.match mModuleDoc "" (\d -> Strings.concat2 (Serde.toTypeScriptComments d []) "\n\n")
+            header = Strings.concat2 "// Note: this is an automatically generated file. Do not edit.\n\n" moduleDocText
+            renderItem =
+                    \docAndItem ->
+                      let mdoc = Pairs.first docAndItem
+                          item = Pairs.second docAndItem
+                          itemText = printModuleItem item
+                      in (Optionals.match mdoc itemText (\d -> Strings.concat [
+                        Serde.toTypeScriptComments d [],
+                        "\n",
+                        itemText]))
+            body = Strings.join "\n\n" (Lists.map renderItem allItems)
+            filePath = Names.moduleNameToFilePath Util.CaseConventionCamel (File.FileExtension "ts") (Packaging.moduleName mod)
+        in (Right (Maps.singleton filePath (Strings.concat [
+          header,
+          importsBlock,
+          (Logic.ifElse (Equality.equal importsBlock "") "" "\n"),
+          body,
+          (Logic.ifElse (Equality.equal body "") "" "\n")])))))
+
+-- | Render an interface declaration
+printInterfaceDeclaration :: Syntax.InterfaceDeclaration -> String
+printInterfaceDeclaration decl =
+
+      let name = Syntax.unIdentifier (Syntax.interfaceDeclarationName decl)
+          params = printTypeParameterList (Syntax.interfaceDeclarationTypeParameters decl)
+          exts = Syntax.interfaceDeclarationExtends decl
+          extClause =
+                  Logic.ifElse (Lists.isEmpty exts) "" (Strings.concat2 " extends " (Strings.join ", " (Lists.map printTypeExpression exts)))
+          members = Syntax.interfaceDeclarationMembers decl
+          renderMember = \ps -> Strings.join "\n  " (Formatting.lines (printPropertySignature ps))
+          body =
+                  Logic.ifElse (Lists.isEmpty members) "" (Strings.concat [
+                    "\n  ",
+                    (Strings.join ";\n  " (Lists.map renderMember members)),
+                    ";\n"])
+      in (Strings.concat [
+        "export interface ",
+        name,
+        params,
+        extClause,
+        " {",
+        body,
+        "}\n"])
+
+-- | Render a TypeScript literal as source text
+printLiteral :: Syntax.Literal -> String
+printLiteral lit =
+    case lit of
+      Syntax.LiteralString v0 -> tsEscapeString (Syntax.stringLiteralValue v0)
+      Syntax.LiteralBoolean v0 -> Logic.ifElse v0 "true" "false"
+      Syntax.LiteralNull -> "null"
+      Syntax.LiteralUndefined -> "undefined"
+      _ -> "null"
+
+-- | Render a top-level module item
+printModuleItem :: Syntax.ModuleItem -> String
+printModuleItem mi =
+    case mi of
+      Syntax.ModuleItemInterface v0 -> printInterfaceDeclaration v0
+      Syntax.ModuleItemTypeAlias v0 -> printTypeAliasDeclaration v0
+      Syntax.ModuleItemStatement _ -> Serialization.printExpr (Serde.moduleItemToExpr mi)
+      Syntax.ModuleItemImport _ -> Serialization.printExpr (Serde.moduleItemToExpr mi)
+      Syntax.ModuleItemExport _ -> Serialization.printExpr (Serde.moduleItemToExpr mi)
+      _ -> ""
+
+-- | Render a property signature, with an optional JSDoc comment prepended
+printPropertySignature :: Syntax.PropertySignature -> String
+printPropertySignature ps =
+
+      let mcomments = Syntax.propertySignatureComments ps
+          line =
+                  Strings.concat [
+                    Logic.ifElse (Syntax.propertySignatureReadonly ps) "readonly " "",
+                    (Syntax.unIdentifier (Syntax.propertySignatureName ps)),
+                    (Logic.ifElse (Syntax.propertySignatureOptional ps) "?" ""),
+                    ": ",
+                    (printTypeExpression (Syntax.propertySignatureType ps))]
+      in (Optionals.match mcomments line (\dc -> Strings.concat [
+        Serde.toTypeScriptComments (Syntax.documentationCommentDescription dc) (Syntax.documentationCommentTags dc),
+        "\n",
+        line]))
+
+-- | Render a type alias declaration
+printTypeAliasDeclaration :: Syntax.TypeAliasDeclaration -> String
+printTypeAliasDeclaration decl =
+
+      let name = Syntax.unIdentifier (Syntax.typeAliasDeclarationName decl)
+          params = printTypeParameterList (Syntax.typeAliasDeclarationTypeParameters decl)
+          rhs = printTypeExpression (Syntax.typeAliasDeclarationType decl)
+      in (Strings.concat [
+        "export type ",
+        name,
+        params,
+        " = ",
+        rhs,
+        ";\n"])
+
+-- | Render a TypeScript type expression as source text
+printTypeExpression :: Syntax.TypeExpression -> String
+printTypeExpression t =
+    case t of
+      Syntax.TypeExpressionIdentifier v0 -> Syntax.unIdentifier v0
+      Syntax.TypeExpressionLiteral v0 -> printLiteral v0
+      Syntax.TypeExpressionArray v0 -> Strings.concat [
+        "ReadonlyArray<",
+        (printTypeExpression (Syntax.unArrayTypeExpression v0)),
+        ">"]
+      Syntax.TypeExpressionTuple v0 -> Strings.concat [
+        "readonly [",
+        (Strings.join ", " (Lists.map printTypeExpression v0)),
+        "]"]
+      Syntax.TypeExpressionUnion v0 -> Strings.join " | " (Lists.map printTypeExpression v0)
+      Syntax.TypeExpressionIntersection v0 -> Strings.join " & " (Lists.map printTypeExpression v0)
+      Syntax.TypeExpressionParameterized v0 -> Strings.concat [
+        printTypeExpression (Syntax.parameterizedTypeExpressionBase v0),
+        "<",
+        (Strings.join ", " (Lists.map printTypeExpression (Syntax.parameterizedTypeExpressionArguments v0))),
+        ">"]
+      Syntax.TypeExpressionOptional v0 -> Strings.concat [
+        printTypeExpression v0,
+        " | undefined"]
+      Syntax.TypeExpressionReadonly v0 -> Strings.concat2 "readonly " (printTypeExpression v0)
+      Syntax.TypeExpressionObject v0 -> Strings.concat [
+        "{ ",
+        (Strings.join "; " (Lists.map printPropertySignature v0)),
+        " }"]
+      Syntax.TypeExpressionFunction _ -> "((...args: any[]) => any)"
+      Syntax.TypeExpressionAny -> "any"
+      Syntax.TypeExpressionUnknown -> "unknown"
+      Syntax.TypeExpressionVoid -> "void"
+      Syntax.TypeExpressionNever -> "never"
+      _ -> "unknown"
+
+-- | Render one generic type parameter, with an optional extends constraint
+printTypeParameter :: Syntax.TypeParameter -> String
+printTypeParameter tp =
+
+      let name = Syntax.unIdentifier (Syntax.typeParameterName tp)
+          constraint = Syntax.typeParameterConstraint tp
+      in (Optionals.match constraint name (\c -> Strings.concat [
+        name,
+        " extends ",
+        (printTypeExpression c)]))
+
+-- | Render a generic parameter list, or the empty string when there are no parameters
+printTypeParameterList :: [Syntax.TypeParameter] -> String
+printTypeParameterList tps =
+    Logic.ifElse (Lists.isEmpty tps) "" (Strings.concat [
+      "<",
+      (Strings.join ", " (Lists.map printTypeParameter tps)),
+      ">"])
+
+-- | Sanitize a Hydra parameter name into a valid, non-reserved TS identifier
+sanitizeParamName :: Model.Name -> String
+sanitizeParamName n = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords (Names.localNameOf n)
+
+-- | Reorder let-bindings so each appears after the sibling bindings it depends on, avoiding JS temporal-dead-zone errors
+sortBindingsTopologically :: [Model.Binding] -> [Model.Binding]
+sortBindingsTopologically bindings =
+
+      let byName = Maps.fromList (Lists.map (\b -> (Model.bindingName b, b)) bindings)
+          adjacency =
+                  Lists.map (\b ->
+                    let bname = Model.bindingName b
+                        bterm = Model.bindingTerm b
+                        freeVars = Variables.freeVariablesInTerm bterm
+                        deps = Lists.filter (\n -> Maps.member n byName) (Sets.toList freeVars)
+                    in (bname, deps)) bindings
+          sccs = Sorting.topologicalSortComponents adjacency
+      in (Optionals.givens (Lists.map (\n -> Maps.lookup n byName) (Lists.concat sccs)))
+
+-- | Reorder term definitions so each appears after the intra-module definitions it depends on
+sortTermDefsTopologically :: t0 -> [Packaging.TermDefinition] -> [Packaging.TermDefinition]
+sortTermDefsTopologically currentNs tdefs =
+
+      let byName = Maps.fromList (Lists.map (\td -> (Packaging.termDefinitionName td, td)) tdefs)
+          adjacency =
+                  Lists.map (\td ->
+                    let tname = Packaging.termDefinitionName td
+                        tterm = Packaging.termDefinitionBody td
+                        freeVars = eagerFreeVariablesInTerm tterm
+                        deps = Lists.filter (\n -> Maps.member n byName) (Sets.toList freeVars)
+                    in (tname, deps)) tdefs
+          sccs = Sorting.topologicalSortComponents adjacency
+      in (Optionals.givens (Lists.map (\n -> Maps.lookup n byName) (Lists.concat sccs)))
+
+-- | Strip leading forall quantifiers from a type, returning the innermost body
+stripForalls :: Model.Type -> Model.Type
+stripForalls t =
+
+      let dt = Strip.deannotateType t
+      in case dt of
+        Model.TypeForall v0 -> stripForalls (Model.forallTypeBody v0)
+        _ -> dt
+
+-- | If a term reduces, through annotations and type applications, to a variable reference, return its name
+termHeadVariable :: Model.Term -> Maybe Model.Name
+termHeadVariable t =
+
+      let dt = Strip.deannotateTerm t
+      in case dt of
+        Model.TermVariable v0 -> Just v0
+        Model.TermTypeApplication v0 -> termHeadVariable (Model.typeApplicationTermBody v0)
+        _ -> Nothing
+
+-- | The bindings-and-body core of thunkLazyLet, shared by the Term_let encoder and the lifted-binding path in functionDeclarationFromTerm
+thunkLazyBindings :: [Model.Binding] -> Model.Term -> ([Model.Binding], Model.Term)
+thunkLazyBindings bindings body =
+
+      let candidates = Lists.filter (\b -> letBindingIsThunkCandidate b) bindings
+      in (Logic.ifElse (Lists.isEmpty candidates) (bindings, body) (
+        let targets = Sets.fromList (Lists.map Model.bindingName candidates)
+            wrapCandidate =
+                    \b -> Logic.ifElse (letBindingIsThunkCandidate b) (Model.Binding {
+                      Model.bindingName = (Model.bindingName b),
+                      Model.bindingTerm = (Model.TermLambda (Model.Lambda {
+                        Model.lambdaParameter = (Model.Name "_"),
+                        Model.lambdaDomain = Nothing,
+                        Model.lambdaBody = (forceLazyRefs targets (Model.bindingTerm b))})),
+                      Model.bindingTypeScheme = (Model.bindingTypeScheme b)}) (Model.Binding {
+                      Model.bindingName = (Model.bindingName b),
+                      Model.bindingTerm = (forceLazyRefs targets (Model.bindingTerm b)),
+                      Model.bindingTypeScheme = (Model.bindingTypeScheme b)})
+        in (Lists.map wrapCandidate bindings, (forceLazyRefs targets body))))
+
+-- | Thunk every let-binding for which letBindingIsThunkCandidate holds, and rewrite forced references to it accordingly
+thunkLazyLet :: Model.Let -> Model.Let
+thunkLazyLet lt =
+
+      let result = thunkLazyBindings (Model.letBindings lt) (Model.letBody lt)
+      in Model.Let {
+        Model.letBindings = (Pairs.first result),
+        Model.letBody = (Pairs.second result)}
+
+-- | An array expression: [e1, e2, ...]
+tsArray :: [Syntax.Expression] -> Syntax.Expression
+tsArray elems = Syntax.ExpressionArray (Lists.map (\e -> Syntax.ArrayElementExpression e) elems)
+
+-- | An untyped arrow function with an expression body
+tsArrow :: [String] -> Syntax.Expression -> Syntax.Expression
+tsArrow params body =
+    Syntax.ExpressionArrow (Syntax.ArrowFunctionExpression {
+      Syntax.arrowFunctionExpressionParams = (Lists.map (\p -> Syntax.PatternIdentifier (tsIdent p)) params),
+      Syntax.arrowFunctionExpressionBody = (Syntax.ArrowFunctionBodyExpression body),
+      Syntax.arrowFunctionExpressionAsync = False})
+
+-- | A typed arrow function with typed parameter patterns
+tsArrowTyped :: [Syntax.Pattern] -> Syntax.Expression -> Syntax.Expression
+tsArrowTyped patterns body =
+    Syntax.ExpressionArrow (Syntax.ArrowFunctionExpression {
+      Syntax.arrowFunctionExpressionParams = patterns,
+      Syntax.arrowFunctionExpressionBody = (Syntax.ArrowFunctionBodyExpression body),
+      Syntax.arrowFunctionExpressionAsync = False})
+
+-- | Wrap an expression in a TypeScript 'as any' cast
+tsAsAny :: Syntax.Expression -> Syntax.Expression
+tsAsAny e =
+    Syntax.ExpressionAsExpression (Syntax.AsExpression {
+      Syntax.asExpressionExpression = e,
+      Syntax.asExpressionType = Syntax.TypeExpressionAny})
+
+-- | A call expression, parenthesizing the callee when it's an arrow function or other ambiguous call target
+tsCall :: Syntax.Expression -> [Syntax.Expression] -> Syntax.Expression
+tsCall callee args =
+    Syntax.ExpressionCall (Syntax.CallExpression {
+      Syntax.callExpressionCallee = callee,
+      Syntax.callExpressionArguments = args,
+      Syntax.callExpressionOptional = False})
+
+-- | A conditional (ternary) expression
+tsCond :: Syntax.Expression -> Syntax.Expression -> Syntax.Expression -> Syntax.Expression
+tsCond test cons alt =
+    Syntax.ExpressionConditional (Syntax.ConditionalExpression {
+      Syntax.conditionalExpressionTest = test,
+      Syntax.conditionalExpressionConsequent = cons,
+      Syntax.conditionalExpressionAlternate = alt})
+
+-- | Render a 'EntityReference' as TSDoc link syntax
+tsDocEntityRef :: Packaging.EntityReference -> String
+tsDocEntityRef x =
+    case x of
+      Packaging.EntityReferenceDefinition v0 -> Strings.concat2 "{@link " (Strings.concat2 (case v0 of
+        Packaging.DefinitionReferencePrimitive v1 -> Names.localNameOf v1
+        Packaging.DefinitionReferenceTerm v1 -> Names.localNameOf v1
+        Packaging.DefinitionReferenceType v1 -> Names.localNameOf v1) "}")
+      Packaging.EntityReferenceModule v0 -> Packaging.unModuleName v0
+      Packaging.EntityReferencePackage v0 -> Packaging.unPackageName v0
+      Packaging.EntityReferenceTermExpr v0 -> Strings.concat2 "`" (Strings.concat2 v0 "`")
+      Packaging.EntityReferenceTypeExpr v0 -> Strings.concat2 "`" (Strings.concat2 v0 "`")
+
+-- | Identity getter for analyzeFunctionTerm when the environment is a Graph
+tsEnvGetGraph :: t0 -> t0
+tsEnvGetGraph g = g
+
+-- | Setter for analyzeFunctionTerm when the environment is a Graph
+tsEnvSetGraph :: t0 -> t1 -> t0
+tsEnvSetGraph newG _old = newG
+
+-- | Escape a Hydra string for embedding as a double-quoted TypeScript string literal
+tsEscapeString :: String -> String
+tsEscapeString s =
+
+      let escapeChar =
+              \c -> Logic.ifElse (Equality.equal c 34) "\\\"" (Logic.ifElse (Equality.equal c 92) "\\\\" (Logic.ifElse (Equality.equal c 10) "\\n" (Logic.ifElse (Equality.equal c 13) "\\r" (Logic.ifElse (Equality.equal c 9) "\\t" (Logic.ifElse (Equality.equal c 8) "\\b" (Logic.ifElse (Equality.equal c 12) "\\f" (Strings.fromList (Lists.singleton c))))))))
+      in (Strings.concat [
+        "\"",
+        (Strings.concat (Lists.map escapeChar (Strings.toList s))),
+        "\""])
+
+-- | A bare identifier expression
+tsExprIdent :: String -> Syntax.Expression
+tsExprIdent s = Syntax.ExpressionIdentifier (tsIdent s)
+
+-- | A string-literal expression
+tsExprStr :: String -> Syntax.Expression
+tsExprStr s =
+    Syntax.ExpressionLiteral (Syntax.LiteralString (Syntax.StringLiteral {
+      Syntax.stringLiteralValue = s,
+      Syntax.stringLiteralSingleQuote = False}))
+
+-- | Wrap a string into a TypeScript identifier
+tsIdent :: String -> Syntax.Identifier
+tsIdent s = Syntax.Identifier s
+
+-- | A member-access expression: obj.prop
+tsMember :: Syntax.Expression -> String -> Syntax.Expression
+tsMember obj prop =
+    Syntax.ExpressionMember (Syntax.MemberExpression {
+      Syntax.memberExpressionObject = obj,
+      Syntax.memberExpressionProperty = (tsExprIdent prop),
+      Syntax.memberExpressionComputed = False,
+      Syntax.memberExpressionOptional = False})
+
+-- | A bare named type reference
+tsNamedType :: String -> Syntax.TypeExpression
+tsNamedType n = Syntax.TypeExpressionIdentifier (tsIdent n)
+
+-- | A new-expression: new C(args)
+tsNew :: Syntax.Expression -> [Syntax.Expression] -> Syntax.Expression
+tsNew callee args =
+    Syntax.ExpressionNew (Syntax.CallExpression {
+      Syntax.callExpressionCallee = callee,
+      Syntax.callExpressionArguments = args,
+      Syntax.callExpressionOptional = False})
+
+-- | An object literal with identifier-style keys
+tsObject :: [(String, Syntax.Expression)] -> Syntax.Expression
+tsObject props =
+    Syntax.ExpressionObject (Lists.map (\kv ->
+      let k = Pairs.first kv
+          v = Pairs.second kv
+      in Syntax.Property {
+        Syntax.propertyKey = (tsExprIdent k),
+        Syntax.propertyValue = v,
+        Syntax.propertyKind = Syntax.PropertyKindInit,
+        Syntax.propertyComputed = False,
+        Syntax.propertyShorthand = False}) props)
+
+-- | A generic type parameter with no constraint
+tsParam :: String -> Syntax.TypeParameter
+tsParam n =
+    Syntax.TypeParameter {
+      Syntax.typeParameterName = (tsIdent n),
+      Syntax.typeParameterConstraint = Nothing,
+      Syntax.typeParameterDefault = Nothing}
+
+-- | A parameterized type with one type argument
+tsParamApp1 :: String -> Syntax.TypeExpression -> Syntax.TypeExpression
+tsParamApp1 n arg =
+    Syntax.TypeExpressionParameterized (Syntax.ParameterizedTypeExpression {
+      Syntax.parameterizedTypeExpressionBase = (tsNamedType n),
+      Syntax.parameterizedTypeExpressionArguments = [
+        arg]})
+
+-- | A parameterized type with two type arguments
+tsParamApp2 :: String -> Syntax.TypeExpression -> Syntax.TypeExpression -> Syntax.TypeExpression
+tsParamApp2 n a b =
+    Syntax.TypeExpressionParameterized (Syntax.ParameterizedTypeExpression {
+      Syntax.parameterizedTypeExpressionBase = (tsNamedType n),
+      Syntax.parameterizedTypeExpressionArguments = [
+        a,
+        b]})
+
+-- | Wrap an expression in parentheses when its serialized form needs grouping
+tsParen :: Syntax.Expression -> Syntax.Expression
+tsParen e = Syntax.ExpressionParenthesized e
+
+-- | A readonly property signature, with the name sanitized for TS reserved words
+tsPropSig :: String -> Bool -> Syntax.TypeExpression -> Syntax.PropertySignature
+tsPropSig name optional typ = tsPropSigWithDoc name optional typ Nothing
+
+-- | A readonly property signature with an optional JSDoc comment above the property line
+tsPropSigWithDoc :: String -> Bool -> Syntax.TypeExpression -> Maybe Syntax.DocumentationComment -> Syntax.PropertySignature
+tsPropSigWithDoc name optional typ mcomments =
+
+      let safe = Formatting.sanitizeWithUnderscores Language.typeScriptReservedWords name
+      in Syntax.PropertySignature {
+        Syntax.propertySignatureName = (tsIdent safe),
+        Syntax.propertySignatureType = typ,
+        Syntax.propertySignatureOptional = optional,
+        Syntax.propertySignatureReadonly = True,
+        Syntax.propertySignatureComments = mcomments}
+
+-- | A ReadonlyMap type with the given key and value types
+tsReadonlyMap :: Syntax.TypeExpression -> Syntax.TypeExpression -> Syntax.TypeExpression
+tsReadonlyMap k v = tsParamApp2 "ReadonlyMap" k v
+
+-- | A ReadonlySet type with the given element type
+tsReadonlySet :: Syntax.TypeExpression -> Syntax.TypeExpression
+tsReadonlySet t = tsParamApp1 "ReadonlySet" t
+
+-- | A tuple type
+tsTuple :: [Syntax.TypeExpression] -> Syntax.TypeExpression
+tsTuple ts = Syntax.TypeExpressionTuple ts
+
+-- | A typed-identifier pattern for a function parameter with a known domain type
+tsTypedIdent :: String -> Syntax.TypeExpression -> Syntax.Pattern
+tsTypedIdent name typ =
+    Syntax.PatternTyped (Syntax.TypedPattern {
+      Syntax.typedPatternPattern = (Syntax.PatternIdentifier (tsIdent name)),
+      Syntax.typedPatternType = typ})
+
+-- | The undefined value as an expression
+tsUndefined :: Syntax.Expression
+tsUndefined = tsExprIdent "undefined"
diff --git a/src/main/haskell/Hydra/Typescript/Dsl/Syntax.hs b/src/main/haskell/Hydra/Typescript/Dsl/Syntax.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Typescript/Dsl/Syntax.hs
@@ -0,0 +1,7269 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | DSL functions for hydra.typescript.syntax
+
+module Hydra.Typescript.Dsl.Syntax where
+
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Typescript.Syntax as Syntax
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
+import qualified Data.Scientific as Sci
+import Data.Void
+import qualified Data.Int as I
+
+-- | DSL name token for hydra.typescript.syntax.ArrayElement
+arrayElementArrayElement :: Typed.TypedName Syntax.ArrayElement
+arrayElementArrayElement = Typed.TypedName (Model.Name "hydra.typescript.syntax.ArrayElement")
+
+-- | DSL injection for the expression variant of hydra.typescript.syntax.ArrayElement
+arrayElementExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ArrayElement
+arrayElementExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ArrayElement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the hole variant of hydra.typescript.syntax.ArrayElement
+arrayElementHole :: Typed.TypedTerm Syntax.ArrayElement
+arrayElementHole =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ArrayElement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "hole"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the spread variant of hydra.typescript.syntax.ArrayElement
+arrayElementSpread :: Typed.TypedTerm Syntax.SpreadElement -> Typed.TypedTerm Syntax.ArrayElement
+arrayElementSpread x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ArrayElement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "spread"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for the hydra.typescript.syntax.ArrayTypeExpression wrapper
+arrayTypeExpression :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.ArrayTypeExpression
+arrayTypeExpression x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.typescript.syntax.ArrayTypeExpression"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ArrayTypeExpression
+arrayTypeExpressionArrayTypeExpression :: Typed.TypedName Syntax.ArrayTypeExpression
+arrayTypeExpressionArrayTypeExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.ArrayTypeExpression")
+
+-- | DSL name token for hydra.typescript.syntax.ArrowFunctionBody
+arrowFunctionBodyArrowFunctionBody :: Typed.TypedName Syntax.ArrowFunctionBody
+arrowFunctionBodyArrowFunctionBody = Typed.TypedName (Model.Name "hydra.typescript.syntax.ArrowFunctionBody")
+
+-- | DSL injection for the block variant of hydra.typescript.syntax.ArrowFunctionBody
+arrowFunctionBodyBlock :: Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.ArrowFunctionBody
+arrowFunctionBodyBlock x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionBody"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "block"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the expression variant of hydra.typescript.syntax.ArrowFunctionBody
+arrowFunctionBodyExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ArrowFunctionBody
+arrowFunctionBodyExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionBody"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.ArrowFunctionExpression
+arrowFunctionExpression :: Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.ArrowFunctionBody -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ArrowFunctionExpression
+arrowFunctionExpression params body async =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Typed.unTypedTerm params)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Typed.unTypedTerm async)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.ArrowFunctionExpression
+arrowFunctionExpressionArrowFunctionExpression :: Typed.TypedName Syntax.ArrowFunctionExpression
+arrowFunctionExpressionArrowFunctionExpression =
+    Typed.TypedName (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression")
+
+-- | DSL accessor for the async field of hydra.typescript.syntax.ArrowFunctionExpression
+arrowFunctionExpressionAsync :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Bool
+arrowFunctionExpressionAsync x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+        Model.projectionFieldName = (Model.Name "async")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.ArrowFunctionExpression
+arrowFunctionExpressionBody :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Syntax.ArrowFunctionBody
+arrowFunctionExpressionBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the params field of hydra.typescript.syntax.ArrowFunctionExpression
+arrowFunctionExpressionParams :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm [Syntax.Pattern]
+arrowFunctionExpressionParams x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+        Model.projectionFieldName = (Model.Name "params")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the async field of hydra.typescript.syntax.ArrowFunctionExpression
+arrowFunctionExpressionWithAsync :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ArrowFunctionExpression
+arrowFunctionExpressionWithAsync original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.ArrowFunctionExpression
+arrowFunctionExpressionWithBody :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Syntax.ArrowFunctionBody -> Typed.TypedTerm Syntax.ArrowFunctionExpression
+arrowFunctionExpressionWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the params field of hydra.typescript.syntax.ArrowFunctionExpression
+arrowFunctionExpressionWithParams :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.ArrowFunctionExpression
+arrowFunctionExpressionWithParams original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.AsExpression
+asExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.AsExpression
+asExpression expression type_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AsExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm expression)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.AsExpression
+asExpressionAsExpression :: Typed.TypedName Syntax.AsExpression
+asExpressionAsExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.AsExpression")
+
+-- | DSL accessor for the expression field of hydra.typescript.syntax.AsExpression
+asExpressionExpression :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.Expression
+asExpressionExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AsExpression"),
+        Model.projectionFieldName = (Model.Name "expression")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.typescript.syntax.AsExpression
+asExpressionType :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.TypeExpression
+asExpressionType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AsExpression"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the expression field of hydra.typescript.syntax.AsExpression
+asExpressionWithExpression :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AsExpression
+asExpressionWithExpression original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AsExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AsExpression"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.typescript.syntax.AsExpression
+asExpressionWithType :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.AsExpression
+asExpressionWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AsExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "expression"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AsExpression"),
+              Model.projectionFieldName = (Model.Name "expression")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.AssignmentExpression
+assignmentExpression :: Typed.TypedTerm Syntax.AssignmentOperator -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentExpression
+assignmentExpression operator left right =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm operator)},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm left)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm right)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.AssignmentExpression
+assignmentExpressionAssignmentExpression :: Typed.TypedName Syntax.AssignmentExpression
+assignmentExpressionAssignmentExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.AssignmentExpression")
+
+-- | DSL accessor for the left field of hydra.typescript.syntax.AssignmentExpression
+assignmentExpressionLeft :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Pattern
+assignmentExpressionLeft x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+        Model.projectionFieldName = (Model.Name "left")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the operator field of hydra.typescript.syntax.AssignmentExpression
+assignmentExpressionOperator :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.AssignmentOperator
+assignmentExpressionOperator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+        Model.projectionFieldName = (Model.Name "operator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the right field of hydra.typescript.syntax.AssignmentExpression
+assignmentExpressionRight :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression
+assignmentExpressionRight x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+        Model.projectionFieldName = (Model.Name "right")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the left field of hydra.typescript.syntax.AssignmentExpression
+assignmentExpressionWithLeft :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.AssignmentExpression
+assignmentExpressionWithLeft original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the operator field of hydra.typescript.syntax.AssignmentExpression
+assignmentExpressionWithOperator :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.AssignmentOperator -> Typed.TypedTerm Syntax.AssignmentExpression
+assignmentExpressionWithOperator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the right field of hydra.typescript.syntax.AssignmentExpression
+assignmentExpressionWithRight :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentExpression
+assignmentExpressionWithRight original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentExpression"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the addAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorAddAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorAddAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "addAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the andAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorAndAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorAndAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "andAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the assign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "assign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorAssignmentOperator :: Typed.TypedName Syntax.AssignmentOperator
+assignmentOperatorAssignmentOperator = Typed.TypedName (Model.Name "hydra.typescript.syntax.AssignmentOperator")
+
+-- | DSL injection for the bitwiseAndAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorBitwiseAndAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorBitwiseAndAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "bitwiseAndAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the bitwiseOrAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorBitwiseOrAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorBitwiseOrAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "bitwiseOrAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the bitwiseXorAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorBitwiseXorAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorBitwiseXorAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "bitwiseXorAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the divideAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorDivideAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorDivideAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "divideAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the exponentiateAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorExponentiateAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorExponentiateAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "exponentiateAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the leftShiftAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorLeftShiftAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorLeftShiftAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "leftShiftAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the moduloAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorModuloAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorModuloAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "moduloAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the multiplyAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorMultiplyAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorMultiplyAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "multiplyAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the nullishAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorNullishAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorNullishAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "nullishAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the orAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorOrAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorOrAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "orAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the rightShiftAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorRightShiftAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorRightShiftAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "rightShiftAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the subtractAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorSubtractAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorSubtractAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "subtractAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the unsignedRightShiftAssign variant of hydra.typescript.syntax.AssignmentOperator
+assignmentOperatorUnsignedRightShiftAssign :: Typed.TypedTerm Syntax.AssignmentOperator
+assignmentOperatorUnsignedRightShiftAssign =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unsignedRightShiftAssign"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for hydra.typescript.syntax.AssignmentPattern
+assignmentPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentPattern
+assignmentPattern left right =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AssignmentPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm left)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm right)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.AssignmentPattern
+assignmentPatternAssignmentPattern :: Typed.TypedName Syntax.AssignmentPattern
+assignmentPatternAssignmentPattern = Typed.TypedName (Model.Name "hydra.typescript.syntax.AssignmentPattern")
+
+-- | DSL accessor for the left field of hydra.typescript.syntax.AssignmentPattern
+assignmentPatternLeft :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Pattern
+assignmentPatternLeft x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentPattern"),
+        Model.projectionFieldName = (Model.Name "left")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the right field of hydra.typescript.syntax.AssignmentPattern
+assignmentPatternRight :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Expression
+assignmentPatternRight x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentPattern"),
+        Model.projectionFieldName = (Model.Name "right")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the left field of hydra.typescript.syntax.AssignmentPattern
+assignmentPatternWithLeft :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.AssignmentPattern
+assignmentPatternWithLeft original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AssignmentPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentPattern"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the right field of hydra.typescript.syntax.AssignmentPattern
+assignmentPatternWithRight :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.AssignmentPattern
+assignmentPatternWithRight original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.AssignmentPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.AssignmentPattern"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.BinaryExpression
+binaryExpression :: Typed.TypedTerm Syntax.BinaryOperator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpression
+binaryExpression operator left right =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm operator)},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm left)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm right)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.BinaryExpression
+binaryExpressionBinaryExpression :: Typed.TypedName Syntax.BinaryExpression
+binaryExpressionBinaryExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.BinaryExpression")
+
+-- | DSL accessor for the left field of hydra.typescript.syntax.BinaryExpression
+binaryExpressionLeft :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression
+binaryExpressionLeft x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+        Model.projectionFieldName = (Model.Name "left")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the operator field of hydra.typescript.syntax.BinaryExpression
+binaryExpressionOperator :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.BinaryOperator
+binaryExpressionOperator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+        Model.projectionFieldName = (Model.Name "operator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the right field of hydra.typescript.syntax.BinaryExpression
+binaryExpressionRight :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression
+binaryExpressionRight x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+        Model.projectionFieldName = (Model.Name "right")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the left field of hydra.typescript.syntax.BinaryExpression
+binaryExpressionWithLeft :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpression
+binaryExpressionWithLeft original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the operator field of hydra.typescript.syntax.BinaryExpression
+binaryExpressionWithOperator :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.BinaryOperator -> Typed.TypedTerm Syntax.BinaryExpression
+binaryExpressionWithOperator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the right field of hydra.typescript.syntax.BinaryExpression
+binaryExpressionWithRight :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.BinaryExpression
+binaryExpressionWithRight original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryExpression"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the add variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorAdd :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorAdd =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "add"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the and variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorAnd :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorAnd =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "and"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.typescript.syntax.BinaryOperator
+binaryOperatorBinaryOperator :: Typed.TypedName Syntax.BinaryOperator
+binaryOperatorBinaryOperator = Typed.TypedName (Model.Name "hydra.typescript.syntax.BinaryOperator")
+
+-- | DSL injection for the bitwiseAnd variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorBitwiseAnd :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorBitwiseAnd =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "bitwiseAnd"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the bitwiseOr variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorBitwiseOr :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorBitwiseOr =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "bitwiseOr"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the bitwiseXor variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorBitwiseXor :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorBitwiseXor =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "bitwiseXor"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the divide variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorDivide :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorDivide =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "divide"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the equal variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorEqual :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorEqual =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "equal"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the exponentiate variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorExponentiate :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorExponentiate =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "exponentiate"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the greaterThan variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorGreaterThan :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorGreaterThan =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "greaterThan"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the greaterThanOrEqual variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorGreaterThanOrEqual :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorGreaterThanOrEqual =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "greaterThanOrEqual"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the in variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorIn :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorIn =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "in"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the instanceof variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorInstanceof :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorInstanceof =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "instanceof"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the leftShift variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorLeftShift :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorLeftShift =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "leftShift"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the lessThan variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorLessThan :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorLessThan =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "lessThan"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the lessThanOrEqual variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorLessThanOrEqual :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorLessThanOrEqual =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "lessThanOrEqual"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the modulo variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorModulo :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorModulo =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "modulo"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the multiply variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorMultiply :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorMultiply =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "multiply"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the notEqual variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorNotEqual :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorNotEqual =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "notEqual"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the nullishCoalescing variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorNullishCoalescing :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorNullishCoalescing =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "nullishCoalescing"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the or variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorOr :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorOr =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "or"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the rightShift variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorRightShift :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorRightShift =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "rightShift"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the strictEqual variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorStrictEqual :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorStrictEqual =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "strictEqual"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the strictNotEqual variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorStrictNotEqual :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorStrictNotEqual =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "strictNotEqual"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the subtract variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorSubtract :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorSubtract =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "subtract"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the unsignedRightShift variant of hydra.typescript.syntax.BinaryOperator
+binaryOperatorUnsignedRightShift :: Typed.TypedTerm Syntax.BinaryOperator
+binaryOperatorUnsignedRightShift =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.BinaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unsignedRightShift"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for hydra.typescript.syntax.CallExpression
+callExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.CallExpression
+callExpression callee arguments optional =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "callee"),
+          Model.fieldTerm = (Typed.unTypedTerm callee)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm arguments)},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Typed.unTypedTerm optional)}]}))
+
+-- | DSL accessor for the arguments field of hydra.typescript.syntax.CallExpression
+callExpressionArguments :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm [Syntax.Expression]
+callExpressionArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+        Model.projectionFieldName = (Model.Name "arguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.CallExpression
+callExpressionCallExpression :: Typed.TypedName Syntax.CallExpression
+callExpressionCallExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.CallExpression")
+
+-- | DSL accessor for the callee field of hydra.typescript.syntax.CallExpression
+callExpressionCallee :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Syntax.Expression
+callExpressionCallee x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+        Model.projectionFieldName = (Model.Name "callee")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the optional field of hydra.typescript.syntax.CallExpression
+callExpressionOptional :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Bool
+callExpressionOptional x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+        Model.projectionFieldName = (Model.Name "optional")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the arguments field of hydra.typescript.syntax.CallExpression
+callExpressionWithArguments :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.CallExpression
+callExpressionWithArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "callee"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+              Model.projectionFieldName = (Model.Name "callee")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the callee field of hydra.typescript.syntax.CallExpression
+callExpressionWithCallee :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.CallExpression
+callExpressionWithCallee original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "callee"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the optional field of hydra.typescript.syntax.CallExpression
+callExpressionWithOptional :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.CallExpression
+callExpressionWithOptional original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "callee"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+              Model.projectionFieldName = (Model.Name "callee")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CallExpression"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.CatchClause
+catchClause :: Typed.TypedTerm (Maybe Syntax.Pattern) -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.CatchClause
+catchClause param body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.CatchClause"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "param"),
+          Model.fieldTerm = (Typed.unTypedTerm param)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.CatchClause
+catchClauseBody :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm Syntax.BlockStatement
+catchClauseBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CatchClause"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.CatchClause
+catchClauseCatchClause :: Typed.TypedName Syntax.CatchClause
+catchClauseCatchClause = Typed.TypedName (Model.Name "hydra.typescript.syntax.CatchClause")
+
+-- | DSL accessor for the param field of hydra.typescript.syntax.CatchClause
+catchClauseParam :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm (Maybe Syntax.Pattern)
+catchClauseParam x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CatchClause"),
+        Model.projectionFieldName = (Model.Name "param")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.CatchClause
+catchClauseWithBody :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.CatchClause
+catchClauseWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.CatchClause"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "param"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CatchClause"),
+              Model.projectionFieldName = (Model.Name "param")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the param field of hydra.typescript.syntax.CatchClause
+catchClauseWithParam :: Typed.TypedTerm Syntax.CatchClause -> Typed.TypedTerm (Maybe Syntax.Pattern) -> Typed.TypedTerm Syntax.CatchClause
+catchClauseWithParam original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.CatchClause"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "param"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.CatchClause"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.ClassDeclaration
+classDeclaration :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm Syntax.ClassDeclaration
+classDeclaration id superClass body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm id)},
+        Model.Field {
+          Model.fieldName = (Model.Name "superClass"),
+          Model.fieldTerm = (Typed.unTypedTerm superClass)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.ClassDeclaration
+classDeclarationBody :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.ClassBody
+classDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ClassDeclaration
+classDeclarationClassDeclaration :: Typed.TypedName Syntax.ClassDeclaration
+classDeclarationClassDeclaration = Typed.TypedName (Model.Name "hydra.typescript.syntax.ClassDeclaration")
+
+-- | DSL accessor for the id field of hydra.typescript.syntax.ClassDeclaration
+classDeclarationId :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.Identifier
+classDeclarationId x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "id")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the superClass field of hydra.typescript.syntax.ClassDeclaration
+classDeclarationSuperClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm (Maybe Syntax.Expression)
+classDeclarationSuperClass x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+        Model.projectionFieldName = (Model.Name "superClass")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.ClassDeclaration
+classDeclarationWithBody :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.ClassBody -> Typed.TypedTerm Syntax.ClassDeclaration
+classDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "superClass"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "superClass")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.ClassDeclarationWithComments
+classDeclarationWithComments :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.ClassDeclarationWithComments
+classDeclarationWithComments body comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.ClassDeclarationWithComments
+classDeclarationWithCommentsBody :: Typed.TypedTerm Syntax.ClassDeclarationWithComments -> Typed.TypedTerm Syntax.ClassDeclaration
+classDeclarationWithCommentsBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ClassDeclarationWithComments
+classDeclarationWithCommentsClassDeclarationWithComments :: Typed.TypedName Syntax.ClassDeclarationWithComments
+classDeclarationWithCommentsClassDeclarationWithComments =
+    Typed.TypedName (Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments")
+
+-- | DSL accessor for the comments field of hydra.typescript.syntax.ClassDeclarationWithComments
+classDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.ClassDeclarationWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
+classDeclarationWithCommentsComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.ClassDeclarationWithComments
+classDeclarationWithCommentsWithBody :: Typed.TypedTerm Syntax.ClassDeclarationWithComments -> Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.ClassDeclarationWithComments
+classDeclarationWithCommentsWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the comments field of hydra.typescript.syntax.ClassDeclarationWithComments
+classDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.ClassDeclarationWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.ClassDeclarationWithComments
+classDeclarationWithCommentsWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the id field of hydra.typescript.syntax.ClassDeclaration
+classDeclarationWithId :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ClassDeclaration
+classDeclarationWithId original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "superClass"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "superClass")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the superClass field of hydra.typescript.syntax.ClassDeclaration
+classDeclarationWithSuperClass :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ClassDeclaration
+classDeclarationWithSuperClass original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "superClass"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ClassDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the block variant of hydra.typescript.syntax.Comment
+commentBlock :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Comment
+commentBlock x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Comment"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "block"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.Comment
+commentComment :: Typed.TypedName Syntax.Comment
+commentComment = Typed.TypedName (Model.Name "hydra.typescript.syntax.Comment")
+
+-- | DSL injection for the documentation variant of hydra.typescript.syntax.Comment
+commentDocumentation :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm Syntax.Comment
+commentDocumentation x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Comment"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "documentation"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the line variant of hydra.typescript.syntax.Comment
+commentLine :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Comment
+commentLine x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Comment"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "line"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.ConditionalExpression
+conditionalExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression
+conditionalExpression test consequent alternate =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm test)},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Typed.unTypedTerm consequent)},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternate"),
+          Model.fieldTerm = (Typed.unTypedTerm alternate)}]}))
+
+-- | DSL accessor for the alternate field of hydra.typescript.syntax.ConditionalExpression
+conditionalExpressionAlternate :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression
+conditionalExpressionAlternate x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+        Model.projectionFieldName = (Model.Name "alternate")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ConditionalExpression
+conditionalExpressionConditionalExpression :: Typed.TypedName Syntax.ConditionalExpression
+conditionalExpressionConditionalExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.ConditionalExpression")
+
+-- | DSL accessor for the consequent field of hydra.typescript.syntax.ConditionalExpression
+conditionalExpressionConsequent :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression
+conditionalExpressionConsequent x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+        Model.projectionFieldName = (Model.Name "consequent")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the test field of hydra.typescript.syntax.ConditionalExpression
+conditionalExpressionTest :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression
+conditionalExpressionTest x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+        Model.projectionFieldName = (Model.Name "test")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the alternate field of hydra.typescript.syntax.ConditionalExpression
+conditionalExpressionWithAlternate :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression
+conditionalExpressionWithAlternate original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+              Model.projectionFieldName = (Model.Name "consequent")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternate"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the consequent field of hydra.typescript.syntax.ConditionalExpression
+conditionalExpressionWithConsequent :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression
+conditionalExpressionWithConsequent original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternate"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+              Model.projectionFieldName = (Model.Name "alternate")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the test field of hydra.typescript.syntax.ConditionalExpression
+conditionalExpressionWithTest :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ConditionalExpression
+conditionalExpressionWithTest original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+              Model.projectionFieldName = (Model.Name "consequent")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternate"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ConditionalExpression"),
+              Model.projectionFieldName = (Model.Name "alternate")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.DoWhileStatement
+doWhileStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DoWhileStatement
+doWhileStatement body test =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DoWhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm test)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.DoWhileStatement
+doWhileStatementBody :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Statement
+doWhileStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DoWhileStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.DoWhileStatement
+doWhileStatementDoWhileStatement :: Typed.TypedName Syntax.DoWhileStatement
+doWhileStatementDoWhileStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.DoWhileStatement")
+
+-- | DSL accessor for the test field of hydra.typescript.syntax.DoWhileStatement
+doWhileStatementTest :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Expression
+doWhileStatementTest x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DoWhileStatement"),
+        Model.projectionFieldName = (Model.Name "test")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.DoWhileStatement
+doWhileStatementWithBody :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.DoWhileStatement
+doWhileStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DoWhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DoWhileStatement"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the test field of hydra.typescript.syntax.DoWhileStatement
+doWhileStatementWithTest :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.DoWhileStatement
+doWhileStatementWithTest original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DoWhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DoWhileStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.DocumentationComment
+documentationComment :: Typed.TypedTerm String -> Typed.TypedTerm [Syntax.DocumentationTag] -> Typed.TypedTerm Syntax.DocumentationComment
+documentationComment description tags =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DocumentationComment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "description"),
+          Model.fieldTerm = (Typed.unTypedTerm description)},
+        Model.Field {
+          Model.fieldName = (Model.Name "tags"),
+          Model.fieldTerm = (Typed.unTypedTerm tags)}]}))
+
+-- | DSL accessor for the description field of hydra.typescript.syntax.DocumentationComment
+documentationCommentDescription :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm String
+documentationCommentDescription x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationComment"),
+        Model.projectionFieldName = (Model.Name "description")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.DocumentationComment
+documentationCommentDocumentationComment :: Typed.TypedName Syntax.DocumentationComment
+documentationCommentDocumentationComment = Typed.TypedName (Model.Name "hydra.typescript.syntax.DocumentationComment")
+
+-- | DSL accessor for the tags field of hydra.typescript.syntax.DocumentationComment
+documentationCommentTags :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm [Syntax.DocumentationTag]
+documentationCommentTags x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationComment"),
+        Model.projectionFieldName = (Model.Name "tags")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the description field of hydra.typescript.syntax.DocumentationComment
+documentationCommentWithDescription :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.DocumentationComment
+documentationCommentWithDescription original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DocumentationComment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "description"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "tags"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationComment"),
+              Model.projectionFieldName = (Model.Name "tags")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the tags field of hydra.typescript.syntax.DocumentationComment
+documentationCommentWithTags :: Typed.TypedTerm Syntax.DocumentationComment -> Typed.TypedTerm [Syntax.DocumentationTag] -> Typed.TypedTerm Syntax.DocumentationComment
+documentationCommentWithTags original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DocumentationComment"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "description"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationComment"),
+              Model.projectionFieldName = (Model.Name "description")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "tags"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.DocumentationTag
+documentationTag :: Typed.TypedTerm String -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.DocumentationTag
+documentationTag name type_ paramName description =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "paramName"),
+          Model.fieldTerm = (Typed.unTypedTerm paramName)},
+        Model.Field {
+          Model.fieldName = (Model.Name "description"),
+          Model.fieldTerm = (Typed.unTypedTerm description)}]}))
+
+-- | DSL accessor for the description field of hydra.typescript.syntax.DocumentationTag
+documentationTagDescription :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm String
+documentationTagDescription x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+        Model.projectionFieldName = (Model.Name "description")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.DocumentationTag
+documentationTagDocumentationTag :: Typed.TypedName Syntax.DocumentationTag
+documentationTagDocumentationTag = Typed.TypedName (Model.Name "hydra.typescript.syntax.DocumentationTag")
+
+-- | DSL accessor for the name field of hydra.typescript.syntax.DocumentationTag
+documentationTagName :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm String
+documentationTagName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the paramName field of hydra.typescript.syntax.DocumentationTag
+documentationTagParamName :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm (Maybe Syntax.Identifier)
+documentationTagParamName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+        Model.projectionFieldName = (Model.Name "paramName")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.typescript.syntax.DocumentationTag
+documentationTagType :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm (Maybe Syntax.TypeExpression)
+documentationTagType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the description field of hydra.typescript.syntax.DocumentationTag
+documentationTagWithDescription :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.DocumentationTag
+documentationTagWithDescription original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "paramName"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "paramName")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "description"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.typescript.syntax.DocumentationTag
+documentationTagWithName :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.DocumentationTag
+documentationTagWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "paramName"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "paramName")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "description"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "description")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the paramName field of hydra.typescript.syntax.DocumentationTag
+documentationTagWithParamName :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.DocumentationTag
+documentationTagWithParamName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "paramName"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "description"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "description")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.typescript.syntax.DocumentationTag
+documentationTagWithType :: Typed.TypedTerm Syntax.DocumentationTag -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm Syntax.DocumentationTag
+documentationTagWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "paramName"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "paramName")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "description"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.DocumentationTag"),
+              Model.projectionFieldName = (Model.Name "description")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.ExportAllDeclaration
+exportAllDeclaration :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.ExportAllDeclaration
+exportAllDeclaration exported source =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ExportAllDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "exported"),
+          Model.fieldTerm = (Typed.unTypedTerm exported)},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Typed.unTypedTerm source)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.ExportAllDeclaration
+exportAllDeclarationExportAllDeclaration :: Typed.TypedName Syntax.ExportAllDeclaration
+exportAllDeclarationExportAllDeclaration = Typed.TypedName (Model.Name "hydra.typescript.syntax.ExportAllDeclaration")
+
+-- | DSL accessor for the exported field of hydra.typescript.syntax.ExportAllDeclaration
+exportAllDeclarationExported :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm (Maybe Syntax.Identifier)
+exportAllDeclarationExported x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ExportAllDeclaration"),
+        Model.projectionFieldName = (Model.Name "exported")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the source field of hydra.typescript.syntax.ExportAllDeclaration
+exportAllDeclarationSource :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm Syntax.StringLiteral
+exportAllDeclarationSource x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ExportAllDeclaration"),
+        Model.projectionFieldName = (Model.Name "source")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the exported field of hydra.typescript.syntax.ExportAllDeclaration
+exportAllDeclarationWithExported :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.ExportAllDeclaration
+exportAllDeclarationWithExported original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ExportAllDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "exported"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ExportAllDeclaration"),
+              Model.projectionFieldName = (Model.Name "source")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the source field of hydra.typescript.syntax.ExportAllDeclaration
+exportAllDeclarationWithSource :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.ExportAllDeclaration
+exportAllDeclarationWithSource original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ExportAllDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "exported"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ExportAllDeclaration"),
+              Model.projectionFieldName = (Model.Name "exported")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the all variant of hydra.typescript.syntax.ExportDeclaration
+exportDeclarationAll :: Typed.TypedTerm Syntax.ExportAllDeclaration -> Typed.TypedTerm Syntax.ExportDeclaration
+exportDeclarationAll x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ExportDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "all"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the declaration variant of hydra.typescript.syntax.ExportDeclaration
+exportDeclarationDeclaration :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ExportDeclaration
+exportDeclarationDeclaration x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ExportDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "declaration"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the default variant of hydra.typescript.syntax.ExportDeclaration
+exportDeclarationDefault :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ExportDeclaration
+exportDeclarationDefault x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ExportDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "default"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.ExportDeclaration
+exportDeclarationExportDeclaration :: Typed.TypedName Syntax.ExportDeclaration
+exportDeclarationExportDeclaration = Typed.TypedName (Model.Name "hydra.typescript.syntax.ExportDeclaration")
+
+-- | DSL injection for the named variant of hydra.typescript.syntax.ExportDeclaration
+exportDeclarationNamed :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm Syntax.ExportDeclaration
+exportDeclarationNamed x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ExportDeclaration"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "named"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.ExportSpecifier
+exportSpecifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExportSpecifier
+exportSpecifier local exported =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ExportSpecifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "local"),
+          Model.fieldTerm = (Typed.unTypedTerm local)},
+        Model.Field {
+          Model.fieldName = (Model.Name "exported"),
+          Model.fieldTerm = (Typed.unTypedTerm exported)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.ExportSpecifier
+exportSpecifierExportSpecifier :: Typed.TypedName Syntax.ExportSpecifier
+exportSpecifierExportSpecifier = Typed.TypedName (Model.Name "hydra.typescript.syntax.ExportSpecifier")
+
+-- | DSL accessor for the exported field of hydra.typescript.syntax.ExportSpecifier
+exportSpecifierExported :: Typed.TypedTerm Syntax.ExportSpecifier -> Typed.TypedTerm Syntax.Identifier
+exportSpecifierExported x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ExportSpecifier"),
+        Model.projectionFieldName = (Model.Name "exported")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the local field of hydra.typescript.syntax.ExportSpecifier
+exportSpecifierLocal :: Typed.TypedTerm Syntax.ExportSpecifier -> Typed.TypedTerm Syntax.Identifier
+exportSpecifierLocal x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ExportSpecifier"),
+        Model.projectionFieldName = (Model.Name "local")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the exported field of hydra.typescript.syntax.ExportSpecifier
+exportSpecifierWithExported :: Typed.TypedTerm Syntax.ExportSpecifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExportSpecifier
+exportSpecifierWithExported original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ExportSpecifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "local"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ExportSpecifier"),
+              Model.projectionFieldName = (Model.Name "local")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "exported"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the local field of hydra.typescript.syntax.ExportSpecifier
+exportSpecifierWithLocal :: Typed.TypedTerm Syntax.ExportSpecifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ExportSpecifier
+exportSpecifierWithLocal original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ExportSpecifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "local"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "exported"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ExportSpecifier"),
+              Model.projectionFieldName = (Model.Name "exported")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the array variant of hydra.typescript.syntax.Expression
+expressionArray :: Typed.TypedTerm Syntax.ArrayExpression -> Typed.TypedTerm Syntax.Expression
+expressionArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "array"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the arrow variant of hydra.typescript.syntax.Expression
+expressionArrow :: Typed.TypedTerm Syntax.ArrowFunctionExpression -> Typed.TypedTerm Syntax.Expression
+expressionArrow x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "arrow"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the asExpression variant of hydra.typescript.syntax.Expression
+expressionAsExpression :: Typed.TypedTerm Syntax.AsExpression -> Typed.TypedTerm Syntax.Expression
+expressionAsExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "asExpression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the assignment variant of hydra.typescript.syntax.Expression
+expressionAssignment :: Typed.TypedTerm Syntax.AssignmentExpression -> Typed.TypedTerm Syntax.Expression
+expressionAssignment x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "assignment"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the await variant of hydra.typescript.syntax.Expression
+expressionAwait :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression
+expressionAwait x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "await"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the binary variant of hydra.typescript.syntax.Expression
+expressionBinary :: Typed.TypedTerm Syntax.BinaryExpression -> Typed.TypedTerm Syntax.Expression
+expressionBinary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "binary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the call variant of hydra.typescript.syntax.Expression
+expressionCall :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Syntax.Expression
+expressionCall x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "call"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the conditional variant of hydra.typescript.syntax.Expression
+expressionConditional :: Typed.TypedTerm Syntax.ConditionalExpression -> Typed.TypedTerm Syntax.Expression
+expressionConditional x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "conditional"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.Expression
+expressionExpression :: Typed.TypedName Syntax.Expression
+expressionExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.Expression")
+
+-- | DSL injection for the function variant of hydra.typescript.syntax.Expression
+expressionFunction :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.Expression
+expressionFunction x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "function"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the identifier variant of hydra.typescript.syntax.Expression
+expressionIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Expression
+expressionIdentifier x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "identifier"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the literal variant of hydra.typescript.syntax.Expression
+expressionLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.Expression
+expressionLiteral x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "literal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the member variant of hydra.typescript.syntax.Expression
+expressionMember :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression
+expressionMember x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "member"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the new variant of hydra.typescript.syntax.Expression
+expressionNew :: Typed.TypedTerm Syntax.CallExpression -> Typed.TypedTerm Syntax.Expression
+expressionNew x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "new"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the object variant of hydra.typescript.syntax.Expression
+expressionObject :: Typed.TypedTerm Syntax.ObjectExpression -> Typed.TypedTerm Syntax.Expression
+expressionObject x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "object"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the parenthesized variant of hydra.typescript.syntax.Expression
+expressionParenthesized :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression
+expressionParenthesized x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "parenthesized"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the sequence variant of hydra.typescript.syntax.Expression
+expressionSequence :: Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.Expression
+expressionSequence x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "sequence"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the spread variant of hydra.typescript.syntax.Expression
+expressionSpread :: Typed.TypedTerm Syntax.SpreadElement -> Typed.TypedTerm Syntax.Expression
+expressionSpread x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "spread"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the this variant of hydra.typescript.syntax.Expression
+expressionThis :: Typed.TypedTerm Syntax.Expression
+expressionThis =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "this"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the unary variant of hydra.typescript.syntax.Expression
+expressionUnary :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.Expression
+expressionUnary x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unary"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the yield variant of hydra.typescript.syntax.Expression
+expressionYield :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.Expression
+expressionYield x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Expression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "yield"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.ForInLeft
+forInLeftForInLeft :: Typed.TypedName Syntax.ForInLeft
+forInLeftForInLeft = Typed.TypedName (Model.Name "hydra.typescript.syntax.ForInLeft")
+
+-- | DSL injection for the pattern variant of hydra.typescript.syntax.ForInLeft
+forInLeftPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.ForInLeft
+forInLeftPattern x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ForInLeft"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "pattern"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the variable variant of hydra.typescript.syntax.ForInLeft
+forInLeftVariable :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.ForInLeft
+forInLeftVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ForInLeft"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.ForInStatement
+forInStatement :: Typed.TypedTerm Syntax.ForInLeft -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForInStatement
+forInStatement left right body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm left)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm right)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.ForInStatement
+forInStatementBody :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Statement
+forInStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ForInStatement
+forInStatementForInStatement :: Typed.TypedName Syntax.ForInStatement
+forInStatementForInStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.ForInStatement")
+
+-- | DSL accessor for the left field of hydra.typescript.syntax.ForInStatement
+forInStatementLeft :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.ForInLeft
+forInStatementLeft x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+        Model.projectionFieldName = (Model.Name "left")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the right field of hydra.typescript.syntax.ForInStatement
+forInStatementRight :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Expression
+forInStatementRight x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+        Model.projectionFieldName = (Model.Name "right")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.ForInStatement
+forInStatementWithBody :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForInStatement
+forInStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the left field of hydra.typescript.syntax.ForInStatement
+forInStatementWithLeft :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.ForInLeft -> Typed.TypedTerm Syntax.ForInStatement
+forInStatementWithLeft original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the right field of hydra.typescript.syntax.ForInStatement
+forInStatementWithRight :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ForInStatement
+forInStatementWithRight original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForInStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the expression variant of hydra.typescript.syntax.ForInit
+forInitExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ForInit
+forInitExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ForInit"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.ForInit
+forInitForInit :: Typed.TypedName Syntax.ForInit
+forInitForInit = Typed.TypedName (Model.Name "hydra.typescript.syntax.ForInit")
+
+-- | DSL injection for the variable variant of hydra.typescript.syntax.ForInit
+forInitVariable :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.ForInit
+forInitVariable x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ForInit"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variable"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.ForOfStatement
+forOfStatement :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ForInLeft -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForOfStatement
+forOfStatement await left right body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "await"),
+          Model.fieldTerm = (Typed.unTypedTerm await)},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm left)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm right)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the await field of hydra.typescript.syntax.ForOfStatement
+forOfStatementAwait :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Bool
+forOfStatementAwait x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+        Model.projectionFieldName = (Model.Name "await")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.ForOfStatement
+forOfStatementBody :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Statement
+forOfStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ForOfStatement
+forOfStatementForOfStatement :: Typed.TypedName Syntax.ForOfStatement
+forOfStatementForOfStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.ForOfStatement")
+
+-- | DSL accessor for the left field of hydra.typescript.syntax.ForOfStatement
+forOfStatementLeft :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.ForInLeft
+forOfStatementLeft x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+        Model.projectionFieldName = (Model.Name "left")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the right field of hydra.typescript.syntax.ForOfStatement
+forOfStatementRight :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Expression
+forOfStatementRight x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+        Model.projectionFieldName = (Model.Name "right")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the await field of hydra.typescript.syntax.ForOfStatement
+forOfStatementWithAwait :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.ForOfStatement
+forOfStatementWithAwait original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "await"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.ForOfStatement
+forOfStatementWithBody :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForOfStatement
+forOfStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "await"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "await")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the left field of hydra.typescript.syntax.ForOfStatement
+forOfStatementWithLeft :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.ForInLeft -> Typed.TypedTerm Syntax.ForOfStatement
+forOfStatementWithLeft original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "await"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "await")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "right")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the right field of hydra.typescript.syntax.ForOfStatement
+forOfStatementWithRight :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ForOfStatement
+forOfStatementWithRight original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "await"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "await")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "left"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "left")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "right"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForOfStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.ForStatement
+forStatement :: Typed.TypedTerm (Maybe Syntax.ForInit) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForStatement
+forStatement init test update body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Typed.unTypedTerm init)},
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm test)},
+        Model.Field {
+          Model.fieldName = (Model.Name "update"),
+          Model.fieldTerm = (Typed.unTypedTerm update)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.ForStatement
+forStatementBody :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Statement
+forStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ForStatement
+forStatementForStatement :: Typed.TypedName Syntax.ForStatement
+forStatementForStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.ForStatement")
+
+-- | DSL accessor for the init field of hydra.typescript.syntax.ForStatement
+forStatementInit :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.ForInit)
+forStatementInit x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+        Model.projectionFieldName = (Model.Name "init")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the test field of hydra.typescript.syntax.ForStatement
+forStatementTest :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
+forStatementTest x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+        Model.projectionFieldName = (Model.Name "test")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the update field of hydra.typescript.syntax.ForStatement
+forStatementUpdate :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Expression)
+forStatementUpdate x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+        Model.projectionFieldName = (Model.Name "update")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.ForStatement
+forStatementWithBody :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ForStatement
+forStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "init")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "update"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "update")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the init field of hydra.typescript.syntax.ForStatement
+forStatementWithInit :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.ForInit) -> Typed.TypedTerm Syntax.ForStatement
+forStatementWithInit original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "update"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "update")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the test field of hydra.typescript.syntax.ForStatement
+forStatementWithTest :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ForStatement
+forStatementWithTest original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "init")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "update"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "update")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the update field of hydra.typescript.syntax.ForStatement
+forStatementWithUpdate :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.ForStatement
+forStatementWithUpdate original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "init")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "update"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ForStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.FunctionDeclaration
+functionDeclaration :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionDeclaration
+functionDeclaration id params body async generator =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm id)},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Typed.unTypedTerm params)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Typed.unTypedTerm async)},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Typed.unTypedTerm generator)}]}))
+
+-- | DSL accessor for the async field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationAsync :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Bool
+functionDeclarationAsync x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+        Model.projectionFieldName = (Model.Name "async")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationBody :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.BlockStatement
+functionDeclarationBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationFunctionDeclaration :: Typed.TypedName Syntax.FunctionDeclaration
+functionDeclarationFunctionDeclaration = Typed.TypedName (Model.Name "hydra.typescript.syntax.FunctionDeclaration")
+
+-- | DSL accessor for the generator field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationGenerator :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Bool
+functionDeclarationGenerator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+        Model.projectionFieldName = (Model.Name "generator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the id field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationId :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.Identifier
+functionDeclarationId x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+        Model.projectionFieldName = (Model.Name "id")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the params field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationParams :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm [Syntax.Pattern]
+functionDeclarationParams x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+        Model.projectionFieldName = (Model.Name "params")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the async field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationWithAsync :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionDeclaration
+functionDeclarationWithAsync original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "generator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationWithBody :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.FunctionDeclaration
+functionDeclarationWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "generator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.FunctionDeclarationWithComments
+functionDeclarationWithComments :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.FunctionDeclarationWithComments
+functionDeclarationWithComments body comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.FunctionDeclarationWithComments
+functionDeclarationWithCommentsBody :: Typed.TypedTerm Syntax.FunctionDeclarationWithComments -> Typed.TypedTerm Syntax.FunctionDeclaration
+functionDeclarationWithCommentsBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the comments field of hydra.typescript.syntax.FunctionDeclarationWithComments
+functionDeclarationWithCommentsComments :: Typed.TypedTerm Syntax.FunctionDeclarationWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
+functionDeclarationWithCommentsComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.FunctionDeclarationWithComments
+functionDeclarationWithCommentsFunctionDeclarationWithComments :: Typed.TypedName Syntax.FunctionDeclarationWithComments
+functionDeclarationWithCommentsFunctionDeclarationWithComments =
+    Typed.TypedName (Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments")
+
+-- | DSL updater for the body field of hydra.typescript.syntax.FunctionDeclarationWithComments
+functionDeclarationWithCommentsWithBody :: Typed.TypedTerm Syntax.FunctionDeclarationWithComments -> Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.FunctionDeclarationWithComments
+functionDeclarationWithCommentsWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the comments field of hydra.typescript.syntax.FunctionDeclarationWithComments
+functionDeclarationWithCommentsWithComments :: Typed.TypedTerm Syntax.FunctionDeclarationWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.FunctionDeclarationWithComments
+functionDeclarationWithCommentsWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the generator field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationWithGenerator :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionDeclaration
+functionDeclarationWithGenerator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the id field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationWithId :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.FunctionDeclaration
+functionDeclarationWithId original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "generator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the params field of hydra.typescript.syntax.FunctionDeclaration
+functionDeclarationWithParams :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.FunctionDeclaration
+functionDeclarationWithParams original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionDeclaration"),
+              Model.projectionFieldName = (Model.Name "generator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.FunctionExpression
+functionExpression :: Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionExpression
+functionExpression id params body async generator =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm id)},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Typed.unTypedTerm params)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Typed.unTypedTerm async)},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Typed.unTypedTerm generator)}]}))
+
+-- | DSL accessor for the async field of hydra.typescript.syntax.FunctionExpression
+functionExpressionAsync :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Bool
+functionExpressionAsync x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+        Model.projectionFieldName = (Model.Name "async")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.FunctionExpression
+functionExpressionBody :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.BlockStatement
+functionExpressionBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.FunctionExpression
+functionExpressionFunctionExpression :: Typed.TypedName Syntax.FunctionExpression
+functionExpressionFunctionExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.FunctionExpression")
+
+-- | DSL accessor for the generator field of hydra.typescript.syntax.FunctionExpression
+functionExpressionGenerator :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Bool
+functionExpressionGenerator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+        Model.projectionFieldName = (Model.Name "generator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the id field of hydra.typescript.syntax.FunctionExpression
+functionExpressionId :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm (Maybe Syntax.Identifier)
+functionExpressionId x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+        Model.projectionFieldName = (Model.Name "id")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the params field of hydra.typescript.syntax.FunctionExpression
+functionExpressionParams :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm [Syntax.Pattern]
+functionExpressionParams x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+        Model.projectionFieldName = (Model.Name "params")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the async field of hydra.typescript.syntax.FunctionExpression
+functionExpressionWithAsync :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionExpression
+functionExpressionWithAsync original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "generator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.FunctionExpression
+functionExpressionWithBody :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.FunctionExpression
+functionExpressionWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "generator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the generator field of hydra.typescript.syntax.FunctionExpression
+functionExpressionWithGenerator :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.FunctionExpression
+functionExpressionWithGenerator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the id field of hydra.typescript.syntax.FunctionExpression
+functionExpressionWithId :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm (Maybe Syntax.Identifier) -> Typed.TypedTerm Syntax.FunctionExpression
+functionExpressionWithId original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "params")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "generator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the params field of hydra.typescript.syntax.FunctionExpression
+functionExpressionWithParams :: Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm [Syntax.Pattern] -> Typed.TypedTerm Syntax.FunctionExpression
+functionExpressionWithParams original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "params"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "async"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "async")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "generator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionExpression"),
+              Model.projectionFieldName = (Model.Name "generator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.FunctionTypeExpression
+functionTypeExpression :: Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.FunctionTypeExpression
+functionTypeExpression typeParameters parameters returnType =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm typeParameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm parameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "returnType"),
+          Model.fieldTerm = (Typed.unTypedTerm returnType)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.FunctionTypeExpression
+functionTypeExpressionFunctionTypeExpression :: Typed.TypedName Syntax.FunctionTypeExpression
+functionTypeExpressionFunctionTypeExpression =
+    Typed.TypedName (Model.Name "hydra.typescript.syntax.FunctionTypeExpression")
+
+-- | DSL accessor for the parameters field of hydra.typescript.syntax.FunctionTypeExpression
+functionTypeExpressionParameters :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm [Syntax.TypeExpression]
+functionTypeExpressionParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+        Model.projectionFieldName = (Model.Name "parameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the returnType field of hydra.typescript.syntax.FunctionTypeExpression
+functionTypeExpressionReturnType :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+functionTypeExpressionReturnType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+        Model.projectionFieldName = (Model.Name "returnType")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeParameters field of hydra.typescript.syntax.FunctionTypeExpression
+functionTypeExpressionTypeParameters :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm [Syntax.TypeParameter]
+functionTypeExpressionTypeParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+        Model.projectionFieldName = (Model.Name "typeParameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the parameters field of hydra.typescript.syntax.FunctionTypeExpression
+functionTypeExpressionWithParameters :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.FunctionTypeExpression
+functionTypeExpressionWithParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+              Model.projectionFieldName = (Model.Name "typeParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "returnType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+              Model.projectionFieldName = (Model.Name "returnType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the returnType field of hydra.typescript.syntax.FunctionTypeExpression
+functionTypeExpressionWithReturnType :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.FunctionTypeExpression
+functionTypeExpressionWithReturnType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+              Model.projectionFieldName = (Model.Name "typeParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "returnType"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the typeParameters field of hydra.typescript.syntax.FunctionTypeExpression
+functionTypeExpressionWithTypeParameters :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.FunctionTypeExpression
+functionTypeExpressionWithTypeParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "parameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+              Model.projectionFieldName = (Model.Name "parameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "returnType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.FunctionTypeExpression"),
+              Model.projectionFieldName = (Model.Name "returnType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.typescript.syntax.Identifier wrapper
+identifier :: Typed.TypedTerm String -> Typed.TypedTerm Syntax.Identifier
+identifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.typescript.syntax.Identifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.Identifier
+identifierIdentifier :: Typed.TypedName Syntax.Identifier
+identifierIdentifier = Typed.TypedName (Model.Name "hydra.typescript.syntax.Identifier")
+
+-- | DSL constructor for hydra.typescript.syntax.IfStatement
+ifStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm (Maybe Syntax.Statement) -> Typed.TypedTerm Syntax.IfStatement
+ifStatement test consequent alternate =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm test)},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Typed.unTypedTerm consequent)},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternate"),
+          Model.fieldTerm = (Typed.unTypedTerm alternate)}]}))
+
+-- | DSL accessor for the alternate field of hydra.typescript.syntax.IfStatement
+ifStatementAlternate :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm (Maybe Syntax.Statement)
+ifStatementAlternate x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+        Model.projectionFieldName = (Model.Name "alternate")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the consequent field of hydra.typescript.syntax.IfStatement
+ifStatementConsequent :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Statement
+ifStatementConsequent x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+        Model.projectionFieldName = (Model.Name "consequent")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.IfStatement
+ifStatementIfStatement :: Typed.TypedName Syntax.IfStatement
+ifStatementIfStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.IfStatement")
+
+-- | DSL accessor for the test field of hydra.typescript.syntax.IfStatement
+ifStatementTest :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Expression
+ifStatementTest x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+        Model.projectionFieldName = (Model.Name "test")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the alternate field of hydra.typescript.syntax.IfStatement
+ifStatementWithAlternate :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm (Maybe Syntax.Statement) -> Typed.TypedTerm Syntax.IfStatement
+ifStatementWithAlternate original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+              Model.projectionFieldName = (Model.Name "consequent")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternate"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the consequent field of hydra.typescript.syntax.IfStatement
+ifStatementWithConsequent :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.IfStatement
+ifStatementWithConsequent original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternate"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+              Model.projectionFieldName = (Model.Name "alternate")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the test field of hydra.typescript.syntax.IfStatement
+ifStatementWithTest :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.IfStatement
+ifStatementWithTest original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+              Model.projectionFieldName = (Model.Name "consequent")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "alternate"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.IfStatement"),
+              Model.projectionFieldName = (Model.Name "alternate")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the default variant of hydra.typescript.syntax.ImportClause
+importClauseDefault :: Typed.TypedTerm Syntax.ImportDefaultSpecifier -> Typed.TypedTerm Syntax.ImportClause
+importClauseDefault x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ImportClause"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "default"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.ImportClause
+importClauseImportClause :: Typed.TypedName Syntax.ImportClause
+importClauseImportClause = Typed.TypedName (Model.Name "hydra.typescript.syntax.ImportClause")
+
+-- | DSL injection for the named variant of hydra.typescript.syntax.ImportClause
+importClauseNamed :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.ImportClause
+importClauseNamed x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ImportClause"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "named"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the namespace variant of hydra.typescript.syntax.ImportClause
+importClauseNamespace :: Typed.TypedTerm Syntax.ImportNamespaceSpecifier -> Typed.TypedTerm Syntax.ImportClause
+importClauseNamespace x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ImportClause"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "namespace"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.ImportDeclaration
+importDeclaration :: Typed.TypedTerm [Syntax.ImportClause] -> Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.ImportDeclaration
+importDeclaration specifiers source =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ImportDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "specifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm specifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Typed.unTypedTerm source)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.ImportDeclaration
+importDeclarationImportDeclaration :: Typed.TypedName Syntax.ImportDeclaration
+importDeclarationImportDeclaration = Typed.TypedName (Model.Name "hydra.typescript.syntax.ImportDeclaration")
+
+-- | DSL accessor for the source field of hydra.typescript.syntax.ImportDeclaration
+importDeclarationSource :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm Syntax.StringLiteral
+importDeclarationSource x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ImportDeclaration"),
+        Model.projectionFieldName = (Model.Name "source")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the specifiers field of hydra.typescript.syntax.ImportDeclaration
+importDeclarationSpecifiers :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm [Syntax.ImportClause]
+importDeclarationSpecifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ImportDeclaration"),
+        Model.projectionFieldName = (Model.Name "specifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the source field of hydra.typescript.syntax.ImportDeclaration
+importDeclarationWithSource :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.ImportDeclaration
+importDeclarationWithSource original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ImportDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "specifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ImportDeclaration"),
+              Model.projectionFieldName = (Model.Name "specifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the specifiers field of hydra.typescript.syntax.ImportDeclaration
+importDeclarationWithSpecifiers :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm [Syntax.ImportClause] -> Typed.TypedTerm Syntax.ImportDeclaration
+importDeclarationWithSpecifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ImportDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "specifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ImportDeclaration"),
+              Model.projectionFieldName = (Model.Name "source")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.typescript.syntax.ImportDefaultSpecifier wrapper
+importDefaultSpecifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportDefaultSpecifier
+importDefaultSpecifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.typescript.syntax.ImportDefaultSpecifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ImportDefaultSpecifier
+importDefaultSpecifierImportDefaultSpecifier :: Typed.TypedName Syntax.ImportDefaultSpecifier
+importDefaultSpecifierImportDefaultSpecifier =
+    Typed.TypedName (Model.Name "hydra.typescript.syntax.ImportDefaultSpecifier")
+
+-- | DSL constructor for the hydra.typescript.syntax.ImportNamespaceSpecifier wrapper
+importNamespaceSpecifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportNamespaceSpecifier
+importNamespaceSpecifier x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.typescript.syntax.ImportNamespaceSpecifier"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ImportNamespaceSpecifier
+importNamespaceSpecifierImportNamespaceSpecifier :: Typed.TypedName Syntax.ImportNamespaceSpecifier
+importNamespaceSpecifierImportNamespaceSpecifier =
+    Typed.TypedName (Model.Name "hydra.typescript.syntax.ImportNamespaceSpecifier")
+
+-- | DSL constructor for hydra.typescript.syntax.ImportSpecifier
+importSpecifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportSpecifier
+importSpecifier imported local =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ImportSpecifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "imported"),
+          Model.fieldTerm = (Typed.unTypedTerm imported)},
+        Model.Field {
+          Model.fieldName = (Model.Name "local"),
+          Model.fieldTerm = (Typed.unTypedTerm local)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.ImportSpecifier
+importSpecifierImportSpecifier :: Typed.TypedName Syntax.ImportSpecifier
+importSpecifierImportSpecifier = Typed.TypedName (Model.Name "hydra.typescript.syntax.ImportSpecifier")
+
+-- | DSL accessor for the imported field of hydra.typescript.syntax.ImportSpecifier
+importSpecifierImported :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.Identifier
+importSpecifierImported x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ImportSpecifier"),
+        Model.projectionFieldName = (Model.Name "imported")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the local field of hydra.typescript.syntax.ImportSpecifier
+importSpecifierLocal :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.Identifier
+importSpecifierLocal x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ImportSpecifier"),
+        Model.projectionFieldName = (Model.Name "local")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the imported field of hydra.typescript.syntax.ImportSpecifier
+importSpecifierWithImported :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportSpecifier
+importSpecifierWithImported original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ImportSpecifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "imported"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "local"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ImportSpecifier"),
+              Model.projectionFieldName = (Model.Name "local")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the local field of hydra.typescript.syntax.ImportSpecifier
+importSpecifierWithLocal :: Typed.TypedTerm Syntax.ImportSpecifier -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.ImportSpecifier
+importSpecifierWithLocal original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ImportSpecifier"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "imported"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ImportSpecifier"),
+              Model.projectionFieldName = (Model.Name "imported")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "local"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclaration :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm [Syntax.PropertySignature] -> Typed.TypedTerm Syntax.InterfaceDeclaration
+interfaceDeclaration name typeParameters extends members =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm typeParameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Typed.unTypedTerm extends)},
+        Model.Field {
+          Model.fieldName = (Model.Name "members"),
+          Model.fieldTerm = (Typed.unTypedTerm members)}]}))
+
+-- | DSL accessor for the extends field of hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationExtends :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeExpression]
+interfaceDeclarationExtends x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "extends")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationInterfaceDeclaration :: Typed.TypedName Syntax.InterfaceDeclaration
+interfaceDeclarationInterfaceDeclaration = Typed.TypedName (Model.Name "hydra.typescript.syntax.InterfaceDeclaration")
+
+-- | DSL accessor for the members field of hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationMembers :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.PropertySignature]
+interfaceDeclarationMembers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "members")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationName :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.Identifier
+interfaceDeclarationName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the typeParameters field of hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationTypeParameters :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
+interfaceDeclarationTypeParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+        Model.projectionFieldName = (Model.Name "typeParameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the extends field of hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationWithExtends :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.InterfaceDeclaration
+interfaceDeclarationWithExtends original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "typeParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "members"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "members")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the members field of hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationWithMembers :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.PropertySignature] -> Typed.TypedTerm Syntax.InterfaceDeclaration
+interfaceDeclarationWithMembers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "typeParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "members"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationWithName :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.InterfaceDeclaration
+interfaceDeclarationWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "typeParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "members"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "members")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the typeParameters field of hydra.typescript.syntax.InterfaceDeclaration
+interfaceDeclarationWithTypeParameters :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.InterfaceDeclaration
+interfaceDeclarationWithTypeParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "extends"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "extends")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "members"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.InterfaceDeclaration"),
+              Model.projectionFieldName = (Model.Name "members")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.LabeledStatement
+labeledStatement :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStatement
+labeledStatement label body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.LabeledStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "label"),
+          Model.fieldTerm = (Typed.unTypedTerm label)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.LabeledStatement
+labeledStatementBody :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement
+labeledStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.LabeledStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the label field of hydra.typescript.syntax.LabeledStatement
+labeledStatementLabel :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Identifier
+labeledStatementLabel x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.LabeledStatement"),
+        Model.projectionFieldName = (Model.Name "label")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.LabeledStatement
+labeledStatementLabeledStatement :: Typed.TypedName Syntax.LabeledStatement
+labeledStatementLabeledStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.LabeledStatement")
+
+-- | DSL updater for the body field of hydra.typescript.syntax.LabeledStatement
+labeledStatementWithBody :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.LabeledStatement
+labeledStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.LabeledStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "label"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.LabeledStatement"),
+              Model.projectionFieldName = (Model.Name "label")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the label field of hydra.typescript.syntax.LabeledStatement
+labeledStatementWithLabel :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.LabeledStatement
+labeledStatementWithLabel original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.LabeledStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "label"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.LabeledStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the bigInt variant of hydra.typescript.syntax.Literal
+literalBigInt :: Typed.TypedTerm Integer -> Typed.TypedTerm Syntax.Literal
+literalBigInt x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "bigInt"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the boolean variant of hydra.typescript.syntax.Literal
+literalBoolean :: Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Literal
+literalBoolean x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "boolean"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.Literal
+literalLiteral :: Typed.TypedName Syntax.Literal
+literalLiteral = Typed.TypedName (Model.Name "hydra.typescript.syntax.Literal")
+
+-- | DSL injection for the null variant of hydra.typescript.syntax.Literal
+literalNull :: Typed.TypedTerm Syntax.Literal
+literalNull =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "null"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the number variant of hydra.typescript.syntax.Literal
+literalNumber :: Typed.TypedTerm Syntax.NumericLiteral -> Typed.TypedTerm Syntax.Literal
+literalNumber x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "number"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the string variant of hydra.typescript.syntax.Literal
+literalString :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Syntax.Literal
+literalString x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "string"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the template variant of hydra.typescript.syntax.Literal
+literalTemplate :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm Syntax.Literal
+literalTemplate x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "template"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the undefined variant of hydra.typescript.syntax.Literal
+literalUndefined :: Typed.TypedTerm Syntax.Literal
+literalUndefined =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Literal"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "undefined"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for hydra.typescript.syntax.MemberExpression
+memberExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MemberExpression
+memberExpression object property computed optional =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "object"),
+          Model.fieldTerm = (Typed.unTypedTerm object)},
+        Model.Field {
+          Model.fieldName = (Model.Name "property"),
+          Model.fieldTerm = (Typed.unTypedTerm property)},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Typed.unTypedTerm computed)},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Typed.unTypedTerm optional)}]}))
+
+-- | DSL accessor for the computed field of hydra.typescript.syntax.MemberExpression
+memberExpressionComputed :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Bool
+memberExpressionComputed x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+        Model.projectionFieldName = (Model.Name "computed")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.MemberExpression
+memberExpressionMemberExpression :: Typed.TypedName Syntax.MemberExpression
+memberExpressionMemberExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.MemberExpression")
+
+-- | DSL accessor for the object field of hydra.typescript.syntax.MemberExpression
+memberExpressionObject :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression
+memberExpressionObject x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+        Model.projectionFieldName = (Model.Name "object")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the optional field of hydra.typescript.syntax.MemberExpression
+memberExpressionOptional :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Bool
+memberExpressionOptional x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+        Model.projectionFieldName = (Model.Name "optional")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the property field of hydra.typescript.syntax.MemberExpression
+memberExpressionProperty :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression
+memberExpressionProperty x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+        Model.projectionFieldName = (Model.Name "property")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the computed field of hydra.typescript.syntax.MemberExpression
+memberExpressionWithComputed :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MemberExpression
+memberExpressionWithComputed original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "object"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "object")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "property"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "property")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the object field of hydra.typescript.syntax.MemberExpression
+memberExpressionWithObject :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.MemberExpression
+memberExpressionWithObject original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "object"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "property"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "property")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the optional field of hydra.typescript.syntax.MemberExpression
+memberExpressionWithOptional :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MemberExpression
+memberExpressionWithOptional original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "object"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "object")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "property"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "property")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the property field of hydra.typescript.syntax.MemberExpression
+memberExpressionWithProperty :: Typed.TypedTerm Syntax.MemberExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.MemberExpression
+memberExpressionWithProperty original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "object"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "object")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "property"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MemberExpression"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.MethodDefinition
+methodDefinition :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.MethodKind -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodDefinition
+methodDefinition key value kind computed static =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Typed.unTypedTerm key)},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm value)},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Typed.unTypedTerm kind)},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Typed.unTypedTerm computed)},
+        Model.Field {
+          Model.fieldName = (Model.Name "static"),
+          Model.fieldTerm = (Typed.unTypedTerm static)}]}))
+
+-- | DSL accessor for the computed field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionComputed :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Bool
+methodDefinitionComputed x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+        Model.projectionFieldName = (Model.Name "computed")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the key field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionKey :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.Expression
+methodDefinitionKey x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+        Model.projectionFieldName = (Model.Name "key")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the kind field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionKind :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.MethodKind
+methodDefinitionKind x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+        Model.projectionFieldName = (Model.Name "kind")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.MethodDefinition
+methodDefinitionMethodDefinition :: Typed.TypedName Syntax.MethodDefinition
+methodDefinitionMethodDefinition = Typed.TypedName (Model.Name "hydra.typescript.syntax.MethodDefinition")
+
+-- | DSL accessor for the static field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionStatic :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Bool
+methodDefinitionStatic x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+        Model.projectionFieldName = (Model.Name "static")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the value field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionValue :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.FunctionExpression
+methodDefinitionValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the computed field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionWithComputed :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodDefinition
+methodDefinitionWithComputed original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "static"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "static")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the key field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionWithKey :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.MethodDefinition
+methodDefinitionWithKey original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "static"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "static")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the kind field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionWithKind :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.MethodKind -> Typed.TypedTerm Syntax.MethodDefinition
+methodDefinitionWithKind original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "static"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "static")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the static field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionWithStatic :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.MethodDefinition
+methodDefinitionWithStatic original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "static"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the value field of hydra.typescript.syntax.MethodDefinition
+methodDefinitionWithValue :: Typed.TypedTerm Syntax.MethodDefinition -> Typed.TypedTerm Syntax.FunctionExpression -> Typed.TypedTerm Syntax.MethodDefinition
+methodDefinitionWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "static"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.MethodDefinition"),
+              Model.projectionFieldName = (Model.Name "static")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the constructor variant of hydra.typescript.syntax.MethodKind
+methodKindConstructor :: Typed.TypedTerm Syntax.MethodKind
+methodKindConstructor =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.MethodKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "constructor"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the get variant of hydra.typescript.syntax.MethodKind
+methodKindGet :: Typed.TypedTerm Syntax.MethodKind
+methodKindGet =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.MethodKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "get"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the method variant of hydra.typescript.syntax.MethodKind
+methodKindMethod :: Typed.TypedTerm Syntax.MethodKind
+methodKindMethod =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.MethodKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "method"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.typescript.syntax.MethodKind
+methodKindMethodKind :: Typed.TypedName Syntax.MethodKind
+methodKindMethodKind = Typed.TypedName (Model.Name "hydra.typescript.syntax.MethodKind")
+
+-- | DSL injection for the set variant of hydra.typescript.syntax.MethodKind
+methodKindSet :: Typed.TypedTerm Syntax.MethodKind
+methodKindSet =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.MethodKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "set"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the export variant of hydra.typescript.syntax.ModuleItem
+moduleItemExport :: Typed.TypedTerm Syntax.ExportDeclaration -> Typed.TypedTerm Syntax.ModuleItem
+moduleItemExport x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItem"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "export"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the import variant of hydra.typescript.syntax.ModuleItem
+moduleItemImport :: Typed.TypedTerm Syntax.ImportDeclaration -> Typed.TypedTerm Syntax.ModuleItem
+moduleItemImport x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItem"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "import"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the interface variant of hydra.typescript.syntax.ModuleItem
+moduleItemInterface :: Typed.TypedTerm Syntax.InterfaceDeclaration -> Typed.TypedTerm Syntax.ModuleItem
+moduleItemInterface x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItem"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "interface"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.ModuleItem
+moduleItemModuleItem :: Typed.TypedName Syntax.ModuleItem
+moduleItemModuleItem = Typed.TypedName (Model.Name "hydra.typescript.syntax.ModuleItem")
+
+-- | DSL injection for the statement variant of hydra.typescript.syntax.ModuleItem
+moduleItemStatement :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.ModuleItem
+moduleItemStatement x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItem"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "statement"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the typeAlias variant of hydra.typescript.syntax.ModuleItem
+moduleItemTypeAlias :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.ModuleItem
+moduleItemTypeAlias x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItem"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typeAlias"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.ModuleItemWithComments
+moduleItemWithComments :: Typed.TypedTerm Syntax.ModuleItem -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.ModuleItemWithComments
+moduleItemWithComments body comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ModuleItemWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.ModuleItemWithComments
+moduleItemWithCommentsBody :: Typed.TypedTerm Syntax.ModuleItemWithComments -> Typed.TypedTerm Syntax.ModuleItem
+moduleItemWithCommentsBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItemWithComments"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the comments field of hydra.typescript.syntax.ModuleItemWithComments
+moduleItemWithCommentsComments :: Typed.TypedTerm Syntax.ModuleItemWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
+moduleItemWithCommentsComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItemWithComments"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ModuleItemWithComments
+moduleItemWithCommentsModuleItemWithComments :: Typed.TypedName Syntax.ModuleItemWithComments
+moduleItemWithCommentsModuleItemWithComments =
+    Typed.TypedName (Model.Name "hydra.typescript.syntax.ModuleItemWithComments")
+
+-- | DSL updater for the body field of hydra.typescript.syntax.ModuleItemWithComments
+moduleItemWithCommentsWithBody :: Typed.TypedTerm Syntax.ModuleItemWithComments -> Typed.TypedTerm Syntax.ModuleItem -> Typed.TypedTerm Syntax.ModuleItemWithComments
+moduleItemWithCommentsWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ModuleItemWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItemWithComments"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the comments field of hydra.typescript.syntax.ModuleItemWithComments
+moduleItemWithCommentsWithComments :: Typed.TypedTerm Syntax.ModuleItemWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.ModuleItemWithComments
+moduleItemWithCommentsWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ModuleItemWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ModuleItemWithComments"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.NamedExport
+namedExport :: Typed.TypedTerm [Syntax.ExportSpecifier] -> Typed.TypedTerm (Maybe Syntax.StringLiteral) -> Typed.TypedTerm Syntax.NamedExport
+namedExport specifiers source =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.NamedExport"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "specifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm specifiers)},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Typed.unTypedTerm source)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.NamedExport
+namedExportNamedExport :: Typed.TypedName Syntax.NamedExport
+namedExportNamedExport = Typed.TypedName (Model.Name "hydra.typescript.syntax.NamedExport")
+
+-- | DSL accessor for the source field of hydra.typescript.syntax.NamedExport
+namedExportSource :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm (Maybe Syntax.StringLiteral)
+namedExportSource x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.NamedExport"),
+        Model.projectionFieldName = (Model.Name "source")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the specifiers field of hydra.typescript.syntax.NamedExport
+namedExportSpecifiers :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm [Syntax.ExportSpecifier]
+namedExportSpecifiers x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.NamedExport"),
+        Model.projectionFieldName = (Model.Name "specifiers")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the source field of hydra.typescript.syntax.NamedExport
+namedExportWithSource :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm (Maybe Syntax.StringLiteral) -> Typed.TypedTerm Syntax.NamedExport
+namedExportWithSource original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.NamedExport"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "specifiers"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.NamedExport"),
+              Model.projectionFieldName = (Model.Name "specifiers")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the specifiers field of hydra.typescript.syntax.NamedExport
+namedExportWithSpecifiers :: Typed.TypedTerm Syntax.NamedExport -> Typed.TypedTerm [Syntax.ExportSpecifier] -> Typed.TypedTerm Syntax.NamedExport
+namedExportWithSpecifiers original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.NamedExport"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "specifiers"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "source"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.NamedExport"),
+              Model.projectionFieldName = (Model.Name "source")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the float variant of hydra.typescript.syntax.NumericLiteral
+numericLiteralFloat :: Typed.TypedTerm Double -> Typed.TypedTerm Syntax.NumericLiteral
+numericLiteralFloat x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.NumericLiteral"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "float"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the integer variant of hydra.typescript.syntax.NumericLiteral
+numericLiteralInteger :: Typed.TypedTerm I.Int64 -> Typed.TypedTerm Syntax.NumericLiteral
+numericLiteralInteger x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.NumericLiteral"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "integer"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.NumericLiteral
+numericLiteralNumericLiteral :: Typed.TypedName Syntax.NumericLiteral
+numericLiteralNumericLiteral = Typed.TypedName (Model.Name "hydra.typescript.syntax.NumericLiteral")
+
+-- | DSL constructor for hydra.typescript.syntax.ObjectPattern
+objectPattern :: Typed.TypedTerm [Syntax.ObjectPatternProperty] -> Typed.TypedTerm Syntax.ObjectPattern
+objectPattern properties =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ObjectPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "properties"),
+          Model.fieldTerm = (Typed.unTypedTerm properties)}]}))
+
+-- | DSL name token for hydra.typescript.syntax.ObjectPattern
+objectPatternObjectPattern :: Typed.TypedName Syntax.ObjectPattern
+objectPatternObjectPattern = Typed.TypedName (Model.Name "hydra.typescript.syntax.ObjectPattern")
+
+-- | DSL accessor for the properties field of hydra.typescript.syntax.ObjectPattern
+objectPatternProperties :: Typed.TypedTerm Syntax.ObjectPattern -> Typed.TypedTerm [Syntax.ObjectPatternProperty]
+objectPatternProperties x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ObjectPattern"),
+        Model.projectionFieldName = (Model.Name "properties")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ObjectPatternProperty
+objectPatternPropertyObjectPatternProperty :: Typed.TypedName Syntax.ObjectPatternProperty
+objectPatternPropertyObjectPatternProperty = Typed.TypedName (Model.Name "hydra.typescript.syntax.ObjectPatternProperty")
+
+-- | DSL injection for the property variant of hydra.typescript.syntax.ObjectPatternProperty
+objectPatternPropertyProperty :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.ObjectPatternProperty
+objectPatternPropertyProperty x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ObjectPatternProperty"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "property"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the rest variant of hydra.typescript.syntax.ObjectPatternProperty
+objectPatternPropertyRest :: Typed.TypedTerm Syntax.RestElement -> Typed.TypedTerm Syntax.ObjectPatternProperty
+objectPatternPropertyRest x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.ObjectPatternProperty"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "rest"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL updater for the properties field of hydra.typescript.syntax.ObjectPattern
+objectPatternWithProperties :: Typed.TypedTerm Syntax.ObjectPattern -> Typed.TypedTerm [Syntax.ObjectPatternProperty] -> Typed.TypedTerm Syntax.ObjectPattern
+objectPatternWithProperties original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ObjectPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "properties"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.ParameterizedTypeExpression
+parameterizedTypeExpression :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.ParameterizedTypeExpression
+parameterizedTypeExpression base arguments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "base"),
+          Model.fieldTerm = (Typed.unTypedTerm base)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm arguments)}]}))
+
+-- | DSL accessor for the arguments field of hydra.typescript.syntax.ParameterizedTypeExpression
+parameterizedTypeExpressionArguments :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm [Syntax.TypeExpression]
+parameterizedTypeExpressionArguments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression"),
+        Model.projectionFieldName = (Model.Name "arguments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the base field of hydra.typescript.syntax.ParameterizedTypeExpression
+parameterizedTypeExpressionBase :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+parameterizedTypeExpressionBase x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression"),
+        Model.projectionFieldName = (Model.Name "base")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ParameterizedTypeExpression
+parameterizedTypeExpressionParameterizedTypeExpression :: Typed.TypedName Syntax.ParameterizedTypeExpression
+parameterizedTypeExpressionParameterizedTypeExpression =
+    Typed.TypedName (Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression")
+
+-- | DSL updater for the arguments field of hydra.typescript.syntax.ParameterizedTypeExpression
+parameterizedTypeExpressionWithArguments :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm [Syntax.TypeExpression] -> Typed.TypedTerm Syntax.ParameterizedTypeExpression
+parameterizedTypeExpressionWithArguments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "base"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression"),
+              Model.projectionFieldName = (Model.Name "base")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the base field of hydra.typescript.syntax.ParameterizedTypeExpression
+parameterizedTypeExpressionWithBase :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.ParameterizedTypeExpression
+parameterizedTypeExpressionWithBase original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "base"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "arguments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression"),
+              Model.projectionFieldName = (Model.Name "arguments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL injection for the array variant of hydra.typescript.syntax.Pattern
+patternArray :: Typed.TypedTerm Syntax.ArrayPattern -> Typed.TypedTerm Syntax.Pattern
+patternArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "array"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the assignment variant of hydra.typescript.syntax.Pattern
+patternAssignment :: Typed.TypedTerm Syntax.AssignmentPattern -> Typed.TypedTerm Syntax.Pattern
+patternAssignment x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "assignment"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the identifier variant of hydra.typescript.syntax.Pattern
+patternIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.Pattern
+patternIdentifier x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "identifier"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the object variant of hydra.typescript.syntax.Pattern
+patternObject :: Typed.TypedTerm Syntax.ObjectPattern -> Typed.TypedTerm Syntax.Pattern
+patternObject x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "object"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.Pattern
+patternPattern :: Typed.TypedName Syntax.Pattern
+patternPattern = Typed.TypedName (Model.Name "hydra.typescript.syntax.Pattern")
+
+-- | DSL injection for the rest variant of hydra.typescript.syntax.Pattern
+patternRest :: Typed.TypedTerm Syntax.RestElement -> Typed.TypedTerm Syntax.Pattern
+patternRest x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "rest"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the typed variant of hydra.typescript.syntax.Pattern
+patternTyped :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern
+patternTyped x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Pattern"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typed"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.Program
+program :: Typed.TypedTerm [Syntax.ModuleItem] -> Typed.TypedTerm Syntax.SourceType -> Typed.TypedTerm Syntax.Program
+program body sourceType =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Program"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "sourceType"),
+          Model.fieldTerm = (Typed.unTypedTerm sourceType)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.Program
+programBody :: Typed.TypedTerm Syntax.Program -> Typed.TypedTerm [Syntax.ModuleItem]
+programBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Program"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.Program
+programProgram :: Typed.TypedName Syntax.Program
+programProgram = Typed.TypedName (Model.Name "hydra.typescript.syntax.Program")
+
+-- | DSL accessor for the sourceType field of hydra.typescript.syntax.Program
+programSourceType :: Typed.TypedTerm Syntax.Program -> Typed.TypedTerm Syntax.SourceType
+programSourceType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Program"),
+        Model.projectionFieldName = (Model.Name "sourceType")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the body field of hydra.typescript.syntax.Program
+programWithBody :: Typed.TypedTerm Syntax.Program -> Typed.TypedTerm [Syntax.ModuleItem] -> Typed.TypedTerm Syntax.Program
+programWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Program"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "sourceType"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Program"),
+              Model.projectionFieldName = (Model.Name "sourceType")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the sourceType field of hydra.typescript.syntax.Program
+programWithSourceType :: Typed.TypedTerm Syntax.Program -> Typed.TypedTerm Syntax.SourceType -> Typed.TypedTerm Syntax.Program
+programWithSourceType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Program"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Program"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "sourceType"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.Property
+property :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.PropertyKind -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Property
+property key value kind computed shorthand =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Typed.unTypedTerm key)},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm value)},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Typed.unTypedTerm kind)},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Typed.unTypedTerm computed)},
+        Model.Field {
+          Model.fieldName = (Model.Name "shorthand"),
+          Model.fieldTerm = (Typed.unTypedTerm shorthand)}]}))
+
+-- | DSL accessor for the computed field of hydra.typescript.syntax.Property
+propertyComputed :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Bool
+propertyComputed x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+        Model.projectionFieldName = (Model.Name "computed")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the key field of hydra.typescript.syntax.Property
+propertyKey :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.Expression
+propertyKey x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+        Model.projectionFieldName = (Model.Name "key")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the kind field of hydra.typescript.syntax.Property
+propertyKind :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.PropertyKind
+propertyKind x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+        Model.projectionFieldName = (Model.Name "kind")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL injection for the get variant of hydra.typescript.syntax.PropertyKind
+propertyKindGet :: Typed.TypedTerm Syntax.PropertyKind
+propertyKindGet =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.PropertyKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "get"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the init variant of hydra.typescript.syntax.PropertyKind
+propertyKindInit :: Typed.TypedTerm Syntax.PropertyKind
+propertyKindInit =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.PropertyKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "init"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.typescript.syntax.PropertyKind
+propertyKindPropertyKind :: Typed.TypedName Syntax.PropertyKind
+propertyKindPropertyKind = Typed.TypedName (Model.Name "hydra.typescript.syntax.PropertyKind")
+
+-- | DSL injection for the set variant of hydra.typescript.syntax.PropertyKind
+propertyKindSet :: Typed.TypedTerm Syntax.PropertyKind
+propertyKindSet =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.PropertyKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "set"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.typescript.syntax.Property
+propertyProperty :: Typed.TypedName Syntax.Property
+propertyProperty = Typed.TypedName (Model.Name "hydra.typescript.syntax.Property")
+
+-- | DSL accessor for the shorthand field of hydra.typescript.syntax.Property
+propertyShorthand :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Bool
+propertyShorthand x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+        Model.projectionFieldName = (Model.Name "shorthand")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for hydra.typescript.syntax.PropertySignature
+propertySignature :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Bool -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.PropertySignature
+propertySignature name type_ optional readonly comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Typed.unTypedTerm optional)},
+        Model.Field {
+          Model.fieldName = (Model.Name "readonly"),
+          Model.fieldTerm = (Typed.unTypedTerm readonly)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the comments field of hydra.typescript.syntax.PropertySignature
+propertySignatureComments :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
+propertySignatureComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.typescript.syntax.PropertySignature
+propertySignatureName :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Syntax.Identifier
+propertySignatureName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the optional field of hydra.typescript.syntax.PropertySignature
+propertySignatureOptional :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Bool
+propertySignatureOptional x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+        Model.projectionFieldName = (Model.Name "optional")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.PropertySignature
+propertySignaturePropertySignature :: Typed.TypedName Syntax.PropertySignature
+propertySignaturePropertySignature = Typed.TypedName (Model.Name "hydra.typescript.syntax.PropertySignature")
+
+-- | DSL accessor for the readonly field of hydra.typescript.syntax.PropertySignature
+propertySignatureReadonly :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Bool
+propertySignatureReadonly x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+        Model.projectionFieldName = (Model.Name "readonly")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.typescript.syntax.PropertySignature
+propertySignatureType :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Syntax.TypeExpression
+propertySignatureType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the comments field of hydra.typescript.syntax.PropertySignature
+propertySignatureWithComments :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.PropertySignature
+propertySignatureWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "readonly"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "readonly")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.typescript.syntax.PropertySignature
+propertySignatureWithName :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.PropertySignature
+propertySignatureWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "readonly"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "readonly")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the optional field of hydra.typescript.syntax.PropertySignature
+propertySignatureWithOptional :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.PropertySignature
+propertySignatureWithOptional original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "readonly"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "readonly")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the readonly field of hydra.typescript.syntax.PropertySignature
+propertySignatureWithReadonly :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.PropertySignature
+propertySignatureWithReadonly original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "readonly"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.typescript.syntax.PropertySignature
+propertySignatureWithType :: Typed.TypedTerm Syntax.PropertySignature -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.PropertySignature
+propertySignatureWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "optional"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "optional")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "readonly"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "readonly")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.PropertySignature"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL accessor for the value field of hydra.typescript.syntax.Property
+propertyValue :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.Expression
+propertyValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the computed field of hydra.typescript.syntax.Property
+propertyWithComputed :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Property
+propertyWithComputed original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "shorthand"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "shorthand")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the key field of hydra.typescript.syntax.Property
+propertyWithKey :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Property
+propertyWithKey original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "shorthand"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "shorthand")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the kind field of hydra.typescript.syntax.Property
+propertyWithKind :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.PropertyKind -> Typed.TypedTerm Syntax.Property
+propertyWithKind original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "shorthand"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "shorthand")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the shorthand field of hydra.typescript.syntax.Property
+propertyWithShorthand :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.Property
+propertyWithShorthand original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "shorthand"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the value field of hydra.typescript.syntax.Property
+propertyWithValue :: Typed.TypedTerm Syntax.Property -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Property
+propertyWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "key"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "key")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "computed"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "computed")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "shorthand"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.Property"),
+              Model.projectionFieldName = (Model.Name "shorthand")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.typescript.syntax.RestElement wrapper
+restElement :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.RestElement
+restElement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.typescript.syntax.RestElement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.RestElement
+restElementRestElement :: Typed.TypedName Syntax.RestElement
+restElementRestElement = Typed.TypedName (Model.Name "hydra.typescript.syntax.RestElement")
+
+-- | DSL injection for the module variant of hydra.typescript.syntax.SourceType
+sourceTypeModule :: Typed.TypedTerm Syntax.SourceType
+sourceTypeModule =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.SourceType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "module"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the script variant of hydra.typescript.syntax.SourceType
+sourceTypeScript :: Typed.TypedTerm Syntax.SourceType
+sourceTypeScript =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.SourceType"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "script"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.typescript.syntax.SourceType
+sourceTypeSourceType :: Typed.TypedName Syntax.SourceType
+sourceTypeSourceType = Typed.TypedName (Model.Name "hydra.typescript.syntax.SourceType")
+
+-- | DSL constructor for the hydra.typescript.syntax.SpreadElement wrapper
+spreadElement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SpreadElement
+spreadElement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.typescript.syntax.SpreadElement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.SpreadElement
+spreadElementSpreadElement :: Typed.TypedName Syntax.SpreadElement
+spreadElementSpreadElement = Typed.TypedName (Model.Name "hydra.typescript.syntax.SpreadElement")
+
+-- | DSL injection for the block variant of hydra.typescript.syntax.Statement
+statementBlock :: Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.Statement
+statementBlock x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "block"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the break variant of hydra.typescript.syntax.Statement
+statementBreak :: Typed.TypedTerm Syntax.BreakStatement -> Typed.TypedTerm Syntax.Statement
+statementBreak x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "break"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the classDeclaration variant of hydra.typescript.syntax.Statement
+statementClassDeclaration :: Typed.TypedTerm Syntax.ClassDeclaration -> Typed.TypedTerm Syntax.Statement
+statementClassDeclaration x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "classDeclaration"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the continue variant of hydra.typescript.syntax.Statement
+statementContinue :: Typed.TypedTerm Syntax.ContinueStatement -> Typed.TypedTerm Syntax.Statement
+statementContinue x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "continue"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the debugger variant of hydra.typescript.syntax.Statement
+statementDebugger :: Typed.TypedTerm Syntax.Statement
+statementDebugger =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "debugger"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the doWhile variant of hydra.typescript.syntax.Statement
+statementDoWhile :: Typed.TypedTerm Syntax.DoWhileStatement -> Typed.TypedTerm Syntax.Statement
+statementDoWhile x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "doWhile"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the empty variant of hydra.typescript.syntax.Statement
+statementEmpty :: Typed.TypedTerm Syntax.Statement
+statementEmpty =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "empty"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the expression variant of hydra.typescript.syntax.Statement
+statementExpression :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement
+statementExpression x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "expression"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the for variant of hydra.typescript.syntax.Statement
+statementFor :: Typed.TypedTerm Syntax.ForStatement -> Typed.TypedTerm Syntax.Statement
+statementFor x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "for"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the forIn variant of hydra.typescript.syntax.Statement
+statementForIn :: Typed.TypedTerm Syntax.ForInStatement -> Typed.TypedTerm Syntax.Statement
+statementForIn x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "forIn"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the forOf variant of hydra.typescript.syntax.Statement
+statementForOf :: Typed.TypedTerm Syntax.ForOfStatement -> Typed.TypedTerm Syntax.Statement
+statementForOf x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "forOf"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the functionDeclaration variant of hydra.typescript.syntax.Statement
+statementFunctionDeclaration :: Typed.TypedTerm Syntax.FunctionDeclaration -> Typed.TypedTerm Syntax.Statement
+statementFunctionDeclaration x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "functionDeclaration"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the if variant of hydra.typescript.syntax.Statement
+statementIf :: Typed.TypedTerm Syntax.IfStatement -> Typed.TypedTerm Syntax.Statement
+statementIf x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "if"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the labeled variant of hydra.typescript.syntax.Statement
+statementLabeled :: Typed.TypedTerm Syntax.LabeledStatement -> Typed.TypedTerm Syntax.Statement
+statementLabeled x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "labeled"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the return variant of hydra.typescript.syntax.Statement
+statementReturn :: Typed.TypedTerm Syntax.ReturnStatement -> Typed.TypedTerm Syntax.Statement
+statementReturn x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "return"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.Statement
+statementStatement :: Typed.TypedName Syntax.Statement
+statementStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.Statement")
+
+-- | DSL injection for the switch variant of hydra.typescript.syntax.Statement
+statementSwitch :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Statement
+statementSwitch x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "switch"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the throw variant of hydra.typescript.syntax.Statement
+statementThrow :: Typed.TypedTerm Syntax.ThrowStatement -> Typed.TypedTerm Syntax.Statement
+statementThrow x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "throw"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the try variant of hydra.typescript.syntax.Statement
+statementTry :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.Statement
+statementTry x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "try"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the variableDeclaration variant of hydra.typescript.syntax.Statement
+statementVariableDeclaration :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.Statement
+statementVariableDeclaration x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "variableDeclaration"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the while variant of hydra.typescript.syntax.Statement
+statementWhile :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Statement
+statementWhile x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.Statement"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "while"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL constructor for hydra.typescript.syntax.StatementWithComments
+statementWithComments :: Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.StatementWithComments
+statementWithComments body comments =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.StatementWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm comments)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.StatementWithComments
+statementWithCommentsBody :: Typed.TypedTerm Syntax.StatementWithComments -> Typed.TypedTerm Syntax.Statement
+statementWithCommentsBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.StatementWithComments"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the comments field of hydra.typescript.syntax.StatementWithComments
+statementWithCommentsComments :: Typed.TypedTerm Syntax.StatementWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment)
+statementWithCommentsComments x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.StatementWithComments"),
+        Model.projectionFieldName = (Model.Name "comments")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.StatementWithComments
+statementWithCommentsStatementWithComments :: Typed.TypedName Syntax.StatementWithComments
+statementWithCommentsStatementWithComments = Typed.TypedName (Model.Name "hydra.typescript.syntax.StatementWithComments")
+
+-- | DSL updater for the body field of hydra.typescript.syntax.StatementWithComments
+statementWithCommentsWithBody :: Typed.TypedTerm Syntax.StatementWithComments -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.StatementWithComments
+statementWithCommentsWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.StatementWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.StatementWithComments"),
+              Model.projectionFieldName = (Model.Name "comments")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the comments field of hydra.typescript.syntax.StatementWithComments
+statementWithCommentsWithComments :: Typed.TypedTerm Syntax.StatementWithComments -> Typed.TypedTerm (Maybe Syntax.DocumentationComment) -> Typed.TypedTerm Syntax.StatementWithComments
+statementWithCommentsWithComments original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.StatementWithComments"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.StatementWithComments"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "comments"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.StringLiteral
+stringLiteral :: Typed.TypedTerm String -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.StringLiteral
+stringLiteral value singleQuote =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.StringLiteral"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm value)},
+        Model.Field {
+          Model.fieldName = (Model.Name "singleQuote"),
+          Model.fieldTerm = (Typed.unTypedTerm singleQuote)}]}))
+
+-- | DSL accessor for the singleQuote field of hydra.typescript.syntax.StringLiteral
+stringLiteralSingleQuote :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Bool
+stringLiteralSingleQuote x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.StringLiteral"),
+        Model.projectionFieldName = (Model.Name "singleQuote")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.StringLiteral
+stringLiteralStringLiteral :: Typed.TypedName Syntax.StringLiteral
+stringLiteralStringLiteral = Typed.TypedName (Model.Name "hydra.typescript.syntax.StringLiteral")
+
+-- | DSL accessor for the value field of hydra.typescript.syntax.StringLiteral
+stringLiteralValue :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm String
+stringLiteralValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.StringLiteral"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the singleQuote field of hydra.typescript.syntax.StringLiteral
+stringLiteralWithSingleQuote :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.StringLiteral
+stringLiteralWithSingleQuote original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.StringLiteral"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.StringLiteral"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "singleQuote"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the value field of hydra.typescript.syntax.StringLiteral
+stringLiteralWithValue :: Typed.TypedTerm Syntax.StringLiteral -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.StringLiteral
+stringLiteralWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.StringLiteral"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "singleQuote"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.StringLiteral"),
+              Model.projectionFieldName = (Model.Name "singleQuote")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.SwitchCase
+switchCase :: Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.SwitchCase
+switchCase test consequent =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.SwitchCase"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm test)},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Typed.unTypedTerm consequent)}]}))
+
+-- | DSL accessor for the consequent field of hydra.typescript.syntax.SwitchCase
+switchCaseConsequent :: Typed.TypedTerm Syntax.SwitchCase -> Typed.TypedTerm [Syntax.Statement]
+switchCaseConsequent x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.SwitchCase"),
+        Model.projectionFieldName = (Model.Name "consequent")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.SwitchCase
+switchCaseSwitchCase :: Typed.TypedName Syntax.SwitchCase
+switchCaseSwitchCase = Typed.TypedName (Model.Name "hydra.typescript.syntax.SwitchCase")
+
+-- | DSL accessor for the test field of hydra.typescript.syntax.SwitchCase
+switchCaseTest :: Typed.TypedTerm Syntax.SwitchCase -> Typed.TypedTerm (Maybe Syntax.Expression)
+switchCaseTest x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.SwitchCase"),
+        Model.projectionFieldName = (Model.Name "test")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the consequent field of hydra.typescript.syntax.SwitchCase
+switchCaseWithConsequent :: Typed.TypedTerm Syntax.SwitchCase -> Typed.TypedTerm [Syntax.Statement] -> Typed.TypedTerm Syntax.SwitchCase
+switchCaseWithConsequent original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.SwitchCase"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.SwitchCase"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the test field of hydra.typescript.syntax.SwitchCase
+switchCaseWithTest :: Typed.TypedTerm Syntax.SwitchCase -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.SwitchCase
+switchCaseWithTest original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.SwitchCase"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "consequent"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.SwitchCase"),
+              Model.projectionFieldName = (Model.Name "consequent")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.SwitchStatement
+switchStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm [Syntax.SwitchCase] -> Typed.TypedTerm Syntax.SwitchStatement
+switchStatement discriminant cases =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.SwitchStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "discriminant"),
+          Model.fieldTerm = (Typed.unTypedTerm discriminant)},
+        Model.Field {
+          Model.fieldName = (Model.Name "cases"),
+          Model.fieldTerm = (Typed.unTypedTerm cases)}]}))
+
+-- | DSL accessor for the cases field of hydra.typescript.syntax.SwitchStatement
+switchStatementCases :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm [Syntax.SwitchCase]
+switchStatementCases x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.SwitchStatement"),
+        Model.projectionFieldName = (Model.Name "cases")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the discriminant field of hydra.typescript.syntax.SwitchStatement
+switchStatementDiscriminant :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Expression
+switchStatementDiscriminant x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.SwitchStatement"),
+        Model.projectionFieldName = (Model.Name "discriminant")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.SwitchStatement
+switchStatementSwitchStatement :: Typed.TypedName Syntax.SwitchStatement
+switchStatementSwitchStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.SwitchStatement")
+
+-- | DSL updater for the cases field of hydra.typescript.syntax.SwitchStatement
+switchStatementWithCases :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm [Syntax.SwitchCase] -> Typed.TypedTerm Syntax.SwitchStatement
+switchStatementWithCases original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.SwitchStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "discriminant"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.SwitchStatement"),
+              Model.projectionFieldName = (Model.Name "discriminant")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "cases"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the discriminant field of hydra.typescript.syntax.SwitchStatement
+switchStatementWithDiscriminant :: Typed.TypedTerm Syntax.SwitchStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.SwitchStatement
+switchStatementWithDiscriminant original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.SwitchStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "discriminant"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "cases"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.SwitchStatement"),
+              Model.projectionFieldName = (Model.Name "cases")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.TemplateElement
+templateElement :: Typed.TypedTerm String -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.TemplateElement
+templateElement value tail =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TemplateElement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm value)},
+        Model.Field {
+          Model.fieldName = (Model.Name "tail"),
+          Model.fieldTerm = (Typed.unTypedTerm tail)}]}))
+
+-- | DSL accessor for the tail field of hydra.typescript.syntax.TemplateElement
+templateElementTail :: Typed.TypedTerm Syntax.TemplateElement -> Typed.TypedTerm Bool
+templateElementTail x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TemplateElement"),
+        Model.projectionFieldName = (Model.Name "tail")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.TemplateElement
+templateElementTemplateElement :: Typed.TypedName Syntax.TemplateElement
+templateElementTemplateElement = Typed.TypedName (Model.Name "hydra.typescript.syntax.TemplateElement")
+
+-- | DSL accessor for the value field of hydra.typescript.syntax.TemplateElement
+templateElementValue :: Typed.TypedTerm Syntax.TemplateElement -> Typed.TypedTerm String
+templateElementValue x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TemplateElement"),
+        Model.projectionFieldName = (Model.Name "value")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the tail field of hydra.typescript.syntax.TemplateElement
+templateElementWithTail :: Typed.TypedTerm Syntax.TemplateElement -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.TemplateElement
+templateElementWithTail original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TemplateElement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TemplateElement"),
+              Model.projectionFieldName = (Model.Name "value")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "tail"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the value field of hydra.typescript.syntax.TemplateElement
+templateElementWithValue :: Typed.TypedTerm Syntax.TemplateElement -> Typed.TypedTerm String -> Typed.TypedTerm Syntax.TemplateElement
+templateElementWithValue original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TemplateElement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "value"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "tail"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TemplateElement"),
+              Model.projectionFieldName = (Model.Name "tail")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.TemplateLiteral
+templateLiteral :: Typed.TypedTerm [Syntax.TemplateElement] -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.TemplateLiteral
+templateLiteral quasis expressions =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TemplateLiteral"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "quasis"),
+          Model.fieldTerm = (Typed.unTypedTerm quasis)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expressions"),
+          Model.fieldTerm = (Typed.unTypedTerm expressions)}]}))
+
+-- | DSL accessor for the expressions field of hydra.typescript.syntax.TemplateLiteral
+templateLiteralExpressions :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm [Syntax.Expression]
+templateLiteralExpressions x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TemplateLiteral"),
+        Model.projectionFieldName = (Model.Name "expressions")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the quasis field of hydra.typescript.syntax.TemplateLiteral
+templateLiteralQuasis :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm [Syntax.TemplateElement]
+templateLiteralQuasis x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TemplateLiteral"),
+        Model.projectionFieldName = (Model.Name "quasis")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.TemplateLiteral
+templateLiteralTemplateLiteral :: Typed.TypedName Syntax.TemplateLiteral
+templateLiteralTemplateLiteral = Typed.TypedName (Model.Name "hydra.typescript.syntax.TemplateLiteral")
+
+-- | DSL updater for the expressions field of hydra.typescript.syntax.TemplateLiteral
+templateLiteralWithExpressions :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm [Syntax.Expression] -> Typed.TypedTerm Syntax.TemplateLiteral
+templateLiteralWithExpressions original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TemplateLiteral"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "quasis"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TemplateLiteral"),
+              Model.projectionFieldName = (Model.Name "quasis")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "expressions"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the quasis field of hydra.typescript.syntax.TemplateLiteral
+templateLiteralWithQuasis :: Typed.TypedTerm Syntax.TemplateLiteral -> Typed.TypedTerm [Syntax.TemplateElement] -> Typed.TypedTerm Syntax.TemplateLiteral
+templateLiteralWithQuasis original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TemplateLiteral"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "quasis"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "expressions"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TemplateLiteral"),
+              Model.projectionFieldName = (Model.Name "expressions")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.typescript.syntax.ThrowStatement wrapper
+throwStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.ThrowStatement
+throwStatement x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.typescript.syntax.ThrowStatement"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.ThrowStatement
+throwStatementThrowStatement :: Typed.TypedName Syntax.ThrowStatement
+throwStatementThrowStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.ThrowStatement")
+
+-- | DSL constructor for hydra.typescript.syntax.TryStatement
+tryStatement :: Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm (Maybe Syntax.CatchClause) -> Typed.TypedTerm (Maybe Syntax.BlockStatement) -> Typed.TypedTerm Syntax.TryStatement
+tryStatement block handler finalizer =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm block)},
+        Model.Field {
+          Model.fieldName = (Model.Name "handler"),
+          Model.fieldTerm = (Typed.unTypedTerm handler)},
+        Model.Field {
+          Model.fieldName = (Model.Name "finalizer"),
+          Model.fieldTerm = (Typed.unTypedTerm finalizer)}]}))
+
+-- | DSL accessor for the block field of hydra.typescript.syntax.TryStatement
+tryStatementBlock :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.BlockStatement
+tryStatementBlock x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+        Model.projectionFieldName = (Model.Name "block")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the finalizer field of hydra.typescript.syntax.TryStatement
+tryStatementFinalizer :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm (Maybe Syntax.BlockStatement)
+tryStatementFinalizer x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+        Model.projectionFieldName = (Model.Name "finalizer")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the handler field of hydra.typescript.syntax.TryStatement
+tryStatementHandler :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm (Maybe Syntax.CatchClause)
+tryStatementHandler x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+        Model.projectionFieldName = (Model.Name "handler")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.TryStatement
+tryStatementTryStatement :: Typed.TypedName Syntax.TryStatement
+tryStatementTryStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.TryStatement")
+
+-- | DSL updater for the block field of hydra.typescript.syntax.TryStatement
+tryStatementWithBlock :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm Syntax.BlockStatement -> Typed.TypedTerm Syntax.TryStatement
+tryStatementWithBlock original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "handler"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+              Model.projectionFieldName = (Model.Name "handler")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "finalizer"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+              Model.projectionFieldName = (Model.Name "finalizer")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the finalizer field of hydra.typescript.syntax.TryStatement
+tryStatementWithFinalizer :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm (Maybe Syntax.BlockStatement) -> Typed.TypedTerm Syntax.TryStatement
+tryStatementWithFinalizer original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "handler"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+              Model.projectionFieldName = (Model.Name "handler")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "finalizer"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the handler field of hydra.typescript.syntax.TryStatement
+tryStatementWithHandler :: Typed.TypedTerm Syntax.TryStatement -> Typed.TypedTerm (Maybe Syntax.CatchClause) -> Typed.TypedTerm Syntax.TryStatement
+tryStatementWithHandler original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "block"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+              Model.projectionFieldName = (Model.Name "block")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "handler"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "finalizer"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TryStatement"),
+              Model.projectionFieldName = (Model.Name "finalizer")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.TypeAliasDeclaration
+typeAliasDeclaration :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeAliasDeclaration
+typeAliasDeclaration name typeParameters type_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm typeParameters)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)}]}))
+
+-- | DSL accessor for the name field of hydra.typescript.syntax.TypeAliasDeclaration
+typeAliasDeclarationName :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.Identifier
+typeAliasDeclarationName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.typescript.syntax.TypeAliasDeclaration
+typeAliasDeclarationType :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.TypeExpression
+typeAliasDeclarationType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.TypeAliasDeclaration
+typeAliasDeclarationTypeAliasDeclaration :: Typed.TypedName Syntax.TypeAliasDeclaration
+typeAliasDeclarationTypeAliasDeclaration = Typed.TypedName (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration")
+
+-- | DSL accessor for the typeParameters field of hydra.typescript.syntax.TypeAliasDeclaration
+typeAliasDeclarationTypeParameters :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm [Syntax.TypeParameter]
+typeAliasDeclarationTypeParameters x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+        Model.projectionFieldName = (Model.Name "typeParameters")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL updater for the name field of hydra.typescript.syntax.TypeAliasDeclaration
+typeAliasDeclarationWithName :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeAliasDeclaration
+typeAliasDeclarationWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+              Model.projectionFieldName = (Model.Name "typeParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.typescript.syntax.TypeAliasDeclaration
+typeAliasDeclarationWithType :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeAliasDeclaration
+typeAliasDeclarationWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+              Model.projectionFieldName = (Model.Name "typeParameters")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the typeParameters field of hydra.typescript.syntax.TypeAliasDeclaration
+typeAliasDeclarationWithTypeParameters :: Typed.TypedTerm Syntax.TypeAliasDeclaration -> Typed.TypedTerm [Syntax.TypeParameter] -> Typed.TypedTerm Syntax.TypeAliasDeclaration
+typeAliasDeclarationWithTypeParameters original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "typeParameters"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for the hydra.typescript.syntax.TypeAnnotation wrapper
+typeAnnotation :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeAnnotation
+typeAnnotation x =
+    Typed.TypedTerm (Model.TermWrap (Model.WrappedTerm {
+      Model.wrappedTermTypeName = (Model.Name "hydra.typescript.syntax.TypeAnnotation"),
+      Model.wrappedTermBody = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.TypeAnnotation
+typeAnnotationTypeAnnotation :: Typed.TypedName Syntax.TypeAnnotation
+typeAnnotationTypeAnnotation = Typed.TypedName (Model.Name "hydra.typescript.syntax.TypeAnnotation")
+
+-- | DSL injection for the any variant of hydra.typescript.syntax.TypeExpression
+typeExpressionAny :: Typed.TypedTerm Syntax.TypeExpression
+typeExpressionAny =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "any"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the array variant of hydra.typescript.syntax.TypeExpression
+typeExpressionArray :: Typed.TypedTerm Syntax.ArrayTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionArray x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "array"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the function variant of hydra.typescript.syntax.TypeExpression
+typeExpressionFunction :: Typed.TypedTerm Syntax.FunctionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionFunction x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "function"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the identifier variant of hydra.typescript.syntax.TypeExpression
+typeExpressionIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionIdentifier x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "identifier"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the intersection variant of hydra.typescript.syntax.TypeExpression
+typeExpressionIntersection :: Typed.TypedTerm Syntax.IntersectionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionIntersection x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "intersection"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the literal variant of hydra.typescript.syntax.TypeExpression
+typeExpressionLiteral :: Typed.TypedTerm Syntax.Literal -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionLiteral x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "literal"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the never variant of hydra.typescript.syntax.TypeExpression
+typeExpressionNever :: Typed.TypedTerm Syntax.TypeExpression
+typeExpressionNever =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "never"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the object variant of hydra.typescript.syntax.TypeExpression
+typeExpressionObject :: Typed.TypedTerm Syntax.ObjectTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionObject x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "object"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the optional variant of hydra.typescript.syntax.TypeExpression
+typeExpressionOptional :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionOptional x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "optional"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the parameterized variant of hydra.typescript.syntax.TypeExpression
+typeExpressionParameterized :: Typed.TypedTerm Syntax.ParameterizedTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionParameterized x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "parameterized"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the readonly variant of hydra.typescript.syntax.TypeExpression
+typeExpressionReadonly :: Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionReadonly x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "readonly"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the tuple variant of hydra.typescript.syntax.TypeExpression
+typeExpressionTuple :: Typed.TypedTerm Syntax.TupleTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionTuple x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "tuple"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL name token for hydra.typescript.syntax.TypeExpression
+typeExpressionTypeExpression :: Typed.TypedName Syntax.TypeExpression
+typeExpressionTypeExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.TypeExpression")
+
+-- | DSL injection for the union variant of hydra.typescript.syntax.TypeExpression
+typeExpressionUnion :: Typed.TypedTerm Syntax.UnionTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+typeExpressionUnion x =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "union"),
+        Model.fieldTerm = (Typed.unTypedTerm x)}}))
+
+-- | DSL injection for the unknown variant of hydra.typescript.syntax.TypeExpression
+typeExpressionUnknown :: Typed.TypedTerm Syntax.TypeExpression
+typeExpressionUnknown =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "unknown"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the void variant of hydra.typescript.syntax.TypeExpression
+typeExpressionVoid :: Typed.TypedTerm Syntax.TypeExpression
+typeExpressionVoid =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.TypeExpression"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "void"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for hydra.typescript.syntax.TypeParameter
+typeParameter :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm Syntax.TypeParameter
+typeParameter name constraint default_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm name)},
+        Model.Field {
+          Model.fieldName = (Model.Name "constraint"),
+          Model.fieldTerm = (Typed.unTypedTerm constraint)},
+        Model.Field {
+          Model.fieldName = (Model.Name "default"),
+          Model.fieldTerm = (Typed.unTypedTerm default_)}]}))
+
+-- | DSL accessor for the constraint field of hydra.typescript.syntax.TypeParameter
+typeParameterConstraint :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeExpression)
+typeParameterConstraint x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+        Model.projectionFieldName = (Model.Name "constraint")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the default field of hydra.typescript.syntax.TypeParameter
+typeParameterDefault :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeExpression)
+typeParameterDefault x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+        Model.projectionFieldName = (Model.Name "default")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the name field of hydra.typescript.syntax.TypeParameter
+typeParameterName :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm Syntax.Identifier
+typeParameterName x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+        Model.projectionFieldName = (Model.Name "name")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.TypeParameter
+typeParameterTypeParameter :: Typed.TypedName Syntax.TypeParameter
+typeParameterTypeParameter = Typed.TypedName (Model.Name "hydra.typescript.syntax.TypeParameter")
+
+-- | DSL updater for the constraint field of hydra.typescript.syntax.TypeParameter
+typeParameterWithConstraint :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm Syntax.TypeParameter
+typeParameterWithConstraint original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constraint"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "default"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "default")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the default field of hydra.typescript.syntax.TypeParameter
+typeParameterWithDefault :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm (Maybe Syntax.TypeExpression) -> Typed.TypedTerm Syntax.TypeParameter
+typeParameterWithDefault original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "name")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "constraint"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "constraint")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "default"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the name field of hydra.typescript.syntax.TypeParameter
+typeParameterWithName :: Typed.TypedTerm Syntax.TypeParameter -> Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm Syntax.TypeParameter
+typeParameterWithName original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "name"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "constraint"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "constraint")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "default"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypeParameter"),
+              Model.projectionFieldName = (Model.Name "default")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.TypedPattern
+typedPattern :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypedPattern
+typedPattern pattern type_ =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypedPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Typed.unTypedTerm pattern)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm type_)}]}))
+
+-- | DSL accessor for the pattern field of hydra.typescript.syntax.TypedPattern
+typedPatternPattern :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern
+typedPatternPattern x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypedPattern"),
+        Model.projectionFieldName = (Model.Name "pattern")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the type field of hydra.typescript.syntax.TypedPattern
+typedPatternType :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.TypeExpression
+typedPatternType x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypedPattern"),
+        Model.projectionFieldName = (Model.Name "type")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.TypedPattern
+typedPatternTypedPattern :: Typed.TypedName Syntax.TypedPattern
+typedPatternTypedPattern = Typed.TypedName (Model.Name "hydra.typescript.syntax.TypedPattern")
+
+-- | DSL updater for the pattern field of hydra.typescript.syntax.TypedPattern
+typedPatternWithPattern :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.TypedPattern
+typedPatternWithPattern original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypedPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypedPattern"),
+              Model.projectionFieldName = (Model.Name "type")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the type field of hydra.typescript.syntax.TypedPattern
+typedPatternWithType :: Typed.TypedTerm Syntax.TypedPattern -> Typed.TypedTerm Syntax.TypeExpression -> Typed.TypedTerm Syntax.TypedPattern
+typedPatternWithType original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.TypedPattern"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "pattern"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.TypedPattern"),
+              Model.projectionFieldName = (Model.Name "pattern")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "type"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL accessor for the body of hydra.typescript.syntax.ArrayTypeExpression
+unArrayTypeExpression :: Typed.TypedTerm Syntax.ArrayTypeExpression -> Typed.TypedTerm Syntax.TypeExpression
+unArrayTypeExpression x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.typescript.syntax.ArrayTypeExpression")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.typescript.syntax.Identifier
+unIdentifier :: Typed.TypedTerm Syntax.Identifier -> Typed.TypedTerm String
+unIdentifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.typescript.syntax.Identifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.typescript.syntax.ImportDefaultSpecifier
+unImportDefaultSpecifier :: Typed.TypedTerm Syntax.ImportDefaultSpecifier -> Typed.TypedTerm Syntax.Identifier
+unImportDefaultSpecifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.typescript.syntax.ImportDefaultSpecifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.typescript.syntax.ImportNamespaceSpecifier
+unImportNamespaceSpecifier :: Typed.TypedTerm Syntax.ImportNamespaceSpecifier -> Typed.TypedTerm Syntax.Identifier
+unImportNamespaceSpecifier x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.typescript.syntax.ImportNamespaceSpecifier")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.typescript.syntax.RestElement
+unRestElement :: Typed.TypedTerm Syntax.RestElement -> Typed.TypedTerm Syntax.Pattern
+unRestElement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.typescript.syntax.RestElement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.typescript.syntax.SpreadElement
+unSpreadElement :: Typed.TypedTerm Syntax.SpreadElement -> Typed.TypedTerm Syntax.Expression
+unSpreadElement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.typescript.syntax.SpreadElement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.typescript.syntax.ThrowStatement
+unThrowStatement :: Typed.TypedTerm Syntax.ThrowStatement -> Typed.TypedTerm Syntax.Expression
+unThrowStatement x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.typescript.syntax.ThrowStatement")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the body of hydra.typescript.syntax.TypeAnnotation
+unTypeAnnotation :: Typed.TypedTerm Syntax.TypeAnnotation -> Typed.TypedTerm Syntax.TypeExpression
+unTypeAnnotation x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermUnwrap (Model.Name "hydra.typescript.syntax.TypeAnnotation")),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL constructor for hydra.typescript.syntax.UnaryExpression
+unaryExpression :: Typed.TypedTerm Syntax.UnaryOperator -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpression operator argument prefix =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm operator)},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Typed.unTypedTerm argument)},
+        Model.Field {
+          Model.fieldName = (Model.Name "prefix"),
+          Model.fieldTerm = (Typed.unTypedTerm prefix)}]}))
+
+-- | DSL accessor for the argument field of hydra.typescript.syntax.UnaryExpression
+unaryExpressionArgument :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.Expression
+unaryExpressionArgument x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+        Model.projectionFieldName = (Model.Name "argument")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the operator field of hydra.typescript.syntax.UnaryExpression
+unaryExpressionOperator :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryOperator
+unaryExpressionOperator x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+        Model.projectionFieldName = (Model.Name "operator")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the prefix field of hydra.typescript.syntax.UnaryExpression
+unaryExpressionPrefix :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Bool
+unaryExpressionPrefix x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+        Model.projectionFieldName = (Model.Name "prefix")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.UnaryExpression
+unaryExpressionUnaryExpression :: Typed.TypedName Syntax.UnaryExpression
+unaryExpressionUnaryExpression = Typed.TypedName (Model.Name "hydra.typescript.syntax.UnaryExpression")
+
+-- | DSL updater for the argument field of hydra.typescript.syntax.UnaryExpression
+unaryExpressionWithArgument :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpressionWithArgument original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "prefix"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+              Model.projectionFieldName = (Model.Name "prefix")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the operator field of hydra.typescript.syntax.UnaryExpression
+unaryExpressionWithOperator :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Syntax.UnaryOperator -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpressionWithOperator original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+              Model.projectionFieldName = (Model.Name "argument")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "prefix"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+              Model.projectionFieldName = (Model.Name "prefix")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the prefix field of hydra.typescript.syntax.UnaryExpression
+unaryExpressionWithPrefix :: Typed.TypedTerm Syntax.UnaryExpression -> Typed.TypedTerm Bool -> Typed.TypedTerm Syntax.UnaryExpression
+unaryExpressionWithPrefix original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "operator"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+              Model.projectionFieldName = (Model.Name "operator")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "argument"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryExpression"),
+              Model.projectionFieldName = (Model.Name "argument")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "prefix"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the bitwiseNot variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorBitwiseNot :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorBitwiseNot =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "bitwiseNot"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the decrement variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorDecrement :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorDecrement =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "decrement"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the delete variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorDelete :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorDelete =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "delete"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the increment variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorIncrement :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorIncrement =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "increment"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the negate variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorNegate :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorNegate =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "negate"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the not variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorNot :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorNot =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "not"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the plus variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorPlus :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorPlus =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "plus"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the typeof variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorTypeof :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorTypeof =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "typeof"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.typescript.syntax.UnaryOperator
+unaryOperatorUnaryOperator :: Typed.TypedName Syntax.UnaryOperator
+unaryOperatorUnaryOperator = Typed.TypedName (Model.Name "hydra.typescript.syntax.UnaryOperator")
+
+-- | DSL injection for the void variant of hydra.typescript.syntax.UnaryOperator
+unaryOperatorVoid :: Typed.TypedTerm Syntax.UnaryOperator
+unaryOperatorVoid =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.UnaryOperator"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "void"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL constructor for hydra.typescript.syntax.VariableDeclaration
+variableDeclaration :: Typed.TypedTerm Syntax.VariableKind -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.VariableDeclaration
+variableDeclaration kind declarations =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Typed.unTypedTerm kind)},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarations"),
+          Model.fieldTerm = (Typed.unTypedTerm declarations)}]}))
+
+-- | DSL accessor for the declarations field of hydra.typescript.syntax.VariableDeclaration
+variableDeclarationDeclarations :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator]
+variableDeclarationDeclarations x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclaration"),
+        Model.projectionFieldName = (Model.Name "declarations")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the kind field of hydra.typescript.syntax.VariableDeclaration
+variableDeclarationKind :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.VariableKind
+variableDeclarationKind x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclaration"),
+        Model.projectionFieldName = (Model.Name "kind")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.VariableDeclaration
+variableDeclarationVariableDeclaration :: Typed.TypedName Syntax.VariableDeclaration
+variableDeclarationVariableDeclaration = Typed.TypedName (Model.Name "hydra.typescript.syntax.VariableDeclaration")
+
+-- | DSL updater for the declarations field of hydra.typescript.syntax.VariableDeclaration
+variableDeclarationWithDeclarations :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm [Syntax.VariableDeclarator] -> Typed.TypedTerm Syntax.VariableDeclaration
+variableDeclarationWithDeclarations original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclaration"),
+              Model.projectionFieldName = (Model.Name "kind")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarations"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the kind field of hydra.typescript.syntax.VariableDeclaration
+variableDeclarationWithKind :: Typed.TypedTerm Syntax.VariableDeclaration -> Typed.TypedTerm Syntax.VariableKind -> Typed.TypedTerm Syntax.VariableDeclaration
+variableDeclarationWithKind original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclaration"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "kind"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "declarations"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclaration"),
+              Model.projectionFieldName = (Model.Name "declarations")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL constructor for hydra.typescript.syntax.VariableDeclarator
+variableDeclarator :: Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.VariableDeclarator
+variableDeclarator id init =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm id)},
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Typed.unTypedTerm init)}]}))
+
+-- | DSL accessor for the id field of hydra.typescript.syntax.VariableDeclarator
+variableDeclaratorId :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm Syntax.Pattern
+variableDeclaratorId x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclarator"),
+        Model.projectionFieldName = (Model.Name "id")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the init field of hydra.typescript.syntax.VariableDeclarator
+variableDeclaratorInit :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm (Maybe Syntax.Expression)
+variableDeclaratorInit x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclarator"),
+        Model.projectionFieldName = (Model.Name "init")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.VariableDeclarator
+variableDeclaratorVariableDeclarator :: Typed.TypedName Syntax.VariableDeclarator
+variableDeclaratorVariableDeclarator = Typed.TypedName (Model.Name "hydra.typescript.syntax.VariableDeclarator")
+
+-- | DSL updater for the id field of hydra.typescript.syntax.VariableDeclarator
+variableDeclaratorWithId :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm Syntax.Pattern -> Typed.TypedTerm Syntax.VariableDeclarator
+variableDeclaratorWithId original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclarator"),
+              Model.projectionFieldName = (Model.Name "init")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
+
+-- | DSL updater for the init field of hydra.typescript.syntax.VariableDeclarator
+variableDeclaratorWithInit :: Typed.TypedTerm Syntax.VariableDeclarator -> Typed.TypedTerm (Maybe Syntax.Expression) -> Typed.TypedTerm Syntax.VariableDeclarator
+variableDeclaratorWithInit original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclarator"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "id"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.VariableDeclarator"),
+              Model.projectionFieldName = (Model.Name "id")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "init"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL injection for the const variant of hydra.typescript.syntax.VariableKind
+variableKindConst :: Typed.TypedTerm Syntax.VariableKind
+variableKindConst =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.VariableKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "const"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the let variant of hydra.typescript.syntax.VariableKind
+variableKindLet :: Typed.TypedTerm Syntax.VariableKind
+variableKindLet =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.VariableKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "let"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL injection for the var variant of hydra.typescript.syntax.VariableKind
+variableKindVar :: Typed.TypedTerm Syntax.VariableKind
+variableKindVar =
+    Typed.TypedTerm (Model.TermInject (Model.Injection {
+      Model.injectionTypeName = (Model.Name "hydra.typescript.syntax.VariableKind"),
+      Model.injectionField = Model.Field {
+        Model.fieldName = (Model.Name "var"),
+        Model.fieldTerm = Model.TermUnit}}))
+
+-- | DSL name token for hydra.typescript.syntax.VariableKind
+variableKindVariableKind :: Typed.TypedName Syntax.VariableKind
+variableKindVariableKind = Typed.TypedName (Model.Name "hydra.typescript.syntax.VariableKind")
+
+-- | DSL constructor for hydra.typescript.syntax.WhileStatement
+whileStatement :: Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.WhileStatement
+whileStatement test body =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.WhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm test)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm body)}]}))
+
+-- | DSL accessor for the body field of hydra.typescript.syntax.WhileStatement
+whileStatementBody :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Statement
+whileStatementBody x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.WhileStatement"),
+        Model.projectionFieldName = (Model.Name "body")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL accessor for the test field of hydra.typescript.syntax.WhileStatement
+whileStatementTest :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Expression
+whileStatementTest x =
+    Typed.TypedTerm (Model.TermApplication (Model.Application {
+      Model.applicationFunction = (Model.TermProject (Model.Projection {
+        Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.WhileStatement"),
+        Model.projectionFieldName = (Model.Name "test")})),
+      Model.applicationArgument = (Typed.unTypedTerm x)}))
+
+-- | DSL name token for hydra.typescript.syntax.WhileStatement
+whileStatementWhileStatement :: Typed.TypedName Syntax.WhileStatement
+whileStatementWhileStatement = Typed.TypedName (Model.Name "hydra.typescript.syntax.WhileStatement")
+
+-- | DSL updater for the body field of hydra.typescript.syntax.WhileStatement
+whileStatementWithBody :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Statement -> Typed.TypedTerm Syntax.WhileStatement
+whileStatementWithBody original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.WhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.WhileStatement"),
+              Model.projectionFieldName = (Model.Name "test")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)}]}))
+
+-- | DSL updater for the test field of hydra.typescript.syntax.WhileStatement
+whileStatementWithTest :: Typed.TypedTerm Syntax.WhileStatement -> Typed.TypedTerm Syntax.Expression -> Typed.TypedTerm Syntax.WhileStatement
+whileStatementWithTest original newVal =
+    Typed.TypedTerm (Model.TermRecord (Model.Record {
+      Model.recordTypeName = (Model.Name "hydra.typescript.syntax.WhileStatement"),
+      Model.recordFields = [
+        Model.Field {
+          Model.fieldName = (Model.Name "test"),
+          Model.fieldTerm = (Typed.unTypedTerm newVal)},
+        Model.Field {
+          Model.fieldName = (Model.Name "body"),
+          Model.fieldTerm = (Model.TermApplication (Model.Application {
+            Model.applicationFunction = (Model.TermProject (Model.Projection {
+              Model.projectionTypeName = (Model.Name "hydra.typescript.syntax.WhileStatement"),
+              Model.projectionFieldName = (Model.Name "body")})),
+            Model.applicationArgument = (Typed.unTypedTerm original)}))}]}))
diff --git a/src/main/haskell/Hydra/Typescript/Language.hs b/src/main/haskell/Hydra/Typescript/Language.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Typescript/Language.hs
@@ -0,0 +1,303 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | Language constraints and reserved words for TypeScript 5.x (ECMAScript 2024 base)
+
+module Hydra.Typescript.Language where
+
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Lexical as Lexical
+import qualified Hydra.Core.Overlay.Haskell.Lib.Lists as Lists
+import qualified Hydra.Core.Overlay.Haskell.Lib.Sets as Sets
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variants as Variants
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
+import qualified Data.Scientific as Sci
+import Data.Void
+import qualified Data.Set as S
+
+-- | Language constraints for TypeScript 5.x
+typeScriptLanguage :: Coders.Language
+typeScriptLanguage =
+    Coders.Language {
+      Coders.languageName = (Coders.LanguageName "hydra.typeScript"),
+      Coders.languageConstraints = Coders.LanguageConstraints {
+        Coders.languageConstraintsLiteralVariants = literalVariants,
+        Coders.languageConstraintsFloatTypes = floatTypes,
+        Coders.languageConstraintsIntegerTypes = integerTypes,
+        Coders.languageConstraintsTermVariants = termVariants,
+        Coders.languageConstraintsTypeVariants = typeVariants,
+        Coders.languageConstraintsTypes = typePredicate},
+      Coders.languageSupportedFeatures = (Sets.fromList [
+        Coders.LanguageFeatureNestedPolymorphicLetBindings]),
+      Coders.languageCaseConventions = Coders.CaseConventions {
+        Coders.caseConventionsConstant = Util.CaseConventionUpperSnake,
+        Coders.caseConventionsDirectory = Util.CaseConventionLowerSnake,
+        Coders.caseConventionsEnumValue = Util.CaseConventionPascal,
+        Coders.caseConventionsField = Util.CaseConventionCamel,
+        Coders.caseConventionsFile = Util.CaseConventionLowerSnake,
+        Coders.caseConventionsModule = Util.CaseConventionLowerSnake,
+        Coders.caseConventionsTerm = Util.CaseConventionCamel,
+        Coders.caseConventionsTermVariable = Util.CaseConventionCamel,
+        Coders.caseConventionsType = Util.CaseConventionPascal,
+        Coders.caseConventionsTypeVariable = Util.CaseConventionPascal},
+      Coders.languageDefaultFileExtension = (File.FileExtension "ts")}
+  where
+    literalVariants =
+        Sets.fromList [
+          Variants.LiteralVariantBinary,
+          Variants.LiteralVariantBoolean,
+          Variants.LiteralVariantDecimal,
+          Variants.LiteralVariantFloat,
+          Variants.LiteralVariantInteger,
+          Variants.LiteralVariantString]
+    floatTypes = Sets.fromList [
+      Model.FloatTypeFloat64]
+    integerTypes =
+        Sets.fromList [
+          Model.IntegerTypeInt32,
+          Model.IntegerTypeBigint]
+    termVariants =
+        Sets.fromList [
+          Variants.TermVariantAnnotated,
+          Variants.TermVariantApplication,
+          Variants.TermVariantEither,
+          Variants.TermVariantCases,
+          Variants.TermVariantLambda,
+          Variants.TermVariantProject,
+          Variants.TermVariantUnwrap,
+          Variants.TermVariantLet,
+          Variants.TermVariantList,
+          Variants.TermVariantLiteral,
+          Variants.TermVariantMap,
+          Variants.TermVariantOptional,
+          Variants.TermVariantPair,
+          Variants.TermVariantRecord,
+          Variants.TermVariantSet,
+          Variants.TermVariantTypeApplication,
+          Variants.TermVariantTypeLambda,
+          Variants.TermVariantInject,
+          Variants.TermVariantUnit,
+          Variants.TermVariantVariable,
+          Variants.TermVariantWrap]
+    typeVariants =
+        Sets.fromList [
+          Variants.TypeVariantAnnotated,
+          Variants.TypeVariantApplication,
+          Variants.TypeVariantEither,
+          Variants.TypeVariantFunction,
+          Variants.TypeVariantForall,
+          Variants.TypeVariantList,
+          Variants.TypeVariantLiteral,
+          Variants.TypeVariantMap,
+          Variants.TypeVariantOptional,
+          Variants.TypeVariantPair,
+          Variants.TypeVariantRecord,
+          Variants.TypeVariantSet,
+          Variants.TypeVariantUnion,
+          Variants.TypeVariantUnit,
+          Variants.TypeVariantVariable,
+          Variants.TypeVariantVoid,
+          Variants.TypeVariantWrap]
+    typePredicate = \_ -> True
+
+-- | A set of reserved words in TypeScript
+typeScriptReservedWords :: S.Set String
+typeScriptReservedWords =
+    Sets.fromList (Lists.concat [
+      keywords,
+      futureReserved,
+      strictModeReserved,
+      typeScriptKeywords,
+      builtIns,
+      hydraTypeScriptKeywords])
+  where
+    keywords =
+        [
+          "await",
+          "break",
+          "case",
+          "catch",
+          "class",
+          "const",
+          "continue",
+          "debugger",
+          "default",
+          "delete",
+          "do",
+          "else",
+          "enum",
+          "export",
+          "extends",
+          "false",
+          "finally",
+          "for",
+          "function",
+          "if",
+          "import",
+          "in",
+          "instanceof",
+          "let",
+          "new",
+          "null",
+          "return",
+          "super",
+          "switch",
+          "this",
+          "throw",
+          "true",
+          "try",
+          "typeof",
+          "undefined",
+          "var",
+          "void",
+          "while",
+          "with",
+          "yield"]
+    futureReserved =
+        [
+          "implements",
+          "interface",
+          "package",
+          "private",
+          "protected",
+          "public"]
+    strictModeReserved =
+        [
+          "arguments",
+          "eval",
+          "static",
+          "yield"]
+    typeScriptKeywords =
+        [
+          "abstract",
+          "as",
+          "asserts",
+          "assert",
+          "any",
+          "boolean",
+          "constructor",
+          "declare",
+          "from",
+          "get",
+          "global",
+          "infer",
+          "intrinsic",
+          "is",
+          "keyof",
+          "module",
+          "namespace",
+          "never",
+          "object",
+          "of",
+          "out",
+          "override",
+          "readonly",
+          "require",
+          "satisfies",
+          "set",
+          "string",
+          "symbol",
+          "type",
+          "unique",
+          "unknown",
+          "using"]
+    builtIns =
+        [
+          "Array",
+          "ArrayBuffer",
+          "BigInt",
+          "Boolean",
+          "DataView",
+          "Date",
+          "Error",
+          "Float32Array",
+          "Float64Array",
+          "Function",
+          "Int8Array",
+          "Int16Array",
+          "Int32Array",
+          "JSON",
+          "Map",
+          "Math",
+          "Number",
+          "Object",
+          "Promise",
+          "Proxy",
+          "Reflect",
+          "RegExp",
+          "Set",
+          "String",
+          "Symbol",
+          "Uint8Array",
+          "Uint8ClampedArray",
+          "Uint16Array",
+          "Uint32Array",
+          "WeakMap",
+          "WeakSet",
+          "decodeURI",
+          "decodeURIComponent",
+          "encodeURI",
+          "encodeURIComponent",
+          "eval",
+          "isFinite",
+          "isNaN",
+          "parseFloat",
+          "parseInt",
+          "console",
+          "document",
+          "global",
+          "globalThis",
+          "module",
+          "process",
+          "require",
+          "window"]
+    hydraTypeScriptKeywords =
+        [
+          "Name",
+          "FrozenMap",
+          "TERM_ANNOTATED",
+          "TERM_APPLICATION",
+          "TERM_EITHER",
+          "TERM_FUNCTION",
+          "TERM_LET",
+          "TERM_LIST",
+          "TERM_LITERAL",
+          "TERM_MAP",
+          "TERM_MAYBE",
+          "TERM_PAIR",
+          "TERM_RECORD",
+          "TERM_SET",
+          "TERM_TYPE_APPLICATION",
+          "TERM_TYPE_LAMBDA",
+          "TERM_UNION",
+          "TERM_UNIT",
+          "TERM_VARIABLE",
+          "TERM_WRAP"]
diff --git a/src/main/haskell/Hydra/Typescript/Operators.hs b/src/main/haskell/Hydra/Typescript/Operators.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Typescript/Operators.hs
@@ -0,0 +1,198 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | AST operators for TypeScript with precedence and associativity
+
+module Hydra.Typescript.Operators where
+
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Serialization as Serialization
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variants as Variants
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
+import qualified Data.Scientific as Sci
+import Data.Void
+
+-- | Addition operator (+)
+addOp :: Ast.Op
+addOp = Serialization.op "+" 14 Ast.AssociativityLeft
+
+-- | Function application (whitespace)
+appOp :: Ast.Op
+appOp =
+    Ast.Op {
+      Ast.opSymbol = (Ast.Symbol ""),
+      Ast.opPadding = Ast.Padding {
+        Ast.paddingLeft = Ast.WsNone,
+        Ast.paddingRight = Ast.WsNone},
+      Ast.opPrecedence = (Ast.Precedence 20),
+      Ast.opAssociativity = Ast.AssociativityLeft}
+
+-- | Arrow function operator (=>)
+arrowOp :: Ast.Op
+arrowOp = Serialization.op "=>" 2 Ast.AssociativityRight
+
+-- | Assignment operator (=)
+assignOp :: Ast.Op
+assignOp = Serialization.op "=" 2 Ast.AssociativityRight
+
+-- | Bitwise AND operator (&)
+bitwiseAndOp :: Ast.Op
+bitwiseAndOp = Serialization.op "&" 10 Ast.AssociativityLeft
+
+-- | Bitwise OR operator (|)
+bitwiseOrOp :: Ast.Op
+bitwiseOrOp = Serialization.op "|" 8 Ast.AssociativityLeft
+
+-- | Bitwise XOR operator (^)
+bitwiseXorOp :: Ast.Op
+bitwiseXorOp = Serialization.op "^" 9 Ast.AssociativityLeft
+
+-- | Type annotation colon (:)
+colonOp :: Ast.Op
+colonOp = Serialization.op ":" 0 Ast.AssociativityNone
+
+-- | Comma operator (,)
+commaOp :: Ast.Op
+commaOp = Serialization.op "," 1 Ast.AssociativityLeft
+
+-- | Definition operator (= in const x = ...)
+defineOp :: Ast.Op
+defineOp = Serialization.op "=" 0 Ast.AssociativityNone
+
+-- | Division operator (/)
+divideOp :: Ast.Op
+divideOp = Serialization.op "/" 15 Ast.AssociativityLeft
+
+-- | Equality operator (==)
+equalOp :: Ast.Op
+equalOp = Serialization.op "==" 11 Ast.AssociativityLeft
+
+-- | Exponentiation operator (**)
+exponentiateOp :: Ast.Op
+exponentiateOp = Serialization.op "**" 16 Ast.AssociativityRight
+
+-- | Greater than operator (>)
+greaterThanOp :: Ast.Op
+greaterThanOp = Serialization.op ">" 12 Ast.AssociativityLeft
+
+-- | Greater than or equal operator (>=)
+greaterThanOrEqualOp :: Ast.Op
+greaterThanOrEqualOp = Serialization.op ">=" 12 Ast.AssociativityLeft
+
+-- | In operator (in)
+inOp :: Ast.Op
+inOp = Serialization.op "in" 12 Ast.AssociativityLeft
+
+-- | Instance of operator (instanceof)
+instanceOfOp :: Ast.Op
+instanceOfOp = Serialization.op "instanceof" 12 Ast.AssociativityLeft
+
+-- | Left shift operator (<<)
+leftShiftOp :: Ast.Op
+leftShiftOp = Serialization.op "<<" 13 Ast.AssociativityLeft
+
+-- | Less than operator (<)
+lessThanOp :: Ast.Op
+lessThanOp = Serialization.op "<" 12 Ast.AssociativityLeft
+
+-- | Less than or equal operator (<=)
+lessThanOrEqualOp :: Ast.Op
+lessThanOrEqualOp = Serialization.op "<=" 12 Ast.AssociativityLeft
+
+-- | Logical AND operator (&&)
+logicalAndOp :: Ast.Op
+logicalAndOp = Serialization.op "&&" 6 Ast.AssociativityLeft
+
+-- | Logical OR operator (||)
+logicalOrOp :: Ast.Op
+logicalOrOp = Serialization.op "||" 5 Ast.AssociativityLeft
+
+-- | Member access operator (.)
+memberOp :: Ast.Op
+memberOp =
+    Ast.Op {
+      Ast.opSymbol = (Ast.Symbol "."),
+      Ast.opPadding = Ast.Padding {
+        Ast.paddingLeft = Ast.WsNone,
+        Ast.paddingRight = Ast.WsNone},
+      Ast.opPrecedence = (Ast.Precedence 20),
+      Ast.opAssociativity = Ast.AssociativityLeft}
+
+-- | Modulo operator (%)
+moduloOp :: Ast.Op
+moduloOp = Serialization.op "%" 15 Ast.AssociativityLeft
+
+-- | Multiplication operator (*)
+multiplyOp :: Ast.Op
+multiplyOp = Serialization.op "*" 15 Ast.AssociativityLeft
+
+-- | Inequality operator (!=)
+notEqualOp :: Ast.Op
+notEqualOp = Serialization.op "!=" 11 Ast.AssociativityLeft
+
+-- | Nullish coalescing operator (??)
+nullishCoalescingOp :: Ast.Op
+nullishCoalescingOp = Serialization.op "??" 4 Ast.AssociativityLeft
+
+-- | Optional chaining operator (?.)
+optionalChainOp :: Ast.Op
+optionalChainOp =
+    Ast.Op {
+      Ast.opSymbol = (Ast.Symbol "?."),
+      Ast.opPadding = Ast.Padding {
+        Ast.paddingLeft = Ast.WsNone,
+        Ast.paddingRight = Ast.WsNone},
+      Ast.opPrecedence = (Ast.Precedence 20),
+      Ast.opAssociativity = Ast.AssociativityLeft}
+
+-- | Right shift operator (>>)
+rightShiftOp :: Ast.Op
+rightShiftOp = Serialization.op ">>" 13 Ast.AssociativityLeft
+
+-- | Strict equality operator (===)
+strictEqualOp :: Ast.Op
+strictEqualOp = Serialization.op "===" 11 Ast.AssociativityLeft
+
+-- | Strict inequality operator (!==)
+strictNotEqualOp :: Ast.Op
+strictNotEqualOp = Serialization.op "!==" 11 Ast.AssociativityLeft
+
+-- | Subtraction operator (-)
+subtractOp :: Ast.Op
+subtractOp = Serialization.op "-" 14 Ast.AssociativityLeft
+
+-- | Ternary operator (?:) - represents the ? part
+ternaryOp :: Ast.Op
+ternaryOp = Serialization.op "?" 3 Ast.AssociativityRight
+
+-- | Unsigned right shift operator (>>>)
+unsignedRightShiftOp :: Ast.Op
+unsignedRightShiftOp = Serialization.op ">>>" 13 Ast.AssociativityLeft
diff --git a/src/main/haskell/Hydra/Typescript/Overlay/Haskell/Dsl/TypeScript/Helpers.hs b/src/main/haskell/Hydra/Typescript/Overlay/Haskell/Dsl/TypeScript/Helpers.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Typescript/Overlay/Haskell/Dsl/TypeScript/Helpers.hs
@@ -0,0 +1,623 @@
+-- | A DSL for constructing TypeScript syntax trees in Haskell.
+module Hydra.Typescript.Overlay.Haskell.Dsl.TypeScript.Helpers where
+
+import Hydra.Typescript.Syntax
+import qualified Data.Int as I
+
+
+-- * Identifiers
+
+-- | Create an identifier
+-- Example: ident "foo"
+ident :: String -> Identifier
+ident = Identifier
+
+-- | Create a qualified name from a list of strings
+-- Example: qualifiedName ["module", "submodule", "name"]
+qualifiedName :: [String] -> QualifiedName
+qualifiedName = fmap Identifier
+
+
+-- * Literals
+
+-- | Create a string literal with double quotes
+-- Example: stringLit "hello"
+stringLit :: String -> Literal
+stringLit s = LiteralString $ StringLiteral s False
+
+-- | Create a string literal with single quotes
+-- Example: stringLitSingle "hello"
+stringLitSingle :: String -> Literal
+stringLitSingle s = LiteralString $ StringLiteral s True
+
+-- | Create an integer literal
+-- Example: intLit 42
+intLit :: I.Int64 -> Literal
+intLit = LiteralNumber . NumericLiteralInteger
+
+-- | Create a floating-point literal
+-- Example: floatLit 3.14
+floatLit :: Double -> Literal
+floatLit = LiteralNumber . NumericLiteralFloat
+
+-- | Create a boolean literal
+-- Example: boolLit True
+boolLit :: Bool -> Literal
+boolLit = LiteralBoolean
+
+-- | The null literal
+nullLit :: Literal
+nullLit = LiteralNull
+
+-- | The undefined literal
+undefinedLit :: Literal
+undefinedLit = LiteralUndefined
+
+-- | Create a BigInt literal
+-- Example: bigIntLit 123
+bigIntLit :: Integer -> Literal
+bigIntLit = LiteralBigInt
+
+
+-- * Expressions
+
+-- | Create an identifier expression
+-- Example: identExpr "foo"
+identExpr :: String -> Expression
+identExpr = ExpressionIdentifier . ident
+
+-- | Create a literal expression
+-- Example: litExpr (stringLit "hello")
+litExpr :: Literal -> Expression
+litExpr = ExpressionLiteral
+
+-- | Create a string expression
+-- Example: stringExpr "hello"
+stringExpr :: String -> Expression
+stringExpr = litExpr . stringLit
+
+-- | Create an integer expression
+-- Example: intExpr 42
+intExpr :: I.Int64 -> Expression
+intExpr = litExpr . intLit
+
+-- | Create a floating-point expression
+-- Example: floatExpr 3.14
+floatExpr :: Double -> Expression
+floatExpr = litExpr . floatLit
+
+-- | Create a boolean expression
+-- Example: boolExpr True
+boolExpr :: Bool -> Expression
+boolExpr = litExpr . boolLit
+
+-- | The null expression
+nullExpr :: Expression
+nullExpr = litExpr nullLit
+
+-- | The undefined expression
+undefinedExpr :: Expression
+undefinedExpr = litExpr undefinedLit
+
+-- | Create an array expression
+-- Example: arrayExpr [intExpr 1, intExpr 2, intExpr 3]
+arrayExpr :: [Expression] -> Expression
+arrayExpr = ExpressionArray . fmap ArrayElementExpression
+
+-- | Create an object expression from key-value pairs
+-- Example: objectExpr [("name", stringExpr "John"), ("age", intExpr 30)]
+objectExpr :: [(String, Expression)] -> Expression
+objectExpr pairs = ExpressionObject $ fmap toProperty pairs
+  where
+    toProperty (k, v) = Property (identExpr k) v PropertyKindInit False False
+
+-- | Create a function call expression
+-- Example: callExpr (identExpr "foo") [intExpr 1, intExpr 2]
+callExpr :: Expression -> [Expression] -> Expression
+callExpr callee args = ExpressionCall $ CallExpression callee args False
+
+-- | Create an optional chaining call expression
+-- Example: optionalCallExpr (identExpr "foo") [intExpr 1]
+optionalCallExpr :: Expression -> [Expression] -> Expression
+optionalCallExpr callee args = ExpressionCall $ CallExpression callee args True
+
+-- | Create a member access expression (obj.prop)
+-- Example: memberExpr (identExpr "obj") "prop"
+memberExpr :: Expression -> String -> Expression
+memberExpr obj prop = ExpressionMember $ MemberExpression obj (identExpr prop) False False
+
+-- | Create a computed member access expression (obj[expr])
+-- Example: computedMemberExpr (identExpr "arr") (intExpr 0)
+computedMemberExpr :: Expression -> Expression -> Expression
+computedMemberExpr obj prop = ExpressionMember $ MemberExpression obj prop True False
+
+-- | Create an optional chaining member expression (obj?.prop)
+-- Example: optionalMemberExpr (identExpr "obj") "prop"
+optionalMemberExpr :: Expression -> String -> Expression
+optionalMemberExpr obj prop = ExpressionMember $ MemberExpression obj (identExpr prop) False True
+
+-- | Create a conditional (ternary) expression
+-- Example: condExpr (identExpr "x") (intExpr 1) (intExpr 0)
+condExpr :: Expression -> Expression -> Expression -> Expression
+condExpr test consequent alternate = ExpressionConditional $
+  ConditionalExpression test consequent alternate
+
+-- | Create a binary expression
+-- Example: binaryExpr BinaryOperatorAdd (intExpr 1) (intExpr 2)
+binaryExpr :: BinaryOperator -> Expression -> Expression -> Expression
+binaryExpr op left right = ExpressionBinary $ BinaryExpression op left right
+
+-- | Create an addition expression
+-- Example: addExpr (intExpr 1) (intExpr 2)
+addExpr :: Expression -> Expression -> Expression
+addExpr = binaryExpr BinaryOperatorAdd
+
+-- | Create a subtraction expression
+-- Example: subExpr (intExpr 5) (intExpr 3)
+subExpr :: Expression -> Expression -> Expression
+subExpr = binaryExpr BinaryOperatorSubtract
+
+-- | Create a multiplication expression
+-- Example: mulExpr (intExpr 3) (intExpr 4)
+mulExpr :: Expression -> Expression -> Expression
+mulExpr = binaryExpr BinaryOperatorMultiply
+
+-- | Create a division expression
+-- Example: divExpr (intExpr 10) (intExpr 2)
+divExpr :: Expression -> Expression -> Expression
+divExpr = binaryExpr BinaryOperatorDivide
+
+-- | Create a strict equality expression (===)
+-- Example: eqExpr (identExpr "x") (intExpr 1)
+eqExpr :: Expression -> Expression -> Expression
+eqExpr = binaryExpr BinaryOperatorStrictEqual
+
+-- | Create a strict inequality expression (!==)
+-- Example: neqExpr (identExpr "x") (intExpr 1)
+neqExpr :: Expression -> Expression -> Expression
+neqExpr = binaryExpr BinaryOperatorStrictNotEqual
+
+-- | Create a logical AND expression
+-- Example: andExpr (identExpr "a") (identExpr "b")
+andExpr :: Expression -> Expression -> Expression
+andExpr = binaryExpr BinaryOperatorAnd
+
+-- | Create a logical OR expression
+-- Example: orExpr (identExpr "a") (identExpr "b")
+orExpr :: Expression -> Expression -> Expression
+orExpr = binaryExpr BinaryOperatorOr
+
+-- | Create a unary expression
+-- Example: unaryExpr UnaryOperatorNot (identExpr "x")
+unaryExpr :: UnaryOperator -> Expression -> Expression
+unaryExpr op arg = ExpressionUnary $ UnaryExpression op arg True
+
+-- | Create a logical NOT expression
+-- Example: notExpr (identExpr "x")
+notExpr :: Expression -> Expression
+notExpr = unaryExpr UnaryOperatorNot
+
+-- | Create a negation expression
+-- Example: negateExpr (identExpr "x")
+negateExpr :: Expression -> Expression
+negateExpr = unaryExpr UnaryOperatorNegate
+
+-- | Create an assignment expression
+-- Example: assignExpr (identPattern "x") (intExpr 42)
+assignExpr :: Pattern -> Expression -> Expression
+assignExpr left right = ExpressionAssignment $
+  AssignmentExpression AssignmentOperatorAssign left right
+
+-- | The 'this' expression
+thisExpr :: Expression
+thisExpr = ExpressionThis
+
+-- | Create a 'new' expression
+-- Example: newExpr (identExpr "Date") []
+newExpr :: Expression -> [Expression] -> Expression
+newExpr callee args = ExpressionNew $ CallExpression callee args False
+
+-- | Create an await expression
+-- Example: awaitExpr (callExpr (identExpr "fetch") [stringExpr "url"])
+awaitExpr :: Expression -> Expression
+awaitExpr = ExpressionAwait
+
+-- | Create a yield expression
+-- Example: yieldExpr (Just (intExpr 1))
+yieldExpr :: Maybe Expression -> Expression
+yieldExpr = ExpressionYield
+
+-- | Create a spread expression
+-- Example: spreadExpr (identExpr "arr")
+spreadExpr :: Expression -> Expression
+spreadExpr = ExpressionSpread . SpreadElement
+
+-- | Create a parenthesized expression
+-- Example: parenExpr (addExpr (intExpr 1) (intExpr 2))
+parenExpr :: Expression -> Expression
+parenExpr = ExpressionParenthesized
+
+
+-- * Arrow Functions
+
+-- | Create an arrow function with an expression body
+-- Example: arrowExpr ["x", "y"] (addExpr (identExpr "x") (identExpr "y"))
+arrowExpr :: [String] -> Expression -> Expression
+arrowExpr params body = ExpressionArrow $ ArrowFunctionExpression
+  (fmap identPattern params)
+  (ArrowFunctionBodyExpression body)
+  False
+
+-- | Create an async arrow function with an expression body
+-- Example: asyncArrowExpr ["x"] (awaitExpr (callExpr (identExpr "fetch") [identExpr "x"]))
+asyncArrowExpr :: [String] -> Expression -> Expression
+asyncArrowExpr params body = ExpressionArrow $ ArrowFunctionExpression
+  (fmap identPattern params)
+  (ArrowFunctionBodyExpression body)
+  True
+
+-- | Create an arrow function with a block body
+-- Example: arrowBlockExpr ["x"] [returnStmt (Just (identExpr "x"))]
+arrowBlockExpr :: [String] -> [Statement] -> Expression
+arrowBlockExpr params body = ExpressionArrow $ ArrowFunctionExpression
+  (fmap identPattern params)
+  (ArrowFunctionBodyBlock body)
+  False
+
+
+-- * Patterns
+
+-- | Create an identifier pattern
+-- Example: identPattern "x"
+identPattern :: String -> Pattern
+identPattern = PatternIdentifier . ident
+
+-- | Create an object destructuring pattern
+-- Example: objectPattern [identPattern "a", identPattern "b"]
+objectPattern :: [Pattern] -> Pattern
+objectPattern ps = PatternObject $ ObjectPattern $ fmap toProperty ps
+  where
+    toProperty p = case p of
+      PatternIdentifier i -> ObjectPatternPropertyProperty $
+        Property (ExpressionIdentifier i) (ExpressionIdentifier i) PropertyKindInit False True
+      _ -> ObjectPatternPropertyProperty $
+        Property nullExpr (patternToExpr p) PropertyKindInit False False
+    patternToExpr (PatternIdentifier i) = ExpressionIdentifier i
+    patternToExpr _ = nullExpr
+
+-- | Create an array destructuring pattern
+-- Example: arrayPattern [Just (identPattern "a"), Nothing, Just (identPattern "b")]
+arrayPattern :: [Maybe Pattern] -> Pattern
+arrayPattern = PatternArray
+
+-- | Create a rest pattern
+-- Example: restPattern "args"
+restPattern :: String -> Pattern
+restPattern = PatternRest . RestElement . identPattern
+
+-- | Create a pattern with a default value
+-- Example: defaultPattern "x" (intExpr 0)
+defaultPattern :: String -> Expression -> Pattern
+defaultPattern name def = PatternAssignment $
+  AssignmentPattern (identPattern name) def
+
+
+-- * Statements
+
+-- | Create an expression statement
+-- Example: exprStmt (callExpr (identExpr "console.log") [stringExpr "hello"])
+exprStmt :: Expression -> Statement
+exprStmt = StatementExpression
+
+-- | Create a block statement
+-- Example: blockStmt [exprStmt (intExpr 1), exprStmt (intExpr 2)]
+blockStmt :: [Statement] -> Statement
+blockStmt = StatementBlock
+
+-- | Create a return statement
+-- Example: returnStmt (Just (intExpr 42))
+returnStmt :: Maybe Expression -> Statement
+returnStmt = StatementReturn
+
+-- | Create a throw statement
+-- Example: throwStmt (newExpr (identExpr "Error") [stringExpr "oops"])
+throwStmt :: Expression -> Statement
+throwStmt = StatementThrow . ThrowStatement
+
+-- | Create a break statement
+-- Example: breakStmt Nothing
+breakStmt :: Maybe String -> Statement
+breakStmt = StatementBreak . fmap ident
+
+-- | Create a continue statement
+-- Example: continueStmt Nothing
+continueStmt :: Maybe String -> Statement
+continueStmt = StatementContinue . fmap ident
+
+-- | Create an if statement
+-- Example: ifStmt (identExpr "x") (returnStmt (Just (intExpr 1))) Nothing
+ifStmt :: Expression -> Statement -> Maybe Statement -> Statement
+ifStmt test consequent alternate = StatementIf $ IfStatement test consequent alternate
+
+-- | Create a while statement
+-- Example: whileStmt (boolExpr True) (blockStmt [breakStmt Nothing])
+whileStmt :: Expression -> Statement -> Statement
+whileStmt test body = StatementWhile $ WhileStatement test body
+
+-- | Create a for statement
+-- Example: forStmt (Just (ForInitVariable (constDecl "i" (intExpr 0)))) (Just (binaryExpr BinaryOperatorLessThan (identExpr "i") (intExpr 10))) (Just (unaryExpr UnaryOperatorIncrement (identExpr "i"))) (blockStmt [])
+forStmt :: Maybe ForInit -> Maybe Expression -> Maybe Expression -> Statement -> Statement
+forStmt init test update body = StatementFor $ ForStatement init test update body
+
+-- | Create a for-of statement
+-- Example: forOfStmt False (ForInLeftVariable (constDecl "item" Nothing)) (identExpr "items") (blockStmt [])
+forOfStmt :: Bool -> ForInLeft -> Expression -> Statement -> Statement
+forOfStmt await left right body = StatementForOf $ ForOfStatement await left right body
+
+-- | Create a try statement
+-- Example: tryStmt [exprStmt (callExpr (identExpr "riskyOp") [])] (Just (catchClause (Just (identPattern "e")) [throwStmt (identExpr "e")])) Nothing
+tryStmt :: [Statement] -> Maybe CatchClause -> Maybe [Statement] -> Statement
+tryStmt block handler finalizer = StatementTry $ TryStatement block handler finalizer
+
+-- | Create a catch clause
+-- Example: catchClause (Just (identPattern "e")) [throwStmt (identExpr "e")]
+catchClause :: Maybe Pattern -> [Statement] -> CatchClause
+catchClause = CatchClause
+
+-- | Create a switch statement
+-- Example: switchStmt (identExpr "x") [switchCase (Just (intExpr 1)) [returnStmt (Just (stringExpr "one"))], switchCase Nothing [returnStmt (Just (stringExpr "default"))]]
+switchStmt :: Expression -> [SwitchCase] -> Statement
+switchStmt discriminant cases = StatementSwitch $ SwitchStatement discriminant cases
+
+-- | Create a switch case
+-- Example: switchCase (Just (intExpr 1)) [returnStmt (Just (stringExpr "one"))]
+switchCase :: Maybe Expression -> [Statement] -> SwitchCase
+switchCase = SwitchCase
+
+-- | An empty statement
+emptyStmt :: Statement
+emptyStmt = StatementEmpty
+
+-- | A debugger statement
+debuggerStmt :: Statement
+debuggerStmt = StatementDebugger
+
+
+-- * Variable Declarations
+
+-- | Create a const declaration
+-- Example: constDecl "x" (Just (intExpr 42))
+constDecl :: String -> Maybe Expression -> VariableDeclaration
+constDecl name init = VariableDeclaration VariableKindConst
+  [VariableDeclarator (identPattern name) init]
+
+-- | Create a let declaration
+-- Example: letDecl "x" (Just (intExpr 42))
+letDecl :: String -> Maybe Expression -> VariableDeclaration
+letDecl name init = VariableDeclaration VariableKindLet
+  [VariableDeclarator (identPattern name) init]
+
+-- | Create a var declaration
+-- Example: varDecl "x" (Just (intExpr 42))
+varDecl :: String -> Maybe Expression -> VariableDeclaration
+varDecl name init = VariableDeclaration VariableKindVar
+  [VariableDeclarator (identPattern name) init]
+
+-- | Create a variable declaration statement
+-- Example: varDeclStmt (constDecl "x" (Just (intExpr 42)))
+varDeclStmt :: VariableDeclaration -> Statement
+varDeclStmt = StatementVariableDeclaration
+
+
+-- * Function Declarations
+
+-- | Create a function declaration
+-- Example: funcDecl "add" ["x", "y"] [returnStmt (Just (addExpr (identExpr "x") (identExpr "y")))]
+funcDecl :: String -> [String] -> [Statement] -> FunctionDeclaration
+funcDecl name params body = FunctionDeclaration
+  (ident name)
+  (fmap identPattern params)
+  body
+  False
+  False
+
+-- | Create an async function declaration
+-- Example: asyncFuncDecl "fetchData" ["url"] [returnStmt (Just (awaitExpr (callExpr (identExpr "fetch") [identExpr "url"])))]
+asyncFuncDecl :: String -> [String] -> [Statement] -> FunctionDeclaration
+asyncFuncDecl name params body = FunctionDeclaration
+  (ident name)
+  (fmap identPattern params)
+  body
+  True
+  False
+
+-- | Create a function declaration statement
+-- Example: funcDeclStmt (funcDecl "add" ["x", "y"] [returnStmt (Just (addExpr (identExpr "x") (identExpr "y")))])
+funcDeclStmt :: FunctionDeclaration -> Statement
+funcDeclStmt = StatementFunctionDeclaration
+
+
+-- * Class Declarations
+
+-- | Create a class declaration
+-- Example: classDecl "Person" Nothing [methodDef "greet" [] [returnStmt (Just (stringExpr "hello"))]]
+classDecl :: String -> Maybe Expression -> [MethodDefinition] -> ClassDeclaration
+classDecl name superClass body = ClassDeclaration (ident name) superClass body
+
+-- | Create a method definition
+-- Example: methodDef "greet" [] [returnStmt (Just (stringExpr "hello"))]
+methodDef :: String -> [String] -> [Statement] -> MethodDefinition
+methodDef name params body = MethodDefinition
+  (identExpr name)
+  (FunctionExpression Nothing (fmap identPattern params) body False False)
+  MethodKindMethod
+  False
+  False
+
+-- | Create a constructor definition
+-- Example: constructorDef ["name"] [exprStmt (assignExpr (PatternIdentifier (ident "this.name")) (identExpr "name"))]
+constructorDef :: [String] -> [Statement] -> MethodDefinition
+constructorDef params body = MethodDefinition
+  (identExpr "constructor")
+  (FunctionExpression Nothing (fmap identPattern params) body False False)
+  MethodKindConstructor
+  False
+  False
+
+-- | Create a static method definition
+-- Example: staticMethodDef "create" [] [returnStmt (Just (newExpr (identExpr "Person") []))]
+staticMethodDef :: String -> [String] -> [Statement] -> MethodDefinition
+staticMethodDef name params body = MethodDefinition
+  (identExpr name)
+  (FunctionExpression Nothing (fmap identPattern params) body False False)
+  MethodKindMethod
+  False
+  True
+
+-- | Create a class declaration statement
+-- Example: classDeclStmt (classDecl "Person" Nothing [])
+classDeclStmt :: ClassDeclaration -> Statement
+classDeclStmt = StatementClassDeclaration
+
+
+-- * Module Items
+
+-- | Create a statement module item
+-- Example: stmtItem (varDeclStmt (constDecl "x" (Just (intExpr 42))))
+stmtItem :: Statement -> ModuleItem
+stmtItem = ModuleItemStatement
+
+-- | Create an import declaration
+-- Example: importDecl [importNamed "foo" "foo"] "./module.js"
+importDecl :: [ImportClause] -> String -> ImportDeclaration
+importDecl specifiers source = ImportDeclaration specifiers (StringLiteral source False)
+
+-- | Create a named import
+-- Example: importNamed "foo" "bar"  -- import { foo as bar }
+importNamed :: String -> String -> ImportClause
+importNamed imported local = ImportClauseNamed $
+  ImportSpecifier (ident imported) (ident local)
+
+-- | Create a default import
+-- Example: importDefault "foo"  -- import foo from ...
+importDefault :: String -> ImportClause
+importDefault = ImportClauseDefault . ImportDefaultSpecifier . ident
+
+-- | Create a namespace import
+-- Example: importNamespace "foo"  -- import * as foo from ...
+importNamespace :: String -> ImportClause
+importNamespace = ImportClauseNamespace . ImportNamespaceSpecifier . ident
+
+-- | Create an import module item
+-- Example: importItem (importDecl [importDefault "React"] "react")
+importItem :: ImportDeclaration -> ModuleItem
+importItem = ModuleItemImport
+
+-- | Create a named export declaration
+-- Example: namedExportDecl [("foo", "foo")] Nothing
+namedExportDecl :: [(String, String)] -> Maybe String -> ExportDeclaration
+namedExportDecl specifiers source = ExportDeclarationNamed $ NamedExport
+  (fmap (\(local, exported) -> ExportSpecifier (ident local) (ident exported)) specifiers)
+  (fmap (\s -> StringLiteral s False) source)
+
+-- | Create a default export declaration
+-- Example: defaultExportDecl (identExpr "foo")
+defaultExportDecl :: Expression -> ExportDeclaration
+defaultExportDecl = ExportDeclarationDefault
+
+-- | Create an export declaration for a statement
+-- Example: exportDeclStmt (varDeclStmt (constDecl "x" (Just (intExpr 42))))
+exportDeclStmt :: Statement -> ExportDeclaration
+exportDeclStmt = ExportDeclarationDeclaration
+
+-- | Create an export module item
+-- Example: exportItem (defaultExportDecl (identExpr "foo"))
+exportItem :: ExportDeclaration -> ModuleItem
+exportItem = ModuleItemExport
+
+
+-- * Programs
+
+-- | Create a module program
+-- Example: moduleProgram [importItem (importDecl [importDefault "foo"] "./foo.js"), stmtItem (varDeclStmt (constDecl "x" (Just (intExpr 42))))]
+moduleProgram :: [ModuleItem] -> Program
+moduleProgram body = Program body SourceTypeModule
+
+-- | Create a script program
+-- Example: scriptProgram [stmtItem (varDeclStmt (constDecl "x" (Just (intExpr 42))))]
+scriptProgram :: [ModuleItem] -> Program
+scriptProgram body = Program body SourceTypeScript
+
+
+-- * Type Expressions
+
+-- | Create an identifier type expression
+-- Example: identType "string"
+identType :: String -> TypeExpression
+identType = TypeExpressionIdentifier . ident
+
+-- | Create an array type expression
+-- Example: arrayType (identType "number")
+arrayType :: TypeExpression -> TypeExpression
+arrayType = TypeExpressionArray . ArrayTypeExpression
+
+-- | Create a union type expression
+-- Example: unionType [identType "string", identType "number"]
+unionType :: [TypeExpression] -> TypeExpression
+unionType = TypeExpressionUnion
+
+-- | Create an optional type expression
+-- Example: optionalType (identType "string")
+optionalType :: TypeExpression -> TypeExpression
+optionalType = TypeExpressionOptional
+
+-- | Create a parameterized type expression
+-- Example: paramType (identType "Array") [identType "string"]
+paramType :: TypeExpression -> [TypeExpression] -> TypeExpression
+paramType base args = TypeExpressionParameterized $
+  ParameterizedTypeExpression base args
+
+-- | The 'any' type
+anyType :: TypeExpression
+anyType = TypeExpressionAny
+
+-- | The 'void' type
+voidType :: TypeExpression
+voidType = TypeExpressionVoid
+
+-- | The 'never' type
+neverType :: TypeExpression
+neverType = TypeExpressionNever
+
+
+-- * Comments and Documentation
+
+-- | Create a line comment
+-- Example: lineComment "This is a comment"
+lineComment :: String -> Comment
+lineComment = CommentLine
+
+-- | Create a block comment
+-- Example: blockComment "This is a\nmultiline comment"
+blockComment :: String -> Comment
+blockComment = CommentBlock
+
+-- | Create a documentation comment
+-- Example: docComment "Description of the function" [paramTag "x" (Just (identType "number")) "The input value"]
+docComment :: String -> [DocumentationTag] -> Comment
+docComment desc tags = CommentDocumentation $ DocumentationComment desc tags
+
+-- | Create a @param documentation tag
+-- Example: paramTag "x" (Just (identType "number")) "The input value"
+paramTag :: String -> Maybe TypeExpression -> String -> DocumentationTag
+paramTag name typ desc = DocumentationTag "param" typ (Just $ ident name) desc
+
+-- | Create a @returns documentation tag
+-- Example: returnsTag (Just (identType "number")) "The result"
+returnsTag :: Maybe TypeExpression -> String -> DocumentationTag
+returnsTag typ desc = DocumentationTag "returns" typ Nothing desc
+
+-- | Create a @type documentation tag
+-- Example: typeTag (identType "number")
+typeTag :: TypeExpression -> DocumentationTag
+typeTag typ = DocumentationTag "type" (Just typ) Nothing ""
diff --git a/src/main/haskell/Hydra/Typescript/Serde.hs b/src/main/haskell/Hydra/Typescript/Serde.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Typescript/Serde.hs
@@ -0,0 +1,1083 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | Serialization functions for converting TypeScript AST to abstract expressions
+
+module Hydra.Typescript.Serde where
+
+import qualified Hydra.Core.Ast as Ast
+import qualified Hydra.Core.Coders as Coders
+import qualified Hydra.Core.Constants as Constants
+import qualified Hydra.Core.Diff as Diff
+import qualified Hydra.Core.Docs as Docs
+import qualified Hydra.Core.Error.Checking as Checking
+import qualified Hydra.Core.Error.File as ErrorFile
+import qualified Hydra.Core.Error.Model as ErrorModel
+import qualified Hydra.Core.Error.Packaging as ErrorPackaging
+import qualified Hydra.Core.Error.System as ErrorSystem
+import qualified Hydra.Core.Errors as Errors
+import qualified Hydra.Core.File as File
+import qualified Hydra.Core.Formatting as Formatting
+import qualified Hydra.Core.Graph as Graph
+import qualified Hydra.Core.Json.Model as JsonModel
+import qualified Hydra.Core.Overlay.Haskell.Lib.Equality as Equality
+import qualified Hydra.Core.Overlay.Haskell.Lib.Lists as Lists
+import qualified Hydra.Core.Overlay.Haskell.Lib.Literals as Literals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Logic as Logic
+import qualified Hydra.Core.Overlay.Haskell.Lib.Math as Math
+import qualified Hydra.Core.Overlay.Haskell.Lib.Optionals as Optionals
+import qualified Hydra.Core.Overlay.Haskell.Lib.Ordering as Ordering
+import qualified Hydra.Core.Overlay.Haskell.Lib.Pairs as Pairs
+import qualified Hydra.Core.Overlay.Haskell.Lib.Strings as Strings
+import qualified Hydra.Core.Markdown as Markdown
+import qualified Hydra.Core.Model as Model
+import qualified Hydra.Core.Packaging as Packaging
+import qualified Hydra.Core.Parsing as Parsing
+import qualified Hydra.Core.Paths as Paths
+import qualified Hydra.Core.Query as Query
+import qualified Hydra.Core.Regex as Regex
+import qualified Hydra.Core.Relational as Relational
+import qualified Hydra.Core.Serialization as Serialization
+import qualified Hydra.Core.System as System
+import qualified Hydra.Core.Tabular as Tabular
+import qualified Hydra.Core.Testing as Testing
+import qualified Hydra.Core.Time as Time
+import qualified Hydra.Core.Topology as Topology
+import qualified Hydra.Core.Typed as Typed
+import qualified Hydra.Core.Typing as Typing
+import qualified Hydra.Core.Util as Util
+import qualified Hydra.Core.Validation as Validation
+import qualified Hydra.Core.Variants as Variants
+import qualified Hydra.Typescript.Operators as Operators
+import qualified Hydra.Typescript.Syntax as Syntax
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
+import qualified Data.Scientific as Sci
+import Data.Void
+
+-- | True iff every codepoint is an ASCII digit 0-9, and the list is non-empty
+allDigits :: [Int] -> Bool
+allDigits cps =
+    Logic.and (Ordering.gt (Lists.length cps) 0) (Lists.foldl (\acc -> \c -> Logic.and acc (Logic.and (Ordering.gte c 48) (Ordering.lte c 57))) True cps)
+
+-- | Convert an array element to an AST expression
+arrayElementToExpr :: Syntax.ArrayElement -> Ast.Expr
+arrayElementToExpr elem =
+    case elem of
+      Syntax.ArrayElementExpression v0 -> expressionToExpr v0
+      Syntax.ArrayElementSpread v0 -> Serialization.prefix "..." (expressionToExpr (Syntax.unSpreadElement v0))
+      Syntax.ArrayElementHole -> Serialization.cst ""
+
+-- | Convert an array expression to an AST expression
+arrayExpressionToExpr :: [Syntax.ArrayElement] -> Ast.Expr
+arrayExpressionToExpr arr = Serialization.bracketList Serialization.inlineStyle (Lists.map arrayElementToExpr arr)
+
+-- | Convert an array pattern to an AST expression
+arrayPatternToExpr :: [Maybe Syntax.Pattern] -> Ast.Expr
+arrayPatternToExpr arr =
+    Serialization.bracketList Serialization.inlineStyle (Lists.map (\maybeP -> Optionals.match maybeP (Serialization.cst "") patternToExpr) arr)
+
+-- | Convert an arrow function expression to an AST expression
+arrowFunctionExpressionToExpr :: Syntax.ArrowFunctionExpression -> Ast.Expr
+arrowFunctionExpressionToExpr arrow =
+
+      let params = Syntax.arrowFunctionExpressionParams arrow
+          body = Syntax.arrowFunctionExpressionBody arrow
+          async = Syntax.arrowFunctionExpressionAsync arrow
+          asyncKw = Logic.ifElse async [
+                Serialization.cst "async"] []
+          paramsExpr = Serialization.parenListAdaptive (Lists.map patternToExpr params)
+          bodyExpr =
+                  case body of
+                    Syntax.ArrowFunctionBodyExpression v0 -> case v0 of
+                      Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr v0)
+                      Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr v0)
+                      _ -> expressionToExpr v0
+                    Syntax.ArrowFunctionBodyBlock v0 -> blockStatementToExpr v0
+      in (Serialization.spaceSep (Lists.concat [
+        asyncKw,
+        [
+          Serialization.ifx Operators.arrowOp paramsExpr bodyExpr]]))
+
+-- | Convert an assignment expression to an AST expression
+assignmentExpressionToExpr :: Syntax.AssignmentExpression -> Ast.Expr
+assignmentExpressionToExpr assign =
+
+      let op = Syntax.assignmentExpressionOperator assign
+          left = Syntax.assignmentExpressionLeft assign
+          right = Syntax.assignmentExpressionRight assign
+          opStr = assignmentOperatorToString op
+      in (Serialization.spaceSep [
+        patternToExpr left,
+        (Serialization.cst opStr),
+        (expressionToExpr right)])
+
+-- | Convert an assignment operator to a string
+assignmentOperatorToString :: Syntax.AssignmentOperator -> String
+assignmentOperatorToString op =
+    case op of
+      Syntax.AssignmentOperatorAssign -> "="
+      Syntax.AssignmentOperatorAddAssign -> "+="
+      Syntax.AssignmentOperatorSubtractAssign -> "-="
+      Syntax.AssignmentOperatorMultiplyAssign -> "*="
+      Syntax.AssignmentOperatorDivideAssign -> "/="
+      Syntax.AssignmentOperatorModuloAssign -> "%="
+      Syntax.AssignmentOperatorExponentiateAssign -> "**="
+      Syntax.AssignmentOperatorLeftShiftAssign -> "<<="
+      Syntax.AssignmentOperatorRightShiftAssign -> ">>="
+      Syntax.AssignmentOperatorUnsignedRightShiftAssign -> ">>>="
+      Syntax.AssignmentOperatorBitwiseAndAssign -> "&="
+      Syntax.AssignmentOperatorBitwiseOrAssign -> "|="
+      Syntax.AssignmentOperatorBitwiseXorAssign -> "^="
+      Syntax.AssignmentOperatorAndAssign -> "&&="
+      Syntax.AssignmentOperatorOrAssign -> "||="
+      Syntax.AssignmentOperatorNullishAssign -> "??="
+
+-- | Convert an assignment pattern to an AST expression
+assignmentPatternToExpr :: Syntax.AssignmentPattern -> Ast.Expr
+assignmentPatternToExpr assign =
+
+      let left = Syntax.assignmentPatternLeft assign
+          right = Syntax.assignmentPatternRight assign
+      in (Serialization.ifx Operators.defineOp (patternToExpr left) (expressionToExpr right))
+
+-- | Convert a binary expression to an AST expression
+binaryExpressionToExpr :: Syntax.BinaryExpression -> Ast.Expr
+binaryExpressionToExpr bin =
+
+      let op = Syntax.binaryExpressionOperator bin
+          left = Syntax.binaryExpressionLeft bin
+          right = Syntax.binaryExpressionRight bin
+      in (Serialization.ifx (binaryOperatorToExpr op) (expressionToExpr left) (expressionToExpr right))
+
+-- | Convert a binary operator to an Op
+binaryOperatorToExpr :: Syntax.BinaryOperator -> Ast.Op
+binaryOperatorToExpr op =
+    case op of
+      Syntax.BinaryOperatorAdd -> Operators.addOp
+      Syntax.BinaryOperatorSubtract -> Operators.subtractOp
+      Syntax.BinaryOperatorMultiply -> Operators.multiplyOp
+      Syntax.BinaryOperatorDivide -> Operators.divideOp
+      Syntax.BinaryOperatorModulo -> Operators.moduloOp
+      Syntax.BinaryOperatorExponentiate -> Operators.exponentiateOp
+      Syntax.BinaryOperatorEqual -> Operators.equalOp
+      Syntax.BinaryOperatorNotEqual -> Operators.notEqualOp
+      Syntax.BinaryOperatorStrictEqual -> Operators.strictEqualOp
+      Syntax.BinaryOperatorStrictNotEqual -> Operators.strictNotEqualOp
+      Syntax.BinaryOperatorLessThan -> Operators.lessThanOp
+      Syntax.BinaryOperatorLessThanOrEqual -> Operators.lessThanOrEqualOp
+      Syntax.BinaryOperatorGreaterThan -> Operators.greaterThanOp
+      Syntax.BinaryOperatorGreaterThanOrEqual -> Operators.greaterThanOrEqualOp
+      Syntax.BinaryOperatorAnd -> Operators.logicalAndOp
+      Syntax.BinaryOperatorOr -> Operators.logicalOrOp
+      Syntax.BinaryOperatorNullishCoalescing -> Operators.nullishCoalescingOp
+      Syntax.BinaryOperatorBitwiseAnd -> Operators.bitwiseAndOp
+      Syntax.BinaryOperatorBitwiseOr -> Operators.bitwiseOrOp
+      Syntax.BinaryOperatorBitwiseXor -> Operators.bitwiseXorOp
+      Syntax.BinaryOperatorLeftShift -> Operators.leftShiftOp
+      Syntax.BinaryOperatorRightShift -> Operators.rightShiftOp
+      Syntax.BinaryOperatorUnsignedRightShift -> Operators.unsignedRightShiftOp
+      Syntax.BinaryOperatorIn -> Operators.inOp
+      Syntax.BinaryOperatorInstanceof -> Operators.instanceOfOp
+
+-- | Convert a block statement to an AST expression. Renders as `{ stmt1\n stmt2\n ... }` using curlyBlock + newlineSep: statements are separated by newlines, NOT by commas (which curlyBracesList's default would insert and which TypeScript rejects between block statements).
+blockStatementToExpr :: [Syntax.Statement] -> Ast.Expr
+blockStatementToExpr block =
+    Serialization.curlyBlock Serialization.fullBlockStyle (Serialization.newlineSep (Lists.map statementToExpr block))
+
+-- | Convert a break statement to an AST expression
+breakStatementToExpr :: Maybe Syntax.Identifier -> Ast.Expr
+breakStatementToExpr b =
+    Optionals.match b (Serialization.cst "break;") (\label -> Serialization.suffix ";" (Serialization.spaceSep [
+      Serialization.cst "break",
+      (identifierToExpr label)]))
+
+-- | Convert a call expression to an AST expression
+callExpressionToExpr :: Syntax.CallExpression -> Ast.Expr
+callExpressionToExpr call =
+
+      let callee = Syntax.callExpressionCallee call
+          args = Syntax.callExpressionArguments call
+          optional = Syntax.callExpressionOptional call
+          calleeExpr =
+                  case callee of
+                    Syntax.ExpressionArrow _ -> Serialization.parens (expressionToExpr callee)
+                    Syntax.ExpressionConditional _ -> Serialization.parens (expressionToExpr callee)
+                    Syntax.ExpressionBinary _ -> Serialization.parens (expressionToExpr callee)
+                    Syntax.ExpressionUnary _ -> Serialization.parens (expressionToExpr callee)
+                    Syntax.ExpressionAssignment _ -> Serialization.parens (expressionToExpr callee)
+                    Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr callee)
+                    Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr callee)
+                    Syntax.ExpressionFunction _ -> Serialization.parens (expressionToExpr callee)
+                    _ -> expressionToExpr callee
+          argsExpr = Serialization.parenListAdaptive (Lists.map expressionToExpr args)
+          optionalDot = Logic.ifElse optional "?." ""
+      in (Serialization.spaceSep [
+        calleeExpr,
+        (Serialization.cst optionalDot),
+        argsExpr])
+
+-- | Convert a catch clause to an AST expression
+catchClauseToExpr :: Syntax.CatchClause -> Ast.Expr
+catchClauseToExpr c =
+
+      let param = Syntax.catchClauseParam c
+          body = Syntax.catchClauseBody c
+          catchKw =
+                  Optionals.match param (Serialization.cst "catch") (\p -> Serialization.spaceSep [
+                    Serialization.cst "catch",
+                    (Serialization.parens (patternToExpr p))])
+      in (Serialization.spaceSep [
+        catchKw,
+        (blockStatementToExpr body)])
+
+-- | Convert a class declaration to an AST expression
+classDeclarationToExpr :: Syntax.ClassDeclaration -> Ast.Expr
+classDeclarationToExpr cls =
+
+      let id = Syntax.classDeclarationId cls
+          superClass = Syntax.classDeclarationSuperClass cls
+          body = Syntax.classDeclarationBody cls
+          extendsClause =
+                  Optionals.match superClass [] (\s -> [
+                    Serialization.cst "extends",
+                    (expressionToExpr s)])
+          bodyExpr =
+                  Serialization.curlyBlock Serialization.fullBlockStyle (Serialization.newlineSep (Lists.map methodDefinitionToExpr body))
+      in (Serialization.spaceSep (Lists.concat [
+        [
+          Serialization.cst "class",
+          (identifierToExpr id)],
+        extendsClause,
+        [
+          bodyExpr]]))
+
+-- | Convert a class declaration with comments to an AST expression
+classDeclarationWithCommentsToExpr :: Syntax.ClassDeclarationWithComments -> Ast.Expr
+classDeclarationWithCommentsToExpr cdwc =
+
+      let body = Syntax.classDeclarationWithCommentsBody cdwc
+          mc = Syntax.classDeclarationWithCommentsComments cdwc
+      in (Optionals.match mc (classDeclarationToExpr body) (\c -> Serialization.newlineSep [
+        documentationCommentToExpr c,
+        (classDeclarationToExpr body)]))
+
+-- | Convert a conditional expression to an AST expression
+conditionalExpressionToExpr :: Syntax.ConditionalExpression -> Ast.Expr
+conditionalExpressionToExpr cond =
+
+      let test = Syntax.conditionalExpressionTest cond
+          consequent = Syntax.conditionalExpressionConsequent cond
+          alternate = Syntax.conditionalExpressionAlternate cond
+          consExpr =
+                  case consequent of
+                    Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr consequent)
+                    Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr consequent)
+                    _ -> expressionToExpr consequent
+          altExpr =
+                  case alternate of
+                    Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr alternate)
+                    Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr alternate)
+                    _ -> expressionToExpr alternate
+      in (Serialization.spaceSep [
+        expressionToExpr test,
+        (Serialization.cst "?"),
+        consExpr,
+        (Serialization.cst ":"),
+        altExpr])
+
+-- | Convert a continue statement to an AST expression
+continueStatementToExpr :: Maybe Syntax.Identifier -> Ast.Expr
+continueStatementToExpr c =
+    Optionals.match c (Serialization.cst "continue;") (\label -> Serialization.suffix ";" (Serialization.spaceSep [
+      Serialization.cst "continue",
+      (identifierToExpr label)]))
+
+-- | Convert a do-while statement to an AST expression
+doWhileStatementToExpr :: Syntax.DoWhileStatement -> Ast.Expr
+doWhileStatementToExpr d =
+
+      let body = Syntax.doWhileStatementBody d
+          test = Syntax.doWhileStatementTest d
+      in (Serialization.suffix ";" (Serialization.spaceSep [
+        Serialization.cst "do",
+        (statementToExpr body),
+        (Serialization.cst "while"),
+        (Serialization.parens (expressionToExpr test))]))
+
+-- | Convert a documentation comment to an AST expression
+documentationCommentToExpr :: Syntax.DocumentationComment -> Ast.Expr
+documentationCommentToExpr doc =
+
+      let description = Syntax.documentationCommentDescription doc
+          tags = Syntax.documentationCommentTags doc
+      in (Serialization.cst (toTypeScriptComments description tags))
+
+-- | Convert a documentation tag to a JSDoc line. Built by joining non-empty parts with spaces so that absent type/param/description components don't introduce trailing whitespace.
+documentationTagToLine :: Syntax.DocumentationTag -> String
+documentationTagToLine tag =
+
+      let name = Syntax.documentationTagName tag
+          mtype = Syntax.documentationTagType tag
+          mparamName = Syntax.documentationTagParamName tag
+          description = Syntax.documentationTagDescription tag
+          typePart =
+                  Optionals.match mtype "" (\t -> Strings.concat [
+                    "{",
+                    (typeExpressionToString t),
+                    "}"])
+          paramPart = Optionals.match mparamName "" (\p -> Syntax.unIdentifier p)
+          parts =
+                  [
+                    Strings.concat2 "@" name,
+                    typePart,
+                    paramPart,
+                    description]
+          nonEmpty = Lists.filter (\p -> Logic.not (Equality.equal p "")) parts
+      in (Strings.concat2 " * " (Strings.join " " nonEmpty))
+
+-- | Escape special characters in a string for TypeScript
+escapeString :: String -> Bool -> String
+escapeString s singleQuote =
+
+      let replace = \old -> \new_ -> \str -> Strings.join new_ (Strings.splitOn old str)
+          s1 = replace "\\" "\\\\" s
+          s2 = replace "\n" "\\n" s1
+          s3 = replace "\r" "\\r" s2
+          s4 = replace "\t" "\\t" s3
+      in (Logic.ifElse singleQuote (replace "'" "\\'" s4) (replace "\"" "\\\"" s4))
+
+-- | Convert an export all declaration to an AST expression
+exportAllToExpr :: Syntax.ExportAllDeclaration -> Ast.Expr
+exportAllToExpr a =
+
+      let exported = Syntax.exportAllDeclarationExported a
+          source = Syntax.exportAllDeclarationSource a
+          exportedClause =
+                  Optionals.match exported (Serialization.cst "*") (\e -> Serialization.spaceSep [
+                    Serialization.cst "*",
+                    (Serialization.cst "as"),
+                    (identifierToExpr e)])
+      in (Serialization.suffix ";" (Serialization.spaceSep [
+        Serialization.cst "export",
+        exportedClause,
+        (Serialization.cst "from"),
+        (stringLiteralToExpr source)]))
+
+-- | Convert an export declaration to an AST expression
+exportDeclarationToExpr :: Syntax.ExportDeclaration -> Ast.Expr
+exportDeclarationToExpr exp =
+    case exp of
+      Syntax.ExportDeclarationNamed v0 -> namedExportToExpr v0
+      Syntax.ExportDeclarationDefault v0 -> Serialization.suffix ";" (Serialization.spaceSep [
+        Serialization.cst "export",
+        (Serialization.cst "default"),
+        (expressionToExpr v0)])
+      Syntax.ExportDeclarationDeclaration v0 -> Serialization.spaceSep [
+        Serialization.cst "export",
+        (statementToExpr v0)]
+      Syntax.ExportDeclarationAll v0 -> exportAllToExpr v0
+
+-- | Convert an export specifier to an AST expression
+exportSpecifierToExpr :: Syntax.ExportSpecifier -> Ast.Expr
+exportSpecifierToExpr spec =
+
+      let local = Syntax.exportSpecifierLocal spec
+          exported = Syntax.exportSpecifierExported spec
+      in (Logic.ifElse (Equality.equal (Syntax.unIdentifier local) (Syntax.unIdentifier exported)) (identifierToExpr local) (Serialization.spaceSep [
+        identifierToExpr local,
+        (Serialization.cst "as"),
+        (identifierToExpr exported)]))
+
+-- | Convert a TypeScript expression to an AST expression
+expressionToExpr :: Syntax.Expression -> Ast.Expr
+expressionToExpr expr =
+    case expr of
+      Syntax.ExpressionIdentifier v0 -> identifierToExpr v0
+      Syntax.ExpressionLiteral v0 -> literalToExpr v0
+      Syntax.ExpressionArray v0 -> arrayExpressionToExpr v0
+      Syntax.ExpressionObject v0 -> objectExpressionToExpr v0
+      Syntax.ExpressionFunction v0 -> functionExpressionToExpr v0
+      Syntax.ExpressionArrow v0 -> arrowFunctionExpressionToExpr v0
+      Syntax.ExpressionCall v0 -> callExpressionToExpr v0
+      Syntax.ExpressionMember v0 -> memberExpressionToExpr v0
+      Syntax.ExpressionConditional v0 -> conditionalExpressionToExpr v0
+      Syntax.ExpressionBinary v0 -> binaryExpressionToExpr v0
+      Syntax.ExpressionUnary v0 -> unaryExpressionToExpr v0
+      Syntax.ExpressionAssignment v0 -> assignmentExpressionToExpr v0
+      Syntax.ExpressionSequence v0 -> Serialization.parenListAdaptive (Lists.map expressionToExpr v0)
+      Syntax.ExpressionThis -> Serialization.cst "this"
+      Syntax.ExpressionNew v0 -> Serialization.spaceSep [
+        Serialization.cst "new",
+        (callExpressionToExpr v0)]
+      Syntax.ExpressionYield v0 -> Optionals.match v0 (Serialization.cst "yield") (\e -> Serialization.spaceSep [
+        Serialization.cst "yield",
+        (expressionToExpr e)])
+      Syntax.ExpressionAwait v0 -> Serialization.spaceSep [
+        Serialization.cst "await",
+        (expressionToExpr v0)]
+      Syntax.ExpressionSpread v0 -> Serialization.prefix "..." (expressionToExpr (Syntax.unSpreadElement v0))
+      Syntax.ExpressionParenthesized v0 -> Serialization.parens (expressionToExpr v0)
+      Syntax.ExpressionAsExpression v0 ->
+        let innerE = Syntax.asExpressionExpression v0
+            typ = Syntax.asExpressionType v0
+        in (Serialization.parens (Serialization.spaceSep [
+          expressionToExpr innerE,
+          (Serialization.cst "as"),
+          (Serialization.cst (tsTypeExpressionToString typ))]))
+
+-- | Convert a for-in statement to an AST expression
+forInStatementToExpr :: Syntax.ForInStatement -> Ast.Expr
+forInStatementToExpr f =
+
+      let left = Syntax.forInStatementLeft f
+          right = Syntax.forInStatementRight f
+          body = Syntax.forInStatementBody f
+          leftExpr =
+                  case left of
+                    Syntax.ForInLeftVariable v0 -> variableDeclarationToExpr v0
+                    Syntax.ForInLeftPattern v0 -> patternToExpr v0
+      in (Serialization.spaceSep [
+        Serialization.cst "for",
+        (Serialization.parens (Serialization.spaceSep [
+          leftExpr,
+          (Serialization.cst "in"),
+          (expressionToExpr right)])),
+        (statementToExpr body)])
+
+-- | Convert a for-of statement to an AST expression
+forOfStatementToExpr :: Syntax.ForOfStatement -> Ast.Expr
+forOfStatementToExpr f =
+
+      let await = Syntax.forOfStatementAwait f
+          left = Syntax.forOfStatementLeft f
+          right = Syntax.forOfStatementRight f
+          body = Syntax.forOfStatementBody f
+          forKw = Logic.ifElse await (Serialization.cst "for await") (Serialization.cst "for")
+          leftExpr =
+                  case left of
+                    Syntax.ForInLeftVariable v0 -> variableDeclarationToExpr v0
+                    Syntax.ForInLeftPattern v0 -> patternToExpr v0
+      in (Serialization.spaceSep [
+        forKw,
+        (Serialization.parens (Serialization.spaceSep [
+          leftExpr,
+          (Serialization.cst "of"),
+          (expressionToExpr right)])),
+        (statementToExpr body)])
+
+-- | Convert a for statement to an AST expression
+forStatementToExpr :: Syntax.ForStatement -> Ast.Expr
+forStatementToExpr f =
+
+      let init = Syntax.forStatementInit f
+          test = Syntax.forStatementTest f
+          update = Syntax.forStatementUpdate f
+          body = Syntax.forStatementBody f
+          initExpr =
+                  Optionals.match init (Serialization.cst "") (\i -> case i of
+                    Syntax.ForInitVariable v0 -> variableDeclarationToExpr v0
+                    Syntax.ForInitExpression v0 -> expressionToExpr v0)
+          testExpr = Optionals.match test (Serialization.cst "") expressionToExpr
+          updateExpr = Optionals.match update (Serialization.cst "") expressionToExpr
+      in (Serialization.spaceSep [
+        Serialization.cst "for",
+        (Serialization.parenListAdaptive [
+          initExpr,
+          testExpr,
+          updateExpr]),
+        (statementToExpr body)])
+
+-- | Format import specifiers, handling default vs named imports
+formatImportSpecifiers :: [Ast.Expr] -> Ast.Expr
+formatImportSpecifiers specs = Serialization.curlyBracesList Nothing Serialization.inlineStyle specs
+
+-- | Convert a function declaration to an AST expression
+functionDeclarationToExpr :: Syntax.FunctionDeclaration -> Ast.Expr
+functionDeclarationToExpr fn =
+
+      let id = Syntax.functionDeclarationId fn
+          params = Syntax.functionDeclarationParams fn
+          body = Syntax.functionDeclarationBody fn
+          async = Syntax.functionDeclarationAsync fn
+          generator = Syntax.functionDeclarationGenerator fn
+          asyncKw = Logic.ifElse async [
+                Serialization.cst "async"] []
+          funcKw = Logic.ifElse generator (Serialization.cst "function*") (Serialization.cst "function")
+          paramsExpr = Serialization.parenListAdaptive (Lists.map patternToExpr params)
+          retAnnot = Serialization.cst ": any"
+      in (Serialization.spaceSep (Lists.concat [
+        asyncKw,
+        [
+          funcKw,
+          (identifierToExpr id),
+          paramsExpr,
+          retAnnot,
+          (blockStatementToExpr body)]]))
+
+-- | Convert a function declaration with comments to an AST expression
+functionDeclarationWithCommentsToExpr :: Syntax.FunctionDeclarationWithComments -> Ast.Expr
+functionDeclarationWithCommentsToExpr fdwc =
+
+      let body = Syntax.functionDeclarationWithCommentsBody fdwc
+          mc = Syntax.functionDeclarationWithCommentsComments fdwc
+      in (Optionals.match mc (functionDeclarationToExpr body) (\c -> Serialization.newlineSep [
+        documentationCommentToExpr c,
+        (functionDeclarationToExpr body)]))
+
+-- | Convert a function expression to an AST expression
+functionExpressionToExpr :: Syntax.FunctionExpression -> Ast.Expr
+functionExpressionToExpr fn =
+
+      let mid = Syntax.functionExpressionId fn
+          params = Syntax.functionExpressionParams fn
+          body = Syntax.functionExpressionBody fn
+          async = Syntax.functionExpressionAsync fn
+          generator = Syntax.functionExpressionGenerator fn
+          asyncKw = Logic.ifElse async [
+                Serialization.cst "async"] []
+          funcKw = Logic.ifElse generator (Serialization.cst "function*") (Serialization.cst "function")
+          nameExpr = Optionals.match mid [] (\id -> [
+                identifierToExpr id])
+          paramsExpr = Serialization.parenListAdaptive (Lists.map patternToExpr params)
+      in (Serialization.spaceSep (Lists.concat [
+        asyncKw,
+        [
+          funcKw],
+        nameExpr,
+        [
+          paramsExpr,
+          (blockStatementToExpr body)]]))
+
+-- | Convert an identifier to an AST expression
+identifierToExpr :: Syntax.Identifier -> Ast.Expr
+identifierToExpr id = Serialization.cst (Syntax.unIdentifier id)
+
+-- | Convert an if statement to an AST expression
+ifStatementToExpr :: Syntax.IfStatement -> Ast.Expr
+ifStatementToExpr ifStmt =
+
+      let test = Syntax.ifStatementTest ifStmt
+          consequent = Syntax.ifStatementConsequent ifStmt
+          alternate = Syntax.ifStatementAlternate ifStmt
+          ifPart =
+                  Serialization.spaceSep [
+                    Serialization.cst "if",
+                    (Serialization.parens (expressionToExpr test)),
+                    (statementToExpr consequent)]
+      in (Optionals.match alternate ifPart (\alt -> Serialization.spaceSep [
+        ifPart,
+        (Serialization.cst "else"),
+        (statementToExpr alt)]))
+
+-- | Convert an import declaration to an AST expression
+importDeclarationToExpr :: Syntax.ImportDeclaration -> Ast.Expr
+importDeclarationToExpr imp =
+
+      let specifiers = Syntax.importDeclarationSpecifiers imp
+          source = Syntax.importDeclarationSource imp
+          sourceExpr = stringLiteralToExpr source
+          specExprs = Lists.map importSpecifierToExpr specifiers
+      in (Logic.ifElse (Lists.isEmpty specifiers) (Serialization.suffix ";" (Serialization.spaceSep [
+        Serialization.cst "import",
+        sourceExpr])) (Serialization.suffix ";" (Serialization.spaceSep [
+        Serialization.cst "import",
+        (formatImportSpecifiers specExprs),
+        (Serialization.cst "from"),
+        sourceExpr])))
+
+-- | Convert an import specifier to an AST expression
+importSpecifierToExpr :: Syntax.ImportClause -> Ast.Expr
+importSpecifierToExpr spec =
+    case spec of
+      Syntax.ImportClauseNamed v0 ->
+        let imported = Syntax.importSpecifierImported v0
+            local = Syntax.importSpecifierLocal v0
+        in (Logic.ifElse (Equality.equal (Syntax.unIdentifier imported) (Syntax.unIdentifier local)) (identifierToExpr local) (Serialization.spaceSep [
+          identifierToExpr imported,
+          (Serialization.cst "as"),
+          (identifierToExpr local)]))
+      Syntax.ImportClauseDefault v0 -> identifierToExpr (Syntax.unImportDefaultSpecifier v0)
+      Syntax.ImportClauseNamespace v0 -> Serialization.spaceSep [
+        Serialization.cst "*",
+        (Serialization.cst "as"),
+        (identifierToExpr (Syntax.unImportNamespaceSpecifier v0))]
+
+-- | Detect a kernel-synthesized type-variable name like T0 or T12, which is unbound in inline type annotations
+isKernelTypeVarName :: String -> Bool
+isKernelTypeVarName s =
+
+      let cps = Strings.toList s
+          len = Lists.length cps
+          first = Optionals.withDefault 0 (Lists.head cps)
+          rest = Logic.ifElse (Ordering.gt len 0) (Lists.drop 1 cps) []
+      in (Logic.and (Ordering.gt len 1) (Logic.and (Equality.equal first 84) (allDigits rest)))
+
+-- | Convert a labeled statement to an AST expression
+labeledStatementToExpr :: Syntax.LabeledStatement -> Ast.Expr
+labeledStatementToExpr l =
+
+      let label = Syntax.labeledStatementLabel l
+          body = Syntax.labeledStatementBody l
+      in (Serialization.spaceSep [
+        Serialization.suffix ":" (identifierToExpr label),
+        (statementToExpr body)])
+
+-- | Convert a literal to an AST expression
+literalToExpr :: Syntax.Literal -> Ast.Expr
+literalToExpr lit =
+    case lit of
+      Syntax.LiteralString v0 -> stringLiteralToExpr v0
+      Syntax.LiteralNumber v0 -> numericLiteralToExpr v0
+      Syntax.LiteralBoolean v0 -> Serialization.cst (Logic.ifElse v0 "true" "false")
+      Syntax.LiteralNull -> Serialization.cst "null"
+      Syntax.LiteralUndefined -> Serialization.cst "undefined"
+      Syntax.LiteralBigInt v0 -> Serialization.cst (Strings.concat2 (Literals.printBigint v0) "n")
+      Syntax.LiteralTemplate v0 -> templateLiteralToExpr v0
+
+-- | Convert a member expression to an AST expression
+memberExpressionToExpr :: Syntax.MemberExpression -> Ast.Expr
+memberExpressionToExpr mem =
+
+      let obj = Syntax.memberExpressionObject mem
+          prop = Syntax.memberExpressionProperty mem
+          computed = Syntax.memberExpressionComputed mem
+          optional = Syntax.memberExpressionOptional mem
+          objExpr =
+                  case obj of
+                    Syntax.ExpressionArrow _ -> Serialization.parens (expressionToExpr obj)
+                    Syntax.ExpressionConditional _ -> Serialization.parens (expressionToExpr obj)
+                    Syntax.ExpressionBinary _ -> Serialization.parens (expressionToExpr obj)
+                    Syntax.ExpressionUnary _ -> Serialization.parens (expressionToExpr obj)
+                    Syntax.ExpressionAssignment _ -> Serialization.parens (expressionToExpr obj)
+                    Syntax.ExpressionSequence _ -> Serialization.parens (expressionToExpr obj)
+                    Syntax.ExpressionObject _ -> Serialization.parens (expressionToExpr obj)
+                    Syntax.ExpressionFunction _ -> Serialization.parens (expressionToExpr obj)
+                    _ -> expressionToExpr obj
+          propExpr = expressionToExpr prop
+      in (Logic.ifElse computed (Serialization.spaceSep [
+        objExpr,
+        (Logic.ifElse optional (Serialization.cst "?.") (Serialization.cst "")),
+        (Serialization.brackets Serialization.squareBrackets Serialization.inlineStyle propExpr)]) (Serialization.ifx (Logic.ifElse optional Operators.optionalChainOp Operators.memberOp) objExpr propExpr))
+
+-- | Convert a method definition to an AST expression
+methodDefinitionToExpr :: Syntax.MethodDefinition -> Ast.Expr
+methodDefinitionToExpr method =
+
+      let key = Syntax.methodDefinitionKey method
+          value = Syntax.methodDefinitionValue method
+          kind = Syntax.methodDefinitionKind method
+          computed = Syntax.methodDefinitionComputed method
+          static = Syntax.methodDefinitionStatic method
+          staticKw = Logic.ifElse static [
+                Serialization.cst "static"] []
+          kindKw =
+                  case kind of
+                    Syntax.MethodKindConstructor -> []
+                    Syntax.MethodKindMethod -> []
+                    Syntax.MethodKindGet -> [
+                      Serialization.cst "get"]
+                    Syntax.MethodKindSet -> [
+                      Serialization.cst "set"]
+          keyExpr =
+                  Logic.ifElse computed (Serialization.brackets Serialization.squareBrackets Serialization.inlineStyle (expressionToExpr key)) (expressionToExpr key)
+          params = Syntax.functionExpressionParams value
+          body = Syntax.functionExpressionBody value
+          paramsExpr = Serialization.parenListAdaptive (Lists.map patternToExpr params)
+      in (Serialization.spaceSep (Lists.concat [
+        staticKw,
+        kindKw,
+        [
+          keyExpr,
+          paramsExpr,
+          (blockStatementToExpr body)]]))
+
+-- | Convert a module item to an AST expression
+moduleItemToExpr :: Syntax.ModuleItem -> Ast.Expr
+moduleItemToExpr item =
+    case item of
+      Syntax.ModuleItemStatement v0 -> statementToExpr v0
+      Syntax.ModuleItemImport v0 -> importDeclarationToExpr v0
+      Syntax.ModuleItemExport v0 -> exportDeclarationToExpr v0
+
+-- | Convert a module item with comments to an AST expression
+moduleItemWithCommentsToExpr :: Syntax.ModuleItemWithComments -> Ast.Expr
+moduleItemWithCommentsToExpr miwc =
+
+      let body = Syntax.moduleItemWithCommentsBody miwc
+          mc = Syntax.moduleItemWithCommentsComments miwc
+      in (Optionals.match mc (moduleItemToExpr body) (\c -> Serialization.newlineSep [
+        documentationCommentToExpr c,
+        (moduleItemToExpr body)]))
+
+-- | Convert a named export to an AST expression
+namedExportToExpr :: Syntax.NamedExport -> Ast.Expr
+namedExportToExpr n =
+
+      let specifiers = Syntax.namedExportSpecifiers n
+          source = Syntax.namedExportSource n
+          specExprs = Lists.map exportSpecifierToExpr specifiers
+          fromClause =
+                  Optionals.match source [] (\s -> [
+                    Serialization.cst "from",
+                    (stringLiteralToExpr s)])
+      in (Serialization.suffix ";" (Serialization.spaceSep (Lists.concat [
+        [
+          Serialization.cst "export"],
+        [
+          Serialization.curlyBracesList Nothing Serialization.inlineStyle specExprs],
+        fromClause])))
+
+-- | Convert a numeric literal to an AST expression
+numericLiteralToExpr :: Syntax.NumericLiteral -> Ast.Expr
+numericLiteralToExpr n =
+    case n of
+      Syntax.NumericLiteralInteger v0 -> Serialization.cst (Literals.printInt64 v0)
+      Syntax.NumericLiteralFloat v0 -> Serialization.cst (Literals.printFloat64 v0)
+
+-- | Convert an object expression to an AST expression
+objectExpressionToExpr :: [Syntax.Property] -> Ast.Expr
+objectExpressionToExpr obj =
+    Serialization.curlyBracesList Nothing Serialization.halfBlockStyle (Lists.map propertyToExpr obj)
+
+-- | Convert an object pattern property to an AST expression
+objectPatternPropertyToExpr :: Syntax.ObjectPatternProperty -> Ast.Expr
+objectPatternPropertyToExpr prop =
+    case prop of
+      Syntax.ObjectPatternPropertyProperty v0 -> propertyToExpr v0
+      Syntax.ObjectPatternPropertyRest v0 -> Serialization.prefix "..." (patternToExpr (Syntax.unRestElement v0))
+
+-- | Convert an object pattern to an AST expression
+objectPatternToExpr :: Syntax.ObjectPattern -> Ast.Expr
+objectPatternToExpr obj =
+
+      let props = Syntax.objectPatternProperties obj
+      in (Serialization.curlyBracesList Nothing Serialization.inlineStyle (Lists.map objectPatternPropertyToExpr props))
+
+-- | Convert a pattern to an AST expression
+patternToExpr :: Syntax.Pattern -> Ast.Expr
+patternToExpr pat =
+    case pat of
+      Syntax.PatternIdentifier v0 -> identifierToExpr v0
+      Syntax.PatternObject v0 -> objectPatternToExpr v0
+      Syntax.PatternArray v0 -> arrayPatternToExpr v0
+      Syntax.PatternAssignment v0 -> assignmentPatternToExpr v0
+      Syntax.PatternRest v0 -> Serialization.prefix "..." (patternToExpr (Syntax.unRestElement v0))
+      Syntax.PatternTyped v0 -> typedPatternToExpr v0
+
+-- | Render a TS.Pattern as a plain string
+patternToString :: Syntax.Pattern -> String
+patternToString pat =
+    case pat of
+      Syntax.PatternIdentifier v0 -> Syntax.unIdentifier v0
+      Syntax.PatternRest v0 -> Strings.concat2 "..." (patternToString (Syntax.unRestElement v0))
+      Syntax.PatternTyped v0 -> Strings.concat [
+        patternToString (Syntax.typedPatternPattern v0),
+        ": ",
+        (tsTypeExpressionToString (Syntax.typedPatternType v0))]
+      _ -> "_"
+
+-- | Convert a TypeScript program to an AST expression
+programToExpr :: Syntax.Program -> Ast.Expr
+programToExpr prog =
+
+      let body = Syntax.programBody prog
+          warning = [
+                Serialization.cst (toLineComment Constants.warningAutoGeneratedFile)]
+          items = Lists.map moduleItemToExpr body
+      in (Serialization.doubleNewlineSep (Lists.concat [
+        warning,
+        items]))
+
+-- | Convert an object property to an AST expression
+propertyToExpr :: Syntax.Property -> Ast.Expr
+propertyToExpr prop =
+
+      let key = Syntax.propertyKey prop
+          value = Syntax.propertyValue prop
+          shorthand = Syntax.propertyShorthand prop
+          computed = Syntax.propertyComputed prop
+          keyExpr =
+                  Logic.ifElse computed (Serialization.brackets Serialization.squareBrackets Serialization.inlineStyle (expressionToExpr key)) (expressionToExpr key)
+      in (Logic.ifElse shorthand keyExpr (Serialization.ifx Operators.colonOp keyExpr (expressionToExpr value)))
+
+-- | Convert a return statement to an AST expression
+returnStatementToExpr :: Maybe Syntax.Expression -> Ast.Expr
+returnStatementToExpr r =
+    Optionals.match r (Serialization.cst "return;") (\e -> Serialization.suffix ";" (Serialization.spaceSep [
+      Serialization.cst "return",
+      (expressionToExpr e)]))
+
+-- | Convert a statement to an AST expression
+statementToExpr :: Syntax.Statement -> Ast.Expr
+statementToExpr stmt =
+    case stmt of
+      Syntax.StatementExpression v0 -> Serialization.suffix ";" (expressionToExpr v0)
+      Syntax.StatementBlock v0 -> blockStatementToExpr v0
+      Syntax.StatementEmpty -> Serialization.cst ";"
+      Syntax.StatementDebugger -> Serialization.cst "debugger;"
+      Syntax.StatementReturn v0 -> returnStatementToExpr v0
+      Syntax.StatementBreak v0 -> breakStatementToExpr v0
+      Syntax.StatementContinue v0 -> continueStatementToExpr v0
+      Syntax.StatementIf v0 -> ifStatementToExpr v0
+      Syntax.StatementSwitch v0 -> switchStatementToExpr v0
+      Syntax.StatementThrow v0 -> throwStatementToExpr v0
+      Syntax.StatementTry v0 -> tryStatementToExpr v0
+      Syntax.StatementWhile v0 -> whileStatementToExpr v0
+      Syntax.StatementDoWhile v0 -> doWhileStatementToExpr v0
+      Syntax.StatementFor v0 -> forStatementToExpr v0
+      Syntax.StatementForIn v0 -> forInStatementToExpr v0
+      Syntax.StatementForOf v0 -> forOfStatementToExpr v0
+      Syntax.StatementVariableDeclaration v0 -> variableDeclarationToExpr v0
+      Syntax.StatementFunctionDeclaration v0 -> functionDeclarationToExpr v0
+      Syntax.StatementClassDeclaration v0 -> classDeclarationToExpr v0
+      Syntax.StatementLabeled v0 -> labeledStatementToExpr v0
+
+-- | Convert a string literal to an AST expression
+stringLiteralToExpr :: Syntax.StringLiteral -> Ast.Expr
+stringLiteralToExpr s =
+
+      let value = Syntax.stringLiteralValue s
+          singleQuote = Syntax.stringLiteralSingleQuote s
+          quote = Logic.ifElse singleQuote "'" "\""
+          escaped = escapeString value singleQuote
+      in (Serialization.cst (Strings.concat [
+        quote,
+        escaped,
+        quote]))
+
+-- | Convert a switch case to an AST expression
+switchCaseToExpr :: Syntax.SwitchCase -> Ast.Expr
+switchCaseToExpr c =
+
+      let test = Syntax.switchCaseTest c
+          consequent = Syntax.switchCaseConsequent c
+          caseLabel =
+                  Optionals.match test (Serialization.cst "default:") (\t -> Serialization.spaceSep [
+                    Serialization.cst "case",
+                    (expressionToExpr t),
+                    (Serialization.cst ":")])
+      in (Serialization.newlineSep (Lists.cons caseLabel (Lists.map statementToExpr consequent)))
+
+-- | Convert a switch statement to an AST expression
+switchStatementToExpr :: Syntax.SwitchStatement -> Ast.Expr
+switchStatementToExpr switchStmt =
+
+      let discriminant = Syntax.switchStatementDiscriminant switchStmt
+          match = Syntax.switchStatementCases switchStmt
+      in (Serialization.spaceSep [
+        Serialization.cst "switch",
+        (Serialization.parens (expressionToExpr discriminant)),
+        (Serialization.curlyBlock Serialization.fullBlockStyle (Serialization.newlineSep (Lists.map switchCaseToExpr match)))])
+
+-- | Convert a template literal to an AST expression
+templateLiteralToExpr :: Syntax.TemplateLiteral -> Ast.Expr
+templateLiteralToExpr t =
+
+      let quasis = Syntax.templateLiteralQuasis t
+          exprs = Syntax.templateLiteralExpressions t
+      in (Serialization.cst (Strings.concat [
+        "`",
+        (Strings.join "" (Lists.map (\q -> Syntax.templateElementValue q) quasis)),
+        "`"]))
+
+-- | Convert a throw statement to an AST expression
+throwStatementToExpr :: Syntax.ThrowStatement -> Ast.Expr
+throwStatementToExpr t =
+    Serialization.suffix ";" (Serialization.spaceSep [
+      Serialization.cst "throw",
+      (expressionToExpr (Syntax.unThrowStatement t))])
+
+-- | Convert a string to a TypeScript line comment. Empty source lines emit `//` (no trailing space).
+toLineComment :: String -> String
+toLineComment s =
+    Strings.join "\n" (Lists.map (\line -> Logic.ifElse (Equality.equal line "") "//" (Strings.concat2 "// " line)) (Formatting.lines s))
+
+-- | Format a description and tags as a JSDoc comment. Empty doc lines emit ` *` (no trailing space) so blank lines don't carry trailing whitespace.
+toTypeScriptComments :: String -> [Syntax.DocumentationTag] -> String
+toTypeScriptComments desc tags =
+
+      let descLines =
+              Logic.ifElse (Equality.equal desc "") [] (Lists.map (\line -> Logic.ifElse (Equality.equal line "") " *" (Strings.concat2 " * " line)) (Formatting.lines desc))
+          tagLines = Lists.map documentationTagToLine tags
+          allLines =
+                  Lists.concat [
+                    descLines,
+                    tagLines]
+      in (Logic.ifElse (Lists.isEmpty allLines) "" (Strings.join "\n" (Lists.concat [
+        [
+          "/**"],
+        allLines,
+        [
+          " */"]])))
+
+-- | Convert a try statement to an AST expression
+tryStatementToExpr :: Syntax.TryStatement -> Ast.Expr
+tryStatementToExpr t =
+
+      let block = Syntax.tryStatementBlock t
+          handler = Syntax.tryStatementHandler t
+          finalizer = Syntax.tryStatementFinalizer t
+          tryPart =
+                  Serialization.spaceSep [
+                    Serialization.cst "try",
+                    (blockStatementToExpr block)]
+          catchPart = Optionals.match handler [] (\c -> [
+                catchClauseToExpr c])
+          finallyPart =
+                  Optionals.match finalizer [] (\f -> [
+                    Serialization.spaceSep [
+                      Serialization.cst "finally",
+                      (blockStatementToExpr f)]])
+      in (Serialization.spaceSep (Lists.concat [
+        [
+          tryPart],
+        catchPart,
+        finallyPart]))
+
+-- | Render a TypeScript type expression as a string in TS syntax
+tsTypeExpressionToString :: Syntax.TypeExpression -> String
+tsTypeExpressionToString t =
+    case t of
+      Syntax.TypeExpressionIdentifier v0 ->
+        let raw = Syntax.unIdentifier v0
+        in (Logic.ifElse (isKernelTypeVarName raw) "any" raw)
+      Syntax.TypeExpressionAny -> "any"
+      Syntax.TypeExpressionVoid -> "void"
+      Syntax.TypeExpressionNever -> "never"
+      Syntax.TypeExpressionArray v0 -> Strings.concat [
+        "ReadonlyArray<",
+        (tsTypeExpressionToString (Syntax.unArrayTypeExpression v0)),
+        ">"]
+      Syntax.TypeExpressionTuple v0 -> Strings.concat [
+        "readonly [",
+        (Strings.join ", " (Lists.map tsTypeExpressionToString v0)),
+        "]"]
+      Syntax.TypeExpressionUnion v0 -> Strings.join " | " (Lists.map tsTypeExpressionToString v0)
+      Syntax.TypeExpressionIntersection v0 -> Strings.join " & " (Lists.map tsTypeExpressionToString v0)
+      Syntax.TypeExpressionParameterized v0 -> Strings.concat [
+        tsTypeExpressionToString (Syntax.parameterizedTypeExpressionBase v0),
+        "<",
+        (Strings.join ", " (Lists.map tsTypeExpressionToString (Syntax.parameterizedTypeExpressionArguments v0))),
+        ">"]
+      Syntax.TypeExpressionOptional v0 -> Strings.concat [
+        tsTypeExpressionToString v0,
+        " | undefined"]
+      Syntax.TypeExpressionReadonly v0 -> Strings.concat2 "readonly " (tsTypeExpressionToString v0)
+      Syntax.TypeExpressionUnknown -> "unknown"
+      Syntax.TypeExpressionFunction _ -> "((...args: any[]) => any)"
+      _ -> "unknown"
+
+-- | Convert a type expression to a string for JSDoc
+typeExpressionToString :: Syntax.TypeExpression -> String
+typeExpressionToString typ =
+    case typ of
+      Syntax.TypeExpressionIdentifier v0 -> Syntax.unIdentifier v0
+      Syntax.TypeExpressionAny -> "*"
+      Syntax.TypeExpressionVoid -> "void"
+      Syntax.TypeExpressionNever -> "never"
+      Syntax.TypeExpressionLiteral _ -> "literal"
+      Syntax.TypeExpressionArray v0 -> Strings.concat2 (typeExpressionToString (Syntax.unArrayTypeExpression v0)) "[]"
+      Syntax.TypeExpressionFunction v0 ->
+        let params = Syntax.functionTypeExpressionParameters v0
+            rt = Syntax.functionTypeExpressionReturnType v0
+            rendered =
+                    Pairs.second (Lists.foldl (\acc -> \p ->
+                      let i = Pairs.first acc
+                          soFar = Pairs.second acc
+                          this =
+                                  Strings.concat [
+                                    "_a",
+                                    (Literals.printInt32 i),
+                                    ": ",
+                                    (typeExpressionToString p)]
+                      in (Math.add i 1, (Lists.concat2 soFar (Lists.singleton this)))) (0, []) params)
+        in (Strings.concat [
+          "(",
+          (Strings.join ", " rendered),
+          ") => ",
+          (typeExpressionToString rt)])
+      Syntax.TypeExpressionObject _ -> "Object"
+      Syntax.TypeExpressionUnion v0 -> Strings.join "|" (Lists.map typeExpressionToString v0)
+      Syntax.TypeExpressionParameterized v0 ->
+        let base = Syntax.parameterizedTypeExpressionBase v0
+            args = Syntax.parameterizedTypeExpressionArguments v0
+        in (Strings.concat [
+          typeExpressionToString base,
+          "<",
+          (Strings.join ", " (Lists.map typeExpressionToString args)),
+          ">"])
+      Syntax.TypeExpressionOptional v0 -> Strings.concat2 "?" (typeExpressionToString v0)
+
+-- | Render `<pattern>: <type>` (TypeScript parameter / variable type annotation)
+typedPatternToExpr :: Syntax.TypedPattern -> Ast.Expr
+typedPatternToExpr tp =
+
+      let innerPat = Syntax.typedPatternPattern tp
+          typ = Syntax.typedPatternType tp
+          innerStr = patternToString innerPat
+          typeStr = tsTypeExpressionToString typ
+      in (Serialization.cst (Strings.concat [
+        innerStr,
+        ": ",
+        typeStr]))
+
+-- | Convert a unary expression to an AST expression
+unaryExpressionToExpr :: Syntax.UnaryExpression -> Ast.Expr
+unaryExpressionToExpr un =
+
+      let op = Syntax.unaryExpressionOperator un
+          arg = Syntax.unaryExpressionArgument un
+          prefix = Syntax.unaryExpressionPrefix un
+          opStr = unaryOperatorToString op
+          argExpr = expressionToExpr arg
+      in (Logic.ifElse prefix (Serialization.prefix opStr argExpr) (Serialization.suffix opStr argExpr))
+
+-- | Convert a unary operator to a string
+unaryOperatorToString :: Syntax.UnaryOperator -> String
+unaryOperatorToString op =
+    case op of
+      Syntax.UnaryOperatorNegate -> "-"
+      Syntax.UnaryOperatorPlus -> "+"
+      Syntax.UnaryOperatorNot -> "!"
+      Syntax.UnaryOperatorBitwiseNot -> "~"
+      Syntax.UnaryOperatorTypeof -> "typeof "
+      Syntax.UnaryOperatorVoid -> "void "
+      Syntax.UnaryOperatorDelete -> "delete "
+      Syntax.UnaryOperatorIncrement -> "++"
+      Syntax.UnaryOperatorDecrement -> "--"
+
+-- | Convert a variable declaration to an AST expression
+variableDeclarationToExpr :: Syntax.VariableDeclaration -> Ast.Expr
+variableDeclarationToExpr decl =
+
+      let kind = Syntax.variableDeclarationKind decl
+          declarations = Syntax.variableDeclarationDeclarations decl
+      in (Serialization.suffix ";" (Serialization.spaceSep [
+        variableKindToExpr kind,
+        (Serialization.commaSep Serialization.inlineStyle (Lists.map variableDeclaratorToExpr declarations))]))
+
+-- | Convert a variable declarator to an AST expression
+variableDeclaratorToExpr :: Syntax.VariableDeclarator -> Ast.Expr
+variableDeclaratorToExpr decl =
+
+      let id = Syntax.variableDeclaratorId decl
+          init = Syntax.variableDeclaratorInit decl
+      in (Optionals.match init (patternToExpr id) (\e -> Serialization.ifx Operators.defineOp (patternToExpr id) (expressionToExpr e)))
+
+-- | Convert a variable kind to an AST expression
+variableKindToExpr :: Syntax.VariableKind -> Ast.Expr
+variableKindToExpr kind =
+    case kind of
+      Syntax.VariableKindVar -> Serialization.cst "var"
+      Syntax.VariableKindLet -> Serialization.cst "let"
+      Syntax.VariableKindConst -> Serialization.cst "const"
+
+-- | Convert a while statement to an AST expression
+whileStatementToExpr :: Syntax.WhileStatement -> Ast.Expr
+whileStatementToExpr w =
+
+      let test = Syntax.whileStatementTest w
+          body = Syntax.whileStatementBody w
+      in (Serialization.spaceSep [
+        Serialization.cst "while",
+        (Serialization.parens (expressionToExpr test)),
+        (statementToExpr body)])
diff --git a/src/main/haskell/Hydra/Typescript/Syntax.hs b/src/main/haskell/Hydra/Typescript/Syntax.hs
new file mode 100644
--- /dev/null
+++ b/src/main/haskell/Hydra/Typescript/Syntax.hs
@@ -0,0 +1,1730 @@
+-- Note: this is an automatically generated file. Do not edit.
+
+-- | A TypeScript 5.x syntax model for Hydra code generation
+
+module Hydra.Typescript.Syntax where
+
+import qualified Hydra.Core.Model as Model
+import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, lines, map, pure, sum, unlines)
+import qualified Data.Scientific as Sci
+import Data.Void
+import qualified Data.Int as I
+
+-- | An element in an array expression
+data ArrayElement =
+  -- | A regular expression element
+  ArrayElementExpression Expression |
+  -- | A spread element ...x
+  ArrayElementSpread SpreadElement |
+  -- | An empty slot (elision)
+  ArrayElementHole
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayElement = Model.Name "hydra.typescript.syntax.ArrayElement"
+
+_ArrayElement_expression = Model.Name "expression"
+
+_ArrayElement_spread = Model.Name "spread"
+
+_ArrayElement_hole = Model.Name "hole"
+
+-- | An array expression [a, b, c]
+type ArrayExpression = [ArrayElement]
+
+_ArrayExpression = Model.Name "hydra.typescript.syntax.ArrayExpression"
+
+-- | An array destructuring pattern [a, b, c]
+type ArrayPattern = [Maybe Pattern]
+
+_ArrayPattern = Model.Name "hydra.typescript.syntax.ArrayPattern"
+
+-- | An array type (T[])
+newtype ArrayTypeExpression =
+  ArrayTypeExpression {
+    unArrayTypeExpression :: TypeExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrayTypeExpression = Model.Name "hydra.typescript.syntax.ArrayTypeExpression"
+
+-- | The body of an arrow function (expression or block)
+data ArrowFunctionBody =
+  ArrowFunctionBodyExpression Expression |
+  ArrowFunctionBodyBlock BlockStatement
+  deriving (Eq, Ord, Read, Show)
+
+_ArrowFunctionBody = Model.Name "hydra.typescript.syntax.ArrowFunctionBody"
+
+_ArrowFunctionBody_expression = Model.Name "expression"
+
+_ArrowFunctionBody_block = Model.Name "block"
+
+-- | An arrow function expression
+data ArrowFunctionExpression =
+  ArrowFunctionExpression {
+    -- | Function parameters
+    arrowFunctionExpressionParams :: [Pattern],
+    -- | Function body (expression or block)
+    arrowFunctionExpressionBody :: ArrowFunctionBody,
+    -- | Whether the function is async
+    arrowFunctionExpressionAsync :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_ArrowFunctionExpression = Model.Name "hydra.typescript.syntax.ArrowFunctionExpression"
+
+_ArrowFunctionExpression_params = Model.Name "params"
+
+_ArrowFunctionExpression_body = Model.Name "body"
+
+_ArrowFunctionExpression_async = Model.Name "async"
+
+-- | A TypeScript `<expression> as <type>` cast
+data AsExpression =
+  AsExpression {
+    -- | The expression being cast
+    asExpressionExpression :: Expression,
+    -- | The target type
+    asExpressionType :: TypeExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_AsExpression = Model.Name "hydra.typescript.syntax.AsExpression"
+
+_AsExpression_expression = Model.Name "expression"
+
+_AsExpression_type = Model.Name "type"
+
+-- | An assignment expression
+data AssignmentExpression =
+  AssignmentExpression {
+    assignmentExpressionOperator :: AssignmentOperator,
+    assignmentExpressionLeft :: Pattern,
+    assignmentExpressionRight :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_AssignmentExpression = Model.Name "hydra.typescript.syntax.AssignmentExpression"
+
+_AssignmentExpression_operator = Model.Name "operator"
+
+_AssignmentExpression_left = Model.Name "left"
+
+_AssignmentExpression_right = Model.Name "right"
+
+-- | An assignment operator
+data AssignmentOperator =
+  -- | =
+  AssignmentOperatorAssign |
+  -- | +=
+  AssignmentOperatorAddAssign |
+  -- | -=
+  AssignmentOperatorSubtractAssign |
+  -- | *=
+  AssignmentOperatorMultiplyAssign |
+  -- | /=
+  AssignmentOperatorDivideAssign |
+  -- | %=
+  AssignmentOperatorModuloAssign |
+  -- | **=
+  AssignmentOperatorExponentiateAssign |
+  -- | <<=
+  AssignmentOperatorLeftShiftAssign |
+  -- | >>=
+  AssignmentOperatorRightShiftAssign |
+  -- | >>>=
+  AssignmentOperatorUnsignedRightShiftAssign |
+  -- | &=
+  AssignmentOperatorBitwiseAndAssign |
+  -- | |=
+  AssignmentOperatorBitwiseOrAssign |
+  -- | ^=
+  AssignmentOperatorBitwiseXorAssign |
+  -- | &&=
+  AssignmentOperatorAndAssign |
+  -- | ||=
+  AssignmentOperatorOrAssign |
+  -- | ??=
+  AssignmentOperatorNullishAssign
+  deriving (Eq, Ord, Read, Show)
+
+_AssignmentOperator = Model.Name "hydra.typescript.syntax.AssignmentOperator"
+
+_AssignmentOperator_assign = Model.Name "assign"
+
+_AssignmentOperator_addAssign = Model.Name "addAssign"
+
+_AssignmentOperator_subtractAssign = Model.Name "subtractAssign"
+
+_AssignmentOperator_multiplyAssign = Model.Name "multiplyAssign"
+
+_AssignmentOperator_divideAssign = Model.Name "divideAssign"
+
+_AssignmentOperator_moduloAssign = Model.Name "moduloAssign"
+
+_AssignmentOperator_exponentiateAssign = Model.Name "exponentiateAssign"
+
+_AssignmentOperator_leftShiftAssign = Model.Name "leftShiftAssign"
+
+_AssignmentOperator_rightShiftAssign = Model.Name "rightShiftAssign"
+
+_AssignmentOperator_unsignedRightShiftAssign = Model.Name "unsignedRightShiftAssign"
+
+_AssignmentOperator_bitwiseAndAssign = Model.Name "bitwiseAndAssign"
+
+_AssignmentOperator_bitwiseOrAssign = Model.Name "bitwiseOrAssign"
+
+_AssignmentOperator_bitwiseXorAssign = Model.Name "bitwiseXorAssign"
+
+_AssignmentOperator_andAssign = Model.Name "andAssign"
+
+_AssignmentOperator_orAssign = Model.Name "orAssign"
+
+_AssignmentOperator_nullishAssign = Model.Name "nullishAssign"
+
+-- | A pattern with default value (param = default)
+data AssignmentPattern =
+  AssignmentPattern {
+    assignmentPatternLeft :: Pattern,
+    assignmentPatternRight :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_AssignmentPattern = Model.Name "hydra.typescript.syntax.AssignmentPattern"
+
+_AssignmentPattern_left = Model.Name "left"
+
+_AssignmentPattern_right = Model.Name "right"
+
+-- | A binary operation expression
+data BinaryExpression =
+  BinaryExpression {
+    binaryExpressionOperator :: BinaryOperator,
+    binaryExpressionLeft :: Expression,
+    binaryExpressionRight :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_BinaryExpression = Model.Name "hydra.typescript.syntax.BinaryExpression"
+
+_BinaryExpression_operator = Model.Name "operator"
+
+_BinaryExpression_left = Model.Name "left"
+
+_BinaryExpression_right = Model.Name "right"
+
+-- | A binary operator
+data BinaryOperator =
+  -- | +
+  BinaryOperatorAdd |
+  -- | -
+  BinaryOperatorSubtract |
+  -- | *
+  BinaryOperatorMultiply |
+  -- | /
+  BinaryOperatorDivide |
+  -- | %
+  BinaryOperatorModulo |
+  -- | **
+  BinaryOperatorExponentiate |
+  -- | ==
+  BinaryOperatorEqual |
+  -- | !=
+  BinaryOperatorNotEqual |
+  -- | ===
+  BinaryOperatorStrictEqual |
+  -- | !==
+  BinaryOperatorStrictNotEqual |
+  -- | <
+  BinaryOperatorLessThan |
+  -- | <=
+  BinaryOperatorLessThanOrEqual |
+  -- | >
+  BinaryOperatorGreaterThan |
+  -- | >=
+  BinaryOperatorGreaterThanOrEqual |
+  -- | &&
+  BinaryOperatorAnd |
+  -- | ||
+  BinaryOperatorOr |
+  -- | ??
+  BinaryOperatorNullishCoalescing |
+  -- | &
+  BinaryOperatorBitwiseAnd |
+  -- | |
+  BinaryOperatorBitwiseOr |
+  -- | ^
+  BinaryOperatorBitwiseXor |
+  -- | <<
+  BinaryOperatorLeftShift |
+  -- | >>
+  BinaryOperatorRightShift |
+  -- | >>>
+  BinaryOperatorUnsignedRightShift |
+  -- | in
+  BinaryOperatorIn |
+  -- | instanceof
+  BinaryOperatorInstanceof
+  deriving (Eq, Ord, Read, Show)
+
+_BinaryOperator = Model.Name "hydra.typescript.syntax.BinaryOperator"
+
+_BinaryOperator_add = Model.Name "add"
+
+_BinaryOperator_subtract = Model.Name "subtract"
+
+_BinaryOperator_multiply = Model.Name "multiply"
+
+_BinaryOperator_divide = Model.Name "divide"
+
+_BinaryOperator_modulo = Model.Name "modulo"
+
+_BinaryOperator_exponentiate = Model.Name "exponentiate"
+
+_BinaryOperator_equal = Model.Name "equal"
+
+_BinaryOperator_notEqual = Model.Name "notEqual"
+
+_BinaryOperator_strictEqual = Model.Name "strictEqual"
+
+_BinaryOperator_strictNotEqual = Model.Name "strictNotEqual"
+
+_BinaryOperator_lessThan = Model.Name "lessThan"
+
+_BinaryOperator_lessThanOrEqual = Model.Name "lessThanOrEqual"
+
+_BinaryOperator_greaterThan = Model.Name "greaterThan"
+
+_BinaryOperator_greaterThanOrEqual = Model.Name "greaterThanOrEqual"
+
+_BinaryOperator_and = Model.Name "and"
+
+_BinaryOperator_or = Model.Name "or"
+
+_BinaryOperator_nullishCoalescing = Model.Name "nullishCoalescing"
+
+_BinaryOperator_bitwiseAnd = Model.Name "bitwiseAnd"
+
+_BinaryOperator_bitwiseOr = Model.Name "bitwiseOr"
+
+_BinaryOperator_bitwiseXor = Model.Name "bitwiseXor"
+
+_BinaryOperator_leftShift = Model.Name "leftShift"
+
+_BinaryOperator_rightShift = Model.Name "rightShift"
+
+_BinaryOperator_unsignedRightShift = Model.Name "unsignedRightShift"
+
+_BinaryOperator_in = Model.Name "in"
+
+_BinaryOperator_instanceof = Model.Name "instanceof"
+
+-- | A block statement { ... }
+type BlockStatement = [Statement]
+
+_BlockStatement = Model.Name "hydra.typescript.syntax.BlockStatement"
+
+-- | A break statement
+type BreakStatement = (Maybe Identifier)
+
+_BreakStatement = Model.Name "hydra.typescript.syntax.BreakStatement"
+
+-- | A function call expression
+data CallExpression =
+  CallExpression {
+    -- | The function being called
+    callExpressionCallee :: Expression,
+    -- | The arguments
+    callExpressionArguments :: [Expression],
+    -- | Whether using optional chaining (?.)
+    callExpressionOptional :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_CallExpression = Model.Name "hydra.typescript.syntax.CallExpression"
+
+_CallExpression_callee = Model.Name "callee"
+
+_CallExpression_arguments = Model.Name "arguments"
+
+_CallExpression_optional = Model.Name "optional"
+
+-- | A catch clause
+data CatchClause =
+  CatchClause {
+    -- | The catch parameter (can be omitted in ES2019+)
+    catchClauseParam :: (Maybe Pattern),
+    catchClauseBody :: BlockStatement}
+  deriving (Eq, Ord, Read, Show)
+
+_CatchClause = Model.Name "hydra.typescript.syntax.CatchClause"
+
+_CatchClause_param = Model.Name "param"
+
+_CatchClause_body = Model.Name "body"
+
+-- | A class body
+type ClassBody = [MethodDefinition]
+
+_ClassBody = Model.Name "hydra.typescript.syntax.ClassBody"
+
+-- | A class declaration
+data ClassDeclaration =
+  ClassDeclaration {
+    -- | Class name
+    classDeclarationId :: Identifier,
+    -- | Optional superclass
+    classDeclarationSuperClass :: (Maybe Expression),
+    -- | Class body
+    classDeclarationBody :: ClassBody}
+  deriving (Eq, Ord, Read, Show)
+
+_ClassDeclaration = Model.Name "hydra.typescript.syntax.ClassDeclaration"
+
+_ClassDeclaration_id = Model.Name "id"
+
+_ClassDeclaration_superClass = Model.Name "superClass"
+
+_ClassDeclaration_body = Model.Name "body"
+
+-- | A class declaration with optional JSDoc
+data ClassDeclarationWithComments =
+  ClassDeclarationWithComments {
+    -- | The class declaration
+    classDeclarationWithCommentsBody :: ClassDeclaration,
+    -- | Optional JSDoc comment
+    classDeclarationWithCommentsComments :: (Maybe DocumentationComment)}
+  deriving (Eq, Ord, Read, Show)
+
+_ClassDeclarationWithComments = Model.Name "hydra.typescript.syntax.ClassDeclarationWithComments"
+
+_ClassDeclarationWithComments_body = Model.Name "body"
+
+_ClassDeclarationWithComments_comments = Model.Name "comments"
+
+-- | A TypeScript comment
+data Comment =
+  -- | A single-line comment (// ...)
+  CommentLine String |
+  -- | A block comment, delimited by slash-star and star-slash
+  CommentBlock String |
+  -- | A documentation comment, delimited by slash-double-star and star-slash (JSDoc)
+  CommentDocumentation DocumentationComment
+  deriving (Eq, Ord, Read, Show)
+
+_Comment = Model.Name "hydra.typescript.syntax.Comment"
+
+_Comment_line = Model.Name "line"
+
+_Comment_block = Model.Name "block"
+
+_Comment_documentation = Model.Name "documentation"
+
+-- | A conditional (ternary) expression: test ? consequent : alternate
+data ConditionalExpression =
+  ConditionalExpression {
+    conditionalExpressionTest :: Expression,
+    conditionalExpressionConsequent :: Expression,
+    conditionalExpressionAlternate :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_ConditionalExpression = Model.Name "hydra.typescript.syntax.ConditionalExpression"
+
+_ConditionalExpression_test = Model.Name "test"
+
+_ConditionalExpression_consequent = Model.Name "consequent"
+
+_ConditionalExpression_alternate = Model.Name "alternate"
+
+-- | A continue statement
+type ContinueStatement = (Maybe Identifier)
+
+_ContinueStatement = Model.Name "hydra.typescript.syntax.ContinueStatement"
+
+-- | A do-while statement
+data DoWhileStatement =
+  DoWhileStatement {
+    doWhileStatementBody :: Statement,
+    doWhileStatementTest :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_DoWhileStatement = Model.Name "hydra.typescript.syntax.DoWhileStatement"
+
+_DoWhileStatement_body = Model.Name "body"
+
+_DoWhileStatement_test = Model.Name "test"
+
+-- | A documentation comment (JSDoc) with structured tags
+data DocumentationComment =
+  DocumentationComment {
+    -- | The main description
+    documentationCommentDescription :: String,
+    -- | Documentation tags (@param, @returns, etc.)
+    documentationCommentTags :: [DocumentationTag]}
+  deriving (Eq, Ord, Read, Show)
+
+_DocumentationComment = Model.Name "hydra.typescript.syntax.DocumentationComment"
+
+_DocumentationComment_description = Model.Name "description"
+
+_DocumentationComment_tags = Model.Name "tags"
+
+-- | A documentation tag (@param, @returns, @type, etc.)
+data DocumentationTag =
+  DocumentationTag {
+    -- | Tag name (param, returns, type, etc.)
+    documentationTagName :: String,
+    -- | Optional type expression
+    documentationTagType :: (Maybe TypeExpression),
+    -- | Optional parameter name (for @param)
+    documentationTagParamName :: (Maybe Identifier),
+    -- | Tag description
+    documentationTagDescription :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_DocumentationTag = Model.Name "hydra.typescript.syntax.DocumentationTag"
+
+_DocumentationTag_name = Model.Name "name"
+
+_DocumentationTag_type = Model.Name "type"
+
+_DocumentationTag_paramName = Model.Name "paramName"
+
+_DocumentationTag_description = Model.Name "description"
+
+-- | Export all declaration (export * from ...)
+data ExportAllDeclaration =
+  ExportAllDeclaration {
+    exportAllDeclarationExported :: (Maybe Identifier),
+    exportAllDeclarationSource :: StringLiteral}
+  deriving (Eq, Ord, Read, Show)
+
+_ExportAllDeclaration = Model.Name "hydra.typescript.syntax.ExportAllDeclaration"
+
+_ExportAllDeclaration_exported = Model.Name "exported"
+
+_ExportAllDeclaration_source = Model.Name "source"
+
+-- | An export declaration
+data ExportDeclaration =
+  -- | Named exports (export {x, y as z})
+  ExportDeclarationNamed NamedExport |
+  -- | Default export (export default ...)
+  ExportDeclarationDefault Expression |
+  -- | Export a declaration (export const x = ...)
+  ExportDeclarationDeclaration Statement |
+  -- | Export all (export * from ...)
+  ExportDeclarationAll ExportAllDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_ExportDeclaration = Model.Name "hydra.typescript.syntax.ExportDeclaration"
+
+_ExportDeclaration_named = Model.Name "named"
+
+_ExportDeclaration_default = Model.Name "default"
+
+_ExportDeclaration_declaration = Model.Name "declaration"
+
+_ExportDeclaration_all = Model.Name "all"
+
+-- | An export specifier (x as y)
+data ExportSpecifier =
+  ExportSpecifier {
+    exportSpecifierLocal :: Identifier,
+    exportSpecifierExported :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_ExportSpecifier = Model.Name "hydra.typescript.syntax.ExportSpecifier"
+
+_ExportSpecifier_local = Model.Name "local"
+
+_ExportSpecifier_exported = Model.Name "exported"
+
+-- | A TypeScript expression
+data Expression =
+  -- | A simple identifier
+  ExpressionIdentifier Identifier |
+  -- | A literal value
+  ExpressionLiteral Literal |
+  -- | An array expression [a, b, c]
+  ExpressionArray ArrayExpression |
+  -- | An object expression {a: 1, b: 2}
+  ExpressionObject ObjectExpression |
+  -- | A function expression
+  ExpressionFunction FunctionExpression |
+  -- | An arrow function expression
+  ExpressionArrow ArrowFunctionExpression |
+  -- | A function call expression
+  ExpressionCall CallExpression |
+  -- | A member access expression (obj.prop or obj[prop])
+  ExpressionMember MemberExpression |
+  -- | A conditional (ternary) expression
+  ExpressionConditional ConditionalExpression |
+  -- | A binary operation expression
+  ExpressionBinary BinaryExpression |
+  -- | A unary operation expression
+  ExpressionUnary UnaryExpression |
+  -- | An assignment expression
+  ExpressionAssignment AssignmentExpression |
+  -- | A sequence expression (a, b, c)
+  ExpressionSequence [Expression] |
+  -- | The 'this' keyword
+  ExpressionThis |
+  -- | A 'new' expression
+  ExpressionNew CallExpression |
+  -- | A yield expression
+  ExpressionYield (Maybe Expression) |
+  -- | An await expression
+  ExpressionAwait Expression |
+  -- | A spread expression (...x)
+  ExpressionSpread SpreadElement |
+  -- | A parenthesized expression
+  ExpressionParenthesized Expression |
+  -- | A TypeScript type assertion `<expr> as <type>`
+  ExpressionAsExpression AsExpression
+  deriving (Eq, Ord, Read, Show)
+
+_Expression = Model.Name "hydra.typescript.syntax.Expression"
+
+_Expression_identifier = Model.Name "identifier"
+
+_Expression_literal = Model.Name "literal"
+
+_Expression_array = Model.Name "array"
+
+_Expression_object = Model.Name "object"
+
+_Expression_function = Model.Name "function"
+
+_Expression_arrow = Model.Name "arrow"
+
+_Expression_call = Model.Name "call"
+
+_Expression_member = Model.Name "member"
+
+_Expression_conditional = Model.Name "conditional"
+
+_Expression_binary = Model.Name "binary"
+
+_Expression_unary = Model.Name "unary"
+
+_Expression_assignment = Model.Name "assignment"
+
+_Expression_sequence = Model.Name "sequence"
+
+_Expression_this = Model.Name "this"
+
+_Expression_new = Model.Name "new"
+
+_Expression_yield = Model.Name "yield"
+
+_Expression_await = Model.Name "await"
+
+_Expression_spread = Model.Name "spread"
+
+_Expression_parenthesized = Model.Name "parenthesized"
+
+_Expression_asExpression = Model.Name "asExpression"
+
+-- | Left-hand side of a for-in or for-of statement
+data ForInLeft =
+  ForInLeftVariable VariableDeclaration |
+  ForInLeftPattern Pattern
+  deriving (Eq, Ord, Read, Show)
+
+_ForInLeft = Model.Name "hydra.typescript.syntax.ForInLeft"
+
+_ForInLeft_variable = Model.Name "variable"
+
+_ForInLeft_pattern = Model.Name "pattern"
+
+-- | A for-in statement
+data ForInStatement =
+  ForInStatement {
+    forInStatementLeft :: ForInLeft,
+    forInStatementRight :: Expression,
+    forInStatementBody :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_ForInStatement = Model.Name "hydra.typescript.syntax.ForInStatement"
+
+_ForInStatement_left = Model.Name "left"
+
+_ForInStatement_right = Model.Name "right"
+
+_ForInStatement_body = Model.Name "body"
+
+-- | Initialization clause of a for statement
+data ForInit =
+  ForInitVariable VariableDeclaration |
+  ForInitExpression Expression
+  deriving (Eq, Ord, Read, Show)
+
+_ForInit = Model.Name "hydra.typescript.syntax.ForInit"
+
+_ForInit_variable = Model.Name "variable"
+
+_ForInit_expression = Model.Name "expression"
+
+-- | A for-of statement
+data ForOfStatement =
+  ForOfStatement {
+    -- | Whether this is a for-await-of
+    forOfStatementAwait :: Bool,
+    forOfStatementLeft :: ForInLeft,
+    forOfStatementRight :: Expression,
+    forOfStatementBody :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_ForOfStatement = Model.Name "hydra.typescript.syntax.ForOfStatement"
+
+_ForOfStatement_await = Model.Name "await"
+
+_ForOfStatement_left = Model.Name "left"
+
+_ForOfStatement_right = Model.Name "right"
+
+_ForOfStatement_body = Model.Name "body"
+
+-- | A for statement
+data ForStatement =
+  ForStatement {
+    -- | Initialization
+    forStatementInit :: (Maybe ForInit),
+    -- | Test condition
+    forStatementTest :: (Maybe Expression),
+    -- | Update expression
+    forStatementUpdate :: (Maybe Expression),
+    forStatementBody :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_ForStatement = Model.Name "hydra.typescript.syntax.ForStatement"
+
+_ForStatement_init = Model.Name "init"
+
+_ForStatement_test = Model.Name "test"
+
+_ForStatement_update = Model.Name "update"
+
+_ForStatement_body = Model.Name "body"
+
+-- | A function declaration
+data FunctionDeclaration =
+  FunctionDeclaration {
+    -- | Function name
+    functionDeclarationId :: Identifier,
+    -- | Function parameters
+    functionDeclarationParams :: [Pattern],
+    -- | Function body
+    functionDeclarationBody :: BlockStatement,
+    -- | Whether the function is async
+    functionDeclarationAsync :: Bool,
+    -- | Whether the function is a generator
+    functionDeclarationGenerator :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_FunctionDeclaration = Model.Name "hydra.typescript.syntax.FunctionDeclaration"
+
+_FunctionDeclaration_id = Model.Name "id"
+
+_FunctionDeclaration_params = Model.Name "params"
+
+_FunctionDeclaration_body = Model.Name "body"
+
+_FunctionDeclaration_async = Model.Name "async"
+
+_FunctionDeclaration_generator = Model.Name "generator"
+
+-- | A function declaration with optional JSDoc
+data FunctionDeclarationWithComments =
+  FunctionDeclarationWithComments {
+    -- | The function declaration
+    functionDeclarationWithCommentsBody :: FunctionDeclaration,
+    -- | Optional JSDoc comment
+    functionDeclarationWithCommentsComments :: (Maybe DocumentationComment)}
+  deriving (Eq, Ord, Read, Show)
+
+_FunctionDeclarationWithComments = Model.Name "hydra.typescript.syntax.FunctionDeclarationWithComments"
+
+_FunctionDeclarationWithComments_body = Model.Name "body"
+
+_FunctionDeclarationWithComments_comments = Model.Name "comments"
+
+-- | A function expression
+data FunctionExpression =
+  FunctionExpression {
+    -- | Optional function name
+    functionExpressionId :: (Maybe Identifier),
+    -- | Function parameters
+    functionExpressionParams :: [Pattern],
+    -- | Function body
+    functionExpressionBody :: BlockStatement,
+    -- | Whether the function is async
+    functionExpressionAsync :: Bool,
+    -- | Whether the function is a generator
+    functionExpressionGenerator :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_FunctionExpression = Model.Name "hydra.typescript.syntax.FunctionExpression"
+
+_FunctionExpression_id = Model.Name "id"
+
+_FunctionExpression_params = Model.Name "params"
+
+_FunctionExpression_body = Model.Name "body"
+
+_FunctionExpression_async = Model.Name "async"
+
+_FunctionExpression_generator = Model.Name "generator"
+
+-- | A function type expression
+data FunctionTypeExpression =
+  FunctionTypeExpression {
+    -- | Type parameters (generics)
+    functionTypeExpressionTypeParameters :: [TypeParameter],
+    -- | Parameter types
+    functionTypeExpressionParameters :: [TypeExpression],
+    -- | Return type
+    functionTypeExpressionReturnType :: TypeExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_FunctionTypeExpression = Model.Name "hydra.typescript.syntax.FunctionTypeExpression"
+
+_FunctionTypeExpression_typeParameters = Model.Name "typeParameters"
+
+_FunctionTypeExpression_parameters = Model.Name "parameters"
+
+_FunctionTypeExpression_returnType = Model.Name "returnType"
+
+-- | A TypeScript identifier (variable, function, class name, etc.)
+newtype Identifier =
+  Identifier {
+    unIdentifier :: String}
+  deriving (Eq, Ord, Read, Show)
+
+_Identifier = Model.Name "hydra.typescript.syntax.Identifier"
+
+-- | An if statement
+data IfStatement =
+  IfStatement {
+    ifStatementTest :: Expression,
+    ifStatementConsequent :: Statement,
+    ifStatementAlternate :: (Maybe Statement)}
+  deriving (Eq, Ord, Read, Show)
+
+_IfStatement = Model.Name "hydra.typescript.syntax.IfStatement"
+
+_IfStatement_test = Model.Name "test"
+
+_IfStatement_consequent = Model.Name "consequent"
+
+_IfStatement_alternate = Model.Name "alternate"
+
+-- | An import clause (named, default, or namespace import)
+data ImportClause =
+  ImportClauseNamed ImportSpecifier |
+  ImportClauseDefault ImportDefaultSpecifier |
+  ImportClauseNamespace ImportNamespaceSpecifier
+  deriving (Eq, Ord, Read, Show)
+
+_ImportClause = Model.Name "hydra.typescript.syntax.ImportClause"
+
+_ImportClause_named = Model.Name "named"
+
+_ImportClause_default = Model.Name "default"
+
+_ImportClause_namespace = Model.Name "namespace"
+
+-- | An import declaration
+data ImportDeclaration =
+  ImportDeclaration {
+    -- | What to import
+    importDeclarationSpecifiers :: [ImportClause],
+    -- | The module to import from
+    importDeclarationSource :: StringLiteral}
+  deriving (Eq, Ord, Read, Show)
+
+_ImportDeclaration = Model.Name "hydra.typescript.syntax.ImportDeclaration"
+
+_ImportDeclaration_specifiers = Model.Name "specifiers"
+
+_ImportDeclaration_source = Model.Name "source"
+
+-- | A default import specifier (import x from ...)
+newtype ImportDefaultSpecifier =
+  ImportDefaultSpecifier {
+    unImportDefaultSpecifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_ImportDefaultSpecifier = Model.Name "hydra.typescript.syntax.ImportDefaultSpecifier"
+
+-- | A namespace import specifier (import * as x from ...)
+newtype ImportNamespaceSpecifier =
+  ImportNamespaceSpecifier {
+    unImportNamespaceSpecifier :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_ImportNamespaceSpecifier = Model.Name "hydra.typescript.syntax.ImportNamespaceSpecifier"
+
+-- | A named import specifier (import {x as y} from ...)
+data ImportSpecifier =
+  ImportSpecifier {
+    importSpecifierImported :: Identifier,
+    importSpecifierLocal :: Identifier}
+  deriving (Eq, Ord, Read, Show)
+
+_ImportSpecifier = Model.Name "hydra.typescript.syntax.ImportSpecifier"
+
+_ImportSpecifier_imported = Model.Name "imported"
+
+_ImportSpecifier_local = Model.Name "local"
+
+-- | A TypeScript interface declaration (interface Foo<T> extends Bar { ... })
+data InterfaceDeclaration =
+  InterfaceDeclaration {
+    -- | Interface name
+    interfaceDeclarationName :: Identifier,
+    -- | Generic parameters
+    interfaceDeclarationTypeParameters :: [TypeParameter],
+    -- | Interfaces this one extends
+    interfaceDeclarationExtends :: [TypeExpression],
+    -- | Property signatures (the interface body)
+    interfaceDeclarationMembers :: [PropertySignature]}
+  deriving (Eq, Ord, Read, Show)
+
+_InterfaceDeclaration = Model.Name "hydra.typescript.syntax.InterfaceDeclaration"
+
+_InterfaceDeclaration_name = Model.Name "name"
+
+_InterfaceDeclaration_typeParameters = Model.Name "typeParameters"
+
+_InterfaceDeclaration_extends = Model.Name "extends"
+
+_InterfaceDeclaration_members = Model.Name "members"
+
+-- | An intersection type (A & B & C)
+type IntersectionTypeExpression = [TypeExpression]
+
+_IntersectionTypeExpression = Model.Name "hydra.typescript.syntax.IntersectionTypeExpression"
+
+-- | A labeled statement
+data LabeledStatement =
+  LabeledStatement {
+    labeledStatementLabel :: Identifier,
+    labeledStatementBody :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_LabeledStatement = Model.Name "hydra.typescript.syntax.LabeledStatement"
+
+_LabeledStatement_label = Model.Name "label"
+
+_LabeledStatement_body = Model.Name "body"
+
+-- | A literal value
+data Literal =
+  -- | A string literal
+  LiteralString StringLiteral |
+  -- | A numeric literal
+  LiteralNumber NumericLiteral |
+  -- | A boolean literal (true or false)
+  LiteralBoolean Bool |
+  -- | The null literal
+  LiteralNull |
+  -- | The undefined literal
+  LiteralUndefined |
+  -- | A BigInt literal (e.g., 123n)
+  LiteralBigInt Integer |
+  -- | A template literal
+  LiteralTemplate TemplateLiteral
+  deriving (Eq, Ord, Read, Show)
+
+_Literal = Model.Name "hydra.typescript.syntax.Literal"
+
+_Literal_string = Model.Name "string"
+
+_Literal_number = Model.Name "number"
+
+_Literal_boolean = Model.Name "boolean"
+
+_Literal_null = Model.Name "null"
+
+_Literal_undefined = Model.Name "undefined"
+
+_Literal_bigInt = Model.Name "bigInt"
+
+_Literal_template = Model.Name "template"
+
+-- | A member access expression
+data MemberExpression =
+  MemberExpression {
+    -- | The object
+    memberExpressionObject :: Expression,
+    -- | The property
+    memberExpressionProperty :: Expression,
+    -- | Whether using bracket notation (obj[prop])
+    memberExpressionComputed :: Bool,
+    -- | Whether using optional chaining (?.)
+    memberExpressionOptional :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_MemberExpression = Model.Name "hydra.typescript.syntax.MemberExpression"
+
+_MemberExpression_object = Model.Name "object"
+
+_MemberExpression_property = Model.Name "property"
+
+_MemberExpression_computed = Model.Name "computed"
+
+_MemberExpression_optional = Model.Name "optional"
+
+-- | A method definition in a class
+data MethodDefinition =
+  MethodDefinition {
+    -- | Method name
+    methodDefinitionKey :: Expression,
+    -- | Method function
+    methodDefinitionValue :: FunctionExpression,
+    -- | Method kind
+    methodDefinitionKind :: MethodKind,
+    -- | Whether the key is computed
+    methodDefinitionComputed :: Bool,
+    -- | Whether the method is static
+    methodDefinitionStatic :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_MethodDefinition = Model.Name "hydra.typescript.syntax.MethodDefinition"
+
+_MethodDefinition_key = Model.Name "key"
+
+_MethodDefinition_value = Model.Name "value"
+
+_MethodDefinition_kind = Model.Name "kind"
+
+_MethodDefinition_computed = Model.Name "computed"
+
+_MethodDefinition_static = Model.Name "static"
+
+-- | The kind of a class method
+data MethodKind =
+  MethodKindConstructor |
+  MethodKindMethod |
+  MethodKindGet |
+  MethodKindSet
+  deriving (Eq, Ord, Read, Show)
+
+_MethodKind = Model.Name "hydra.typescript.syntax.MethodKind"
+
+_MethodKind_constructor = Model.Name "constructor"
+
+_MethodKind_method = Model.Name "method"
+
+_MethodKind_get = Model.Name "get"
+
+_MethodKind_set = Model.Name "set"
+
+-- | A top-level item in a module
+data ModuleItem =
+  ModuleItemStatement Statement |
+  ModuleItemImport ImportDeclaration |
+  ModuleItemExport ExportDeclaration |
+  -- | A top-level interface declaration
+  ModuleItemInterface InterfaceDeclaration |
+  -- | A top-level type alias declaration
+  ModuleItemTypeAlias TypeAliasDeclaration
+  deriving (Eq, Ord, Read, Show)
+
+_ModuleItem = Model.Name "hydra.typescript.syntax.ModuleItem"
+
+_ModuleItem_statement = Model.Name "statement"
+
+_ModuleItem_import = Model.Name "import"
+
+_ModuleItem_export = Model.Name "export"
+
+_ModuleItem_interface = Model.Name "interface"
+
+_ModuleItem_typeAlias = Model.Name "typeAlias"
+
+-- | A module item with optional documentation
+data ModuleItemWithComments =
+  ModuleItemWithComments {
+    -- | The module item
+    moduleItemWithCommentsBody :: ModuleItem,
+    -- | Optional documentation comment
+    moduleItemWithCommentsComments :: (Maybe DocumentationComment)}
+  deriving (Eq, Ord, Read, Show)
+
+_ModuleItemWithComments = Model.Name "hydra.typescript.syntax.ModuleItemWithComments"
+
+_ModuleItemWithComments_body = Model.Name "body"
+
+_ModuleItemWithComments_comments = Model.Name "comments"
+
+-- | Named exports (export {x, y as z})
+data NamedExport =
+  NamedExport {
+    namedExportSpecifiers :: [ExportSpecifier],
+    namedExportSource :: (Maybe StringLiteral)}
+  deriving (Eq, Ord, Read, Show)
+
+_NamedExport = Model.Name "hydra.typescript.syntax.NamedExport"
+
+_NamedExport_specifiers = Model.Name "specifiers"
+
+_NamedExport_source = Model.Name "source"
+
+-- | A numeric literal (integer or floating-point)
+data NumericLiteral =
+  -- | An integer literal
+  NumericLiteralInteger I.Int64 |
+  -- | A floating-point literal
+  NumericLiteralFloat Double
+  deriving (Eq, Ord, Read, Show)
+
+_NumericLiteral = Model.Name "hydra.typescript.syntax.NumericLiteral"
+
+_NumericLiteral_integer = Model.Name "integer"
+
+_NumericLiteral_float = Model.Name "float"
+
+-- | An object expression {a: 1, b: 2}
+type ObjectExpression = [Property]
+
+_ObjectExpression = Model.Name "hydra.typescript.syntax.ObjectExpression"
+
+-- | An object destructuring pattern {a, b: c}
+data ObjectPattern =
+  ObjectPattern {
+    -- | The property patterns
+    objectPatternProperties :: [ObjectPatternProperty]}
+  deriving (Eq, Ord, Read, Show)
+
+_ObjectPattern = Model.Name "hydra.typescript.syntax.ObjectPattern"
+
+_ObjectPattern_properties = Model.Name "properties"
+
+-- | A property in an object pattern
+data ObjectPatternProperty =
+  ObjectPatternPropertyProperty Property |
+  ObjectPatternPropertyRest RestElement
+  deriving (Eq, Ord, Read, Show)
+
+_ObjectPatternProperty = Model.Name "hydra.typescript.syntax.ObjectPatternProperty"
+
+_ObjectPatternProperty_property = Model.Name "property"
+
+_ObjectPatternProperty_rest = Model.Name "rest"
+
+-- | An object type with property signatures
+type ObjectTypeExpression = [PropertySignature]
+
+_ObjectTypeExpression = Model.Name "hydra.typescript.syntax.ObjectTypeExpression"
+
+-- | A parameterized type (e.g., Array<T>, Map<K, V>)
+data ParameterizedTypeExpression =
+  ParameterizedTypeExpression {
+    parameterizedTypeExpressionBase :: TypeExpression,
+    parameterizedTypeExpressionArguments :: [TypeExpression]}
+  deriving (Eq, Ord, Read, Show)
+
+_ParameterizedTypeExpression = Model.Name "hydra.typescript.syntax.ParameterizedTypeExpression"
+
+_ParameterizedTypeExpression_base = Model.Name "base"
+
+_ParameterizedTypeExpression_arguments = Model.Name "arguments"
+
+-- | A binding pattern (for destructuring)
+data Pattern =
+  -- | A simple identifier binding
+  PatternIdentifier Identifier |
+  -- | An object destructuring pattern
+  PatternObject ObjectPattern |
+  -- | An array destructuring pattern
+  PatternArray ArrayPattern |
+  -- | A pattern with default value
+  PatternAssignment AssignmentPattern |
+  -- | A rest element (...x)
+  PatternRest RestElement |
+  -- | A pattern with a TypeScript type annotation (`x: T`)
+  PatternTyped TypedPattern
+  deriving (Eq, Ord, Read, Show)
+
+_Pattern = Model.Name "hydra.typescript.syntax.Pattern"
+
+_Pattern_identifier = Model.Name "identifier"
+
+_Pattern_object = Model.Name "object"
+
+_Pattern_array = Model.Name "array"
+
+_Pattern_assignment = Model.Name "assignment"
+
+_Pattern_rest = Model.Name "rest"
+
+_Pattern_typed = Model.Name "typed"
+
+-- | A TypeScript program (module)
+data Program =
+  Program {
+    -- | The module items
+    programBody :: [ModuleItem],
+    -- | Whether this is a module or script
+    programSourceType :: SourceType}
+  deriving (Eq, Ord, Read, Show)
+
+_Program = Model.Name "hydra.typescript.syntax.Program"
+
+_Program_body = Model.Name "body"
+
+_Program_sourceType = Model.Name "sourceType"
+
+-- | A property in an object expression
+data Property =
+  Property {
+    -- | Property key (identifier, literal, or computed)
+    propertyKey :: Expression,
+    -- | Property value
+    propertyValue :: Expression,
+    -- | Property kind (init, get, set)
+    propertyKind :: PropertyKind,
+    -- | Whether the key is computed [expr]
+    propertyComputed :: Bool,
+    -- | Whether using shorthand syntax {x} for {x: x}
+    propertyShorthand :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_Property = Model.Name "hydra.typescript.syntax.Property"
+
+_Property_key = Model.Name "key"
+
+_Property_value = Model.Name "value"
+
+_Property_kind = Model.Name "kind"
+
+_Property_computed = Model.Name "computed"
+
+_Property_shorthand = Model.Name "shorthand"
+
+-- | The kind of an object property
+data PropertyKind =
+  -- | A normal property initialization
+  PropertyKindInit |
+  -- | A getter
+  PropertyKindGet |
+  -- | A setter
+  PropertyKindSet
+  deriving (Eq, Ord, Read, Show)
+
+_PropertyKind = Model.Name "hydra.typescript.syntax.PropertyKind"
+
+_PropertyKind_init = Model.Name "init"
+
+_PropertyKind_get = Model.Name "get"
+
+_PropertyKind_set = Model.Name "set"
+
+-- | A property signature in an object type
+data PropertySignature =
+  PropertySignature {
+    -- | Property name
+    propertySignatureName :: Identifier,
+    -- | Property type
+    propertySignatureType :: TypeExpression,
+    -- | Whether the property is optional
+    propertySignatureOptional :: Bool,
+    -- | Whether the property is readonly
+    propertySignatureReadonly :: Bool,
+    -- | Optional JSDoc documentation comment to emit above this property
+    propertySignatureComments :: (Maybe DocumentationComment)}
+  deriving (Eq, Ord, Read, Show)
+
+_PropertySignature = Model.Name "hydra.typescript.syntax.PropertySignature"
+
+_PropertySignature_name = Model.Name "name"
+
+_PropertySignature_type = Model.Name "type"
+
+_PropertySignature_optional = Model.Name "optional"
+
+_PropertySignature_readonly = Model.Name "readonly"
+
+_PropertySignature_comments = Model.Name "comments"
+
+-- | A qualified name like 'module.submodule.name'
+type QualifiedName = [Identifier]
+
+_QualifiedName = Model.Name "hydra.typescript.syntax.QualifiedName"
+
+-- | A rest element pattern (...x)
+newtype RestElement =
+  RestElement {
+    unRestElement :: Pattern}
+  deriving (Eq, Ord, Read, Show)
+
+_RestElement = Model.Name "hydra.typescript.syntax.RestElement"
+
+-- | A return statement
+type ReturnStatement = (Maybe Expression)
+
+_ReturnStatement = Model.Name "hydra.typescript.syntax.ReturnStatement"
+
+-- | Whether the program is a module or script
+data SourceType =
+  SourceTypeModule |
+  SourceTypeScript
+  deriving (Eq, Ord, Read, Show)
+
+_SourceType = Model.Name "hydra.typescript.syntax.SourceType"
+
+_SourceType_module = Model.Name "module"
+
+_SourceType_script = Model.Name "script"
+
+-- | A spread element (...x)
+newtype SpreadElement =
+  SpreadElement {
+    unSpreadElement :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_SpreadElement = Model.Name "hydra.typescript.syntax.SpreadElement"
+
+-- | A TypeScript statement
+data Statement =
+  -- | An expression statement
+  StatementExpression Expression |
+  -- | A block statement
+  StatementBlock BlockStatement |
+  -- | An empty statement (;)
+  StatementEmpty |
+  -- | A debugger statement
+  StatementDebugger |
+  -- | A return statement
+  StatementReturn ReturnStatement |
+  -- | A break statement
+  StatementBreak BreakStatement |
+  -- | A continue statement
+  StatementContinue ContinueStatement |
+  -- | An if statement
+  StatementIf IfStatement |
+  -- | A switch statement
+  StatementSwitch SwitchStatement |
+  -- | A throw statement
+  StatementThrow ThrowStatement |
+  -- | A try statement
+  StatementTry TryStatement |
+  -- | A while statement
+  StatementWhile WhileStatement |
+  -- | A do-while statement
+  StatementDoWhile DoWhileStatement |
+  -- | A for statement
+  StatementFor ForStatement |
+  -- | A for-in statement
+  StatementForIn ForInStatement |
+  -- | A for-of statement
+  StatementForOf ForOfStatement |
+  -- | A variable declaration
+  StatementVariableDeclaration VariableDeclaration |
+  -- | A function declaration
+  StatementFunctionDeclaration FunctionDeclaration |
+  -- | A class declaration
+  StatementClassDeclaration ClassDeclaration |
+  -- | A labeled statement
+  StatementLabeled LabeledStatement
+  deriving (Eq, Ord, Read, Show)
+
+_Statement = Model.Name "hydra.typescript.syntax.Statement"
+
+_Statement_expression = Model.Name "expression"
+
+_Statement_block = Model.Name "block"
+
+_Statement_empty = Model.Name "empty"
+
+_Statement_debugger = Model.Name "debugger"
+
+_Statement_return = Model.Name "return"
+
+_Statement_break = Model.Name "break"
+
+_Statement_continue = Model.Name "continue"
+
+_Statement_if = Model.Name "if"
+
+_Statement_switch = Model.Name "switch"
+
+_Statement_throw = Model.Name "throw"
+
+_Statement_try = Model.Name "try"
+
+_Statement_while = Model.Name "while"
+
+_Statement_doWhile = Model.Name "doWhile"
+
+_Statement_for = Model.Name "for"
+
+_Statement_forIn = Model.Name "forIn"
+
+_Statement_forOf = Model.Name "forOf"
+
+_Statement_variableDeclaration = Model.Name "variableDeclaration"
+
+_Statement_functionDeclaration = Model.Name "functionDeclaration"
+
+_Statement_classDeclaration = Model.Name "classDeclaration"
+
+_Statement_labeled = Model.Name "labeled"
+
+-- | A statement with optional documentation
+data StatementWithComments =
+  StatementWithComments {
+    -- | The statement
+    statementWithCommentsBody :: Statement,
+    -- | Optional documentation comment
+    statementWithCommentsComments :: (Maybe DocumentationComment)}
+  deriving (Eq, Ord, Read, Show)
+
+_StatementWithComments = Model.Name "hydra.typescript.syntax.StatementWithComments"
+
+_StatementWithComments_body = Model.Name "body"
+
+_StatementWithComments_comments = Model.Name "comments"
+
+-- | A string literal with quote style
+data StringLiteral =
+  StringLiteral {
+    -- | The string value
+    stringLiteralValue :: String,
+    -- | Whether to use single quotes (true) or double quotes (false)
+    stringLiteralSingleQuote :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_StringLiteral = Model.Name "hydra.typescript.syntax.StringLiteral"
+
+_StringLiteral_value = Model.Name "value"
+
+_StringLiteral_singleQuote = Model.Name "singleQuote"
+
+-- | A case clause in a switch statement
+data SwitchCase =
+  SwitchCase {
+    -- | The test expression (Nothing for default)
+    switchCaseTest :: (Maybe Expression),
+    -- | The statements to execute
+    switchCaseConsequent :: [Statement]}
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchCase = Model.Name "hydra.typescript.syntax.SwitchCase"
+
+_SwitchCase_test = Model.Name "test"
+
+_SwitchCase_consequent = Model.Name "consequent"
+
+-- | A switch statement
+data SwitchStatement =
+  SwitchStatement {
+    switchStatementDiscriminant :: Expression,
+    switchStatementCases :: [SwitchCase]}
+  deriving (Eq, Ord, Read, Show)
+
+_SwitchStatement = Model.Name "hydra.typescript.syntax.SwitchStatement"
+
+_SwitchStatement_discriminant = Model.Name "discriminant"
+
+_SwitchStatement_cases = Model.Name "cases"
+
+-- | A static part of a template literal
+data TemplateElement =
+  TemplateElement {
+    -- | The raw string value
+    templateElementValue :: String,
+    -- | Whether this is the last element
+    templateElementTail :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_TemplateElement = Model.Name "hydra.typescript.syntax.TemplateElement"
+
+_TemplateElement_value = Model.Name "value"
+
+_TemplateElement_tail = Model.Name "tail"
+
+-- | A template literal (backtick string with interpolations)
+data TemplateLiteral =
+  TemplateLiteral {
+    -- | The static string parts
+    templateLiteralQuasis :: [TemplateElement],
+    -- | The interpolated expressions
+    templateLiteralExpressions :: [Expression]}
+  deriving (Eq, Ord, Read, Show)
+
+_TemplateLiteral = Model.Name "hydra.typescript.syntax.TemplateLiteral"
+
+_TemplateLiteral_quasis = Model.Name "quasis"
+
+_TemplateLiteral_expressions = Model.Name "expressions"
+
+-- | A throw statement
+newtype ThrowStatement =
+  ThrowStatement {
+    unThrowStatement :: Expression}
+  deriving (Eq, Ord, Read, Show)
+
+_ThrowStatement = Model.Name "hydra.typescript.syntax.ThrowStatement"
+
+-- | A try statement
+data TryStatement =
+  TryStatement {
+    tryStatementBlock :: BlockStatement,
+    tryStatementHandler :: (Maybe CatchClause),
+    tryStatementFinalizer :: (Maybe BlockStatement)}
+  deriving (Eq, Ord, Read, Show)
+
+_TryStatement = Model.Name "hydra.typescript.syntax.TryStatement"
+
+_TryStatement_block = Model.Name "block"
+
+_TryStatement_handler = Model.Name "handler"
+
+_TryStatement_finalizer = Model.Name "finalizer"
+
+-- | A tuple type ([A, B] or readonly [A, B])
+type TupleTypeExpression = [TypeExpression]
+
+_TupleTypeExpression = Model.Name "hydra.typescript.syntax.TupleTypeExpression"
+
+-- | A TypeScript type alias declaration (type Foo<T> = ...)
+data TypeAliasDeclaration =
+  TypeAliasDeclaration {
+    -- | Alias name
+    typeAliasDeclarationName :: Identifier,
+    -- | Generic parameters
+    typeAliasDeclarationTypeParameters :: [TypeParameter],
+    -- | The right-hand-side type
+    typeAliasDeclarationType :: TypeExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeAliasDeclaration = Model.Name "hydra.typescript.syntax.TypeAliasDeclaration"
+
+_TypeAliasDeclaration_name = Model.Name "name"
+
+_TypeAliasDeclaration_typeParameters = Model.Name "typeParameters"
+
+_TypeAliasDeclaration_type = Model.Name "type"
+
+-- | A type annotation (for JSDoc comments or TypeScript)
+newtype TypeAnnotation =
+  TypeAnnotation {
+    unTypeAnnotation :: TypeExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeAnnotation = Model.Name "hydra.typescript.syntax.TypeAnnotation"
+
+-- | A type expression
+data TypeExpression =
+  -- | A named type (e.g., 'string', 'number', 'MyClass')
+  TypeExpressionIdentifier Identifier |
+  -- | A literal type (e.g., 'hello', 42)
+  TypeExpressionLiteral Literal |
+  -- | An array type
+  TypeExpressionArray ArrayTypeExpression |
+  -- | A function type
+  TypeExpressionFunction FunctionTypeExpression |
+  -- | An object type
+  TypeExpressionObject ObjectTypeExpression |
+  -- | A tuple type (readonly [A, B, C])
+  TypeExpressionTuple TupleTypeExpression |
+  -- | A union type (A | B)
+  TypeExpressionUnion UnionTypeExpression |
+  -- | An intersection type (A & B)
+  TypeExpressionIntersection IntersectionTypeExpression |
+  -- | A parameterized type (e.g., Array<T>, Map<K, V>)
+  TypeExpressionParameterized ParameterizedTypeExpression |
+  -- | An optional type (T | undefined or T?)
+  TypeExpressionOptional TypeExpression |
+  -- | A readonly modifier (readonly T[], readonly [A, B])
+  TypeExpressionReadonly TypeExpression |
+  -- | The 'any' type
+  TypeExpressionAny |
+  -- | The 'unknown' type
+  TypeExpressionUnknown |
+  -- | The 'void' type
+  TypeExpressionVoid |
+  -- | The 'never' type
+  TypeExpressionNever
+  deriving (Eq, Ord, Read, Show)
+
+_TypeExpression = Model.Name "hydra.typescript.syntax.TypeExpression"
+
+_TypeExpression_identifier = Model.Name "identifier"
+
+_TypeExpression_literal = Model.Name "literal"
+
+_TypeExpression_array = Model.Name "array"
+
+_TypeExpression_function = Model.Name "function"
+
+_TypeExpression_object = Model.Name "object"
+
+_TypeExpression_tuple = Model.Name "tuple"
+
+_TypeExpression_union = Model.Name "union"
+
+_TypeExpression_intersection = Model.Name "intersection"
+
+_TypeExpression_parameterized = Model.Name "parameterized"
+
+_TypeExpression_optional = Model.Name "optional"
+
+_TypeExpression_readonly = Model.Name "readonly"
+
+_TypeExpression_any = Model.Name "any"
+
+_TypeExpression_unknown = Model.Name "unknown"
+
+_TypeExpression_void = Model.Name "void"
+
+_TypeExpression_never = Model.Name "never"
+
+-- | A type parameter (generic)
+data TypeParameter =
+  TypeParameter {
+    -- | Parameter name
+    typeParameterName :: Identifier,
+    -- | Optional constraint (extends clause)
+    typeParameterConstraint :: (Maybe TypeExpression),
+    -- | Optional default type
+    typeParameterDefault :: (Maybe TypeExpression)}
+  deriving (Eq, Ord, Read, Show)
+
+_TypeParameter = Model.Name "hydra.typescript.syntax.TypeParameter"
+
+_TypeParameter_name = Model.Name "name"
+
+_TypeParameter_constraint = Model.Name "constraint"
+
+_TypeParameter_default = Model.Name "default"
+
+-- | A pattern with a TypeScript type annotation (`x: T`)
+data TypedPattern =
+  TypedPattern {
+    -- | The underlying binding pattern
+    typedPatternPattern :: Pattern,
+    -- | The TypeScript type annotation
+    typedPatternType :: TypeExpression}
+  deriving (Eq, Ord, Read, Show)
+
+_TypedPattern = Model.Name "hydra.typescript.syntax.TypedPattern"
+
+_TypedPattern_pattern = Model.Name "pattern"
+
+_TypedPattern_type = Model.Name "type"
+
+-- | A unary operation expression
+data UnaryExpression =
+  UnaryExpression {
+    unaryExpressionOperator :: UnaryOperator,
+    unaryExpressionArgument :: Expression,
+    -- | Whether the operator is prefix (true) or postfix (false)
+    unaryExpressionPrefix :: Bool}
+  deriving (Eq, Ord, Read, Show)
+
+_UnaryExpression = Model.Name "hydra.typescript.syntax.UnaryExpression"
+
+_UnaryExpression_operator = Model.Name "operator"
+
+_UnaryExpression_argument = Model.Name "argument"
+
+_UnaryExpression_prefix = Model.Name "prefix"
+
+-- | A unary operator
+data UnaryOperator =
+  -- | -
+  UnaryOperatorNegate |
+  -- | +
+  UnaryOperatorPlus |
+  -- | !
+  UnaryOperatorNot |
+  -- | ~
+  UnaryOperatorBitwiseNot |
+  -- | typeof
+  UnaryOperatorTypeof |
+  -- | void
+  UnaryOperatorVoid |
+  -- | delete
+  UnaryOperatorDelete |
+  -- | ++
+  UnaryOperatorIncrement |
+  -- | --
+  UnaryOperatorDecrement
+  deriving (Eq, Ord, Read, Show)
+
+_UnaryOperator = Model.Name "hydra.typescript.syntax.UnaryOperator"
+
+_UnaryOperator_negate = Model.Name "negate"
+
+_UnaryOperator_plus = Model.Name "plus"
+
+_UnaryOperator_not = Model.Name "not"
+
+_UnaryOperator_bitwiseNot = Model.Name "bitwiseNot"
+
+_UnaryOperator_typeof = Model.Name "typeof"
+
+_UnaryOperator_void = Model.Name "void"
+
+_UnaryOperator_delete = Model.Name "delete"
+
+_UnaryOperator_increment = Model.Name "increment"
+
+_UnaryOperator_decrement = Model.Name "decrement"
+
+-- | A union type (A | B | C)
+type UnionTypeExpression = [TypeExpression]
+
+_UnionTypeExpression = Model.Name "hydra.typescript.syntax.UnionTypeExpression"
+
+-- | A variable declaration (var, let, const)
+data VariableDeclaration =
+  VariableDeclaration {
+    variableDeclarationKind :: VariableKind,
+    variableDeclarationDeclarations :: [VariableDeclarator]}
+  deriving (Eq, Ord, Read, Show)
+
+_VariableDeclaration = Model.Name "hydra.typescript.syntax.VariableDeclaration"
+
+_VariableDeclaration_kind = Model.Name "kind"
+
+_VariableDeclaration_declarations = Model.Name "declarations"
+
+-- | A variable declarator (id = init)
+data VariableDeclarator =
+  VariableDeclarator {
+    variableDeclaratorId :: Pattern,
+    variableDeclaratorInit :: (Maybe Expression)}
+  deriving (Eq, Ord, Read, Show)
+
+_VariableDeclarator = Model.Name "hydra.typescript.syntax.VariableDeclarator"
+
+_VariableDeclarator_id = Model.Name "id"
+
+_VariableDeclarator_init = Model.Name "init"
+
+-- | The kind of variable declaration
+data VariableKind =
+  VariableKindVar |
+  VariableKindLet |
+  VariableKindConst
+  deriving (Eq, Ord, Read, Show)
+
+_VariableKind = Model.Name "hydra.typescript.syntax.VariableKind"
+
+_VariableKind_var = Model.Name "var"
+
+_VariableKind_let = Model.Name "let"
+
+_VariableKind_const = Model.Name "const"
+
+-- | A while statement
+data WhileStatement =
+  WhileStatement {
+    whileStatementTest :: Expression,
+    whileStatementBody :: Statement}
+  deriving (Eq, Ord, Read, Show)
+
+_WhileStatement = Model.Name "hydra.typescript.syntax.WhileStatement"
+
+_WhileStatement_test = Model.Name "test"
+
+_WhileStatement_body = Model.Name "body"
